MoonLight
英文 | 中文
什么是 MoonLight?
MoonLight 是一款用于 iOS/macOS 应用程序性能测试的工具包,可以将其集成到您的应用程序中以轻松实现性能数据的捕获。MoonLight 可以提供 App CPU、系统 CPU、App 内存、系统 GPU 和 GPU 信息。
为什么将其命名为 MoonLight?
我们将其命名为 MoonLight 是因为我们希望它能让性能测试更简单、更高效,就像宁静的月光在黑暗的夜晚引领旅人,给我们带来安宁和舒适的感觉。
MoonLight 具有低性能消耗且易于使用。MoonLight 捕获的性能数据准确可靠。它将帮助开发团队更快、更准确地定位性能问题,促进性能优化。帮助测试团队更快、更准确地获取性能数据,提高测试效率。
比较
工具
MoonLight捕获的性能数据与Instruments相同。具体优缺点如下。
-
Instruments无法应用于性能测试自动化,无法得到用于科学分析的具体数据。相比之下,MoonLight可以提供准确的性能数据,并支持实施性能测试自动化。
-
Instruments无法应用于远程测试。您无法在设备位于公司时在家中测试您的应用。因此,无法同时测试大量设备。相比之下,MoonLight可以支持这一点。
-
系统较低的iOS设备无法在最新版本的Instruments上测试。相比之下,MoonLight没有此限制。
-
Instruments在macOS上不支持GPU捕获。相比之下,MoonLight支持。MoonLight的GPU信息与macOS的活动监视器相同。
-
Instruments也有优点,例如提供内存泄漏测试的分配和泄漏。Instruments还可以提供数据可视化。相比之下,MoonLight是可编程的。开发者可以使用MoonLight实现数据可视化和自动化测试需求。
GT
GT是腾讯的一个开源性能测试项目。但GT也有许多缺点。
-
GT不支持macOS。相比之下,MoonLight支持。
-
GT的应用内存与Instruments不同。而且GT无法输出GPU和系统CPU。相比之下,MoonLight支持。
-
当GT集成到用户的app中时,应用需要添加太多依赖框架,并且需要禁用Bitcode支持。此外,GT的包大小比MoonLight大得多。MoonLight只需要在iOS上添加一个框架,在macOS上则不需要添加任何框架。
Perfdog
Perfdog是腾讯的一个闭源性能测试工具。但它也有许多缺点。
-
Perfdog不支持macOS应用。
-
Perfdog不是一个自动化的性能测试工具。它需要用户点击UI按钮以启动或停止性能测试。Perfdog的优点是数据可视化。
-
Perfdog并非开源项目。且它确实在iOS14上存在严重的bug,即Perfdog捕获的应用CPU数据是错误的。如果使用Perfdog测试您的应用,未来可能会发现新的严重bug,因为我们并不知道Perfdog的源代码。
需求
- iOS 8.0+
- macOS 10.11+
安装
Cocoapods
- iOS
警告!对于iOS,请不要在AppStore发布时使用它。建议在调试模式下使用。
pod 'MoonLight_iOS', :configurations => ['Debug']
- macOS
pod 'MoonLight_macOS'
使用方法
// 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的性能消耗非常低,几乎可以忽略不计。应用CPU、系统CPU、应用内存和iOS GPU与Instruments相同,macOS GPU与Activity Monitor相同。
MoonLight VS Instruments
- iOS
- macOS
注释:CPU(MoonLight) = CPU(Instruments) / 核心数
月光性能消耗
测试案例:使用 Instruments,打开应用,启用月光检测,获取性能数据1。然后,再次打开应用,不启用月光检测,获取性能数据2。性能消耗 = 数据2 - 数据1。
- iOS
应用内存 = 7.38 - 7.34 = 0.04Mb,应用 CPU = (2.1%-0.1%)/ (6 核) = 0.33%,GPU = 0%。
设备:iPhone XS iOS14.2,核心数:6
- macOS
应用内存 = 14.42-14.36 = 0.06Mb,应用 CPU = (0.08% - 0.0%) / (4 核) = 0.02%,GPU = 0%。
设备:2017 款 Macbook Pro 13.3 英特尔 i5,系统:BigSur 11.0.1
作者
Echoo J
许可证
MoonLight 可在 MIT 许可证下获得。有关更多信息,请参阅 LICENSE 文件。