大数跨境
0
0

Agora 开源 | MoonLight —— 助你实现更好的iOS/Mac 自动化性能测试

Agora 开源 | MoonLight —— 助你实现更好的iOS/Mac 自动化性能测试 RTE开发者社区
2021-01-26
0
导读:介绍一个开源的 iOS/Mac 上的轻量化的性能测试组件。


MoonLight 是 iOS/Mac 上的轻量化的性能测试组件,它可以单独集成在任何 App 中实现自动化性能数据的采集,你可以非常轻松的获取到 App CPU、System CPU、App Memory、System GPU 以及 GPU Info 的数据。MoonLight 由声网Agora 开发,并已开源至 Github。
开源地址:https://github.com/AgoraIO-Community/MoonLight

Photo by Lester Salmins on Unsplash

为什么我们要做这样一个开源工具呢?大家可能遇到过这样的情况

在没有 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 的作者一起交流互动哦!扫描下方海报二维码即可报名





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



【声明】内容源于网络
0
0
RTE开发者社区
RTE 开发者社区是聚焦实时互动领域的中立开发者社区。不止于纯粹的技术交流,我们相信开发者具备更加丰盈的个体价值。行业发展变革、开发者职涯发展、技术创业创新资源,我们将陪跑开发者,共享、共建、共成长。
内容 1122
粉丝 0
RTE开发者社区 RTE 开发者社区是聚焦实时互动领域的中立开发者社区。不止于纯粹的技术交流,我们相信开发者具备更加丰盈的个体价值。行业发展变革、开发者职涯发展、技术创业创新资源,我们将陪跑开发者,共享、共建、共成长。
总阅读653
粉丝0
内容1.1k