Py学习  »  Git

GitHub 上又一款超赞的测试神器问世,代号「MoonLight」!

GitHubDaily • 3 年前 • 293 次点击  
公众号关注 “GitHubDaily”
设为 “星标”,每天带你逛 GitHub!



大家好,我是小 G。


近期,声网 Agora 开源了一款用于 iOS/Mac 上的轻量化的性能测试组件 —— MoonLight。它可以单独集成在任何 App 中实现自动化性能数据的采集,让你非常轻松地获取到 App CPU、System CPU、App Memory、System GPU 以及 GPU Info 的数据。


开源地址:https://github.com/AgoraIO-Community/MoonLight


Photo by Lester Salmins on Unsplash


声网Agora 为什么会开源这样一款工具呢?由于声网是一家提供实时互动服务的公司,通过 API 的形式让开发者可在应用中快速实现音视频通话、实时消息等功能。而SDK 的用户同样也关注应用的性能。所以就可能遇到这样的情况

在没有 MoonLight 之前

客(lao)户(ban):Hello, 我想知道使用你们公司的 SDK 在进频道直播的时候的性能消耗是怎么样的?比如 iPhone 6、7、8、XS……,还有 360P、720P、1080P。对了, 还有我的 Mac以及 iPad。

我用 Instruments 一台一台来试试, 可能需要…


客(lao)户(ban):我还想知道在调用了这个 API 并且进频道后,在上面那些设备、那些分辨率上的性能情况?

...周末加班,一定给


客(lao)户(ban):对了,这些设备都在我们公司,不在你们公司呢,考虑到安全只能在我们公司测试哦。

...这,在下做不到啊…



使用 MoonLight 后

客(lao)户(ban):这次的需求跟上次一样,可以搞定不?

可以在你们的设备上安装好集成了 MoonLight 的测试专用 App 吗?我这边只要调用相关的脚本并指定好那些测试设备,就可以在服务端就能一次性获取到这些设备的性能了。很快就能给结果。



MoonLight 的愿景


MoonLight,它的中文意思名为月光。月光弥漫在地球之上是宁静且自然的,月光会给予地球上的人们以指引。而月光的寓意恰好和声网开发性能测试组件的出发点相契合。
声网希望 iOS/Mac 的性能测试也能像月光一样,轻松且自然。MoonLight 有着更低的性能消耗,更容易的使用方式,更精准的性能数据。它将帮助开发团队更快速更精确的定位性能问题,进而推动性能优化和提升。帮助测试团队更快更准的获取性能数据,提升测试效率。
对比其他的性能测试工具
Instruments
MoonLight 采集到的性能数据是基本和 Instruments 保持一致的。具体的优劣对比如下:

1. Instruments 无法实现性能自动化,无法将获取到的性能数据提取出来进行分析,最后提供出去的性能数据准确度不够,存在人为误差。MoonLight 可以解决这个问题。

2. Instruments 无法实现远程性能测试,自然也无法实现高并发的性能测试,通常来说需要一台设备连接 USB 线后测试,然后一台测试完再测试下一台。MoonLight 可以一次性测试非常多台,也没有必须连接数据线的要求。

3. 高版本的 Instruments 无法测试一些低端系统机器的性能,MoonLight 可以完美支持。

4. 对于 macOS 上的 App, Instruments 是不支持 GPU 的输出,MoonLight 支持。经过测试,GPU 的输出和 macOS 自带的活动管理器 GPU 输出保持一致。

5. Instruments 优点是数据可视化,并且可以提供内存泄漏测试。MoonLight 暂时不提供数据可视化,但是由于 MoonLight 是可编程的,当开发者拿到相关的性能数据后, 可以自行实现数据上报或者可视化的处理。

GT
GT 是 Tencent 开源的性能测试组件。

1. GT 不支持 macOS,MoonLight 支持。

2. GT 采集到的 App Memory 数据和 Instruments 是不一致的。GT 无法输出 GPU、System CPU, 但是 MoonLight 可以。

3. GT 集成到 App 中,需要添加非常多的依赖库,取消掉 Bitcode 支持,自身也比较庞大,并且会增加 App 的包大小。MoonLight 更轻量化,对于 iOS 仅仅只需要增加一个系统库,对于 Mac 不需要增加任何的系统库。

Perfdog

1. Perfdog 无法支持 macOS 上的 App 的性能测试。

2. Perfdog 并非是一个自动化的性能测试工具,优点是数据可视化。

3. Perfdog 并非是一个开源的测试工具,之前在 iOS 14 上出现过 App CPU 不准的 Bug, 而我们也并不清楚其实现的原理和代码,未来依旧有可能在某些系统上出现性能项测试不准的情况。

MoonLight 安装与使用

运行环境

  • iOS 8.0+

  • macOS 10.11+

安装

Cocoapods

  • iOS:

注意:请不要用在 AppStore release 版本上,建议在 debug 版本上使用。

pod 'MoonLight_iOS', :configurations => ['Debug']
  • macOS

pod 'MoonLight_macOS'

MoonLight 的使用

// Step1: create MoonLight instance and set sampling interval.    _moonLight = [[MoonLight alloc]initWithDelegate:self timeInterval:1];
// Step2: start timer. [_moonLight startTimer];

// Step3: through the callback, you can get all the performance data per interval.- (void)captureOutputAppCPU:(float)appCPU systemCPU:(float)systemCPU appMemory:(float)appMemory gpuUsage:(float)gpuUsage gpuInfo:(NSString *)gpuInfo { NSLog(@"appMemory:%f", appMemory); NSLog(@"appCPU:%f", appCPU); NSLog(@"gpuUsage:%f", gpuUsage); NSLog(@"systemCPU:%f", systemCPU); NSLog(@"gpuInfo:%@", gpuInfo);}
// Step4:if you want to stop capturing the performance data, use "stopTimer". [_moonLight stopTimer];


MoonLight 自测的结果
iOS/Mac MoonLight 自身的性能消耗非常低,几乎可以忽略不计。测试的过程中,性能输出稳定,App CPU、System CPU、App Memory、GPU 可以和 Instruments 或者活动监视器结果保持一致。
1. MoonLight VS Instruments
  • iOS

  • macOS

注:MoonLight 对 CPU 有做归一化处理. CPU(MoonLight) = CPU(Instruments) / 核心数

2. MoonLight 自身的性能消耗
测试 case: 

Step1:打开 App,打开 MoonLight 的检测,得出测试性能 data1。

Step2:打开 App, 不打开 MoonLight 的检测,测出测试性能 data2。

最后的性能消耗 = data1 - data2。
  • iOS 端,测试环境是 iPhone XS iOS 14.2(六核)。

测试结果:

App Memory 消耗 = 7.38-7.34 = 0.04Mb ;

App CPU 消耗 = (2.1%-0.1%)/ (6 核) = 0.33% ;

GPU = 0% ;

并且整个性能测试阶段,数据波动稳定,不会出现 MoonLight 的开启造成性能有不稳定变化。
  • macOS 端,测试环境是 Macbook Pro 2017 13.3 Intel i5 , System: BigSur 11.0.1

测试结果:

App Memory 消耗 = 14.42-14.36 = 0.06Mb ;

App CPU 消耗 = (0.08%-0.0%)/ (4 核) = 0.02% ;

GPU = 0% ;

并且整个性能测试阶段,数据波动稳定,不会出现 MoonLight 的开启造成性能有不稳定变化。
写在最后
MoonLight 是声网从日常的开发中诞生的开源工具,我们希望它能帮助开发团队更快速更精确的定位性能问题,进而推动性能优化和提升;帮助测试团队更快更准的获取性能数据,提升测试效率。欢迎大家使用。
MoonLight 开源地址:https://github.com/AgoraIO-Community/MoonLight
2 月 3 日 晚间的 Agora Talk 直播中,大家还可以来与 MoonLight 的作者一起交流互动哦!扫描下方海报二维码即可报名






扫码加入交流群
与开源项目作者交流工具使用与开发的日常



Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/106808
 
293 次点击