
Photo by Lester Salmins on Unsplash

MoonLight 的愿景
1. Instruments 无法实现性能自动化,无法将获取到的性能数据提取出来进行分析,最后提供出去的性能数据准确度不够,存在人为误差。MoonLight 可以解决这个问题。
2. Instruments 无法实现远程性能测试,自然也无法实现高并发的性能测试,通常来说需要一台设备连接 USB 线后测试,然后一台测试完再测试下一台。MoonLight 可以一次性测试非常多台,也没有必须连接数据线的要求。
3. 高版本的 Instruments 无法测试一些低端系统机器的性能,MoonLight 可以完美支持。
4. 对于 macOS 上的 App, Instruments 是不支持 GPU 的输出,MoonLight 支持。经过测试,GPU 的输出和 macOS 自带的活动管理器 GPU 输出保持一致。
5. Instruments 优点是数据可视化,并且可以提供内存泄漏测试。MoonLight 暂时不提供数据可视化,但是由于 MoonLight 是可编程的,当开发者拿到相关的性能数据后, 可以自行实现数据上报或者可视化的处理。
1. GT 不支持 macOS,MoonLight 支持。
2. GT 采集到的 App Memory 数据和 Instruments 是不一致的。GT 无法输出 GPU、System CPU, 但是 MoonLight 可以。
3. GT 集成到 App 中,需要添加非常多的依赖库,取消掉 Bitcode 支持,自身也比较庞大,并且会增加 App 的包大小。MoonLight 更轻量化,对于 iOS 仅仅只需要增加一个系统库,对于 Mac 不需要增加任何的系统库。
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];
iOS

macOS

注:MoonLight 对 CPU 有做归一化处理. CPU(MoonLight) = CPU(Instruments) / 核心数
Step1:打开 App,打开 MoonLight 的检测,得出测试性能 data1。
Step2:打开 App, 不打开 MoonLight 的检测,测出测试性能 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% ;
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% ;


