MoonLight_iOS 2.1.0

MoonLight_iOS 2.1.0

LiuJunJie维护。



  • LiuJunJie

MoonLight

英文 | 中文

什么是 MoonLight?

MoonLight 是一款用于 iOS/macOS 应用程序性能测试的工具包,可以将其集成到您的应用程序中以轻松实现性能数据的捕获。MoonLight 可以提供 App CPU、系统 CPU、App 内存、系统 GPU 和 GPU 信息。

为什么将其命名为 MoonLight?

我们将其命名为 MoonLight 是因为我们希望它能让性能测试更简单、更高效,就像宁静的月光在黑暗的夜晚引领旅人,给我们带来安宁和舒适的感觉。

MoonLight 具有低性能消耗且易于使用。MoonLight 捕获的性能数据准确可靠。它将帮助开发团队更快、更准确地定位性能问题,促进性能优化。帮助测试团队更快、更准确地获取性能数据,提高测试效率。

比较

工具

MoonLight捕获的性能数据与Instruments相同。具体优缺点如下。

  1. Instruments无法应用于性能测试自动化,无法得到用于科学分析的具体数据。相比之下,MoonLight可以提供准确的性能数据,并支持实施性能测试自动化。

  2. Instruments无法应用于远程测试。您无法在设备位于公司时在家中测试您的应用。因此,无法同时测试大量设备。相比之下,MoonLight可以支持这一点。

  3. 系统较低的iOS设备无法在最新版本的Instruments上测试。相比之下,MoonLight没有此限制。

  4. Instruments在macOS上不支持GPU捕获。相比之下,MoonLight支持。MoonLight的GPU信息与macOS的活动监视器相同。

  5. Instruments也有优点,例如提供内存泄漏测试的分配和泄漏。Instruments还可以提供数据可视化。相比之下,MoonLight是可编程的。开发者可以使用MoonLight实现数据可视化和自动化测试需求。

GT

GT是腾讯的一个开源性能测试项目。但GT也有许多缺点。

  1. GT不支持macOS。相比之下,MoonLight支持。

  2. GT的应用内存与Instruments不同。而且GT无法输出GPU和系统CPU。相比之下,MoonLight支持。

  3. 当GT集成到用户的app中时,应用需要添加太多依赖框架,并且需要禁用Bitcode支持。此外,GT的包大小比MoonLight大得多。MoonLight只需要在iOS上添加一个框架,在macOS上则不需要添加任何框架。

Perfdog

Perfdog是腾讯的一个闭源性能测试工具。但它也有许多缺点。

  1. Perfdog不支持macOS应用。

  2. Perfdog不是一个自动化的性能测试工具。它需要用户点击UI按钮以启动或停止性能测试。Perfdog的优点是数据可视化。

  3. 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

avatar

  • macOS

avatar

注释: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 文件。