共计 2767 个字符,预计需要花费 7 分钟才能阅读完成。
作者:MoonLight 开源我的项目作者、声网 Agora Echoo J
什么是 MoonLight?
MoonLight 是 iOS/Mac 上的轻量化的性能测试组件,它能够独自集成在任何 App 中实现自动化性能数据的采集,你能够十分轻松的获取到 App CPU、System CPU、App Memory、System GPU 以及 GPU Info 的数据。MoonLight 由声网 Agora 开发,并已开源至 Github。
开源地址:https://github.com/AgoraIO-Community/MoonLight
比照其余的性能测试工具
Instruments
MoonLight 采集到的性能数据是根本和 Instruments 保持一致的。具体的优劣比照如下:
- Instruments 无奈实现性能自动化, 无奈将获取到的性能数据提取进去进行剖析,最初提供进来的性能数据准确度不够,存在人为误差。MoonLight 能够解决这个问题。
- Instruments 无奈实现近程性能测试,天然也无奈实现高并发的性能测试,通常来说须要一台设施连贯 USB 线后测试,而后一台测试完再测试下一台。MoonLight 能够一次性测试十分多台,也没有必须连贯数据线的要求。
- 高版本的 Instruments 无奈测试一些低端零碎机器的性能,MoonLight 能够完满反对。
- 对于 macOS 上的 App, Instruments 是不反对 GPU 的输入,MoonLight 反对。进过测试,GPU 的输入和 macOS 自带的流动管理器 GPU 输入保持一致。
- Instruments 长处是数据可视化,并且能够提供内存透露测试。MoonLight 临时不提供数据可视化,然而因为 MoonLight 是可编程的,当开发者拿到相干的性能数据后, 能够自行实现数据上报或者可视化的解决。
GT
- GT 不反对 macOS,MoonLight 反对。
- GT 采集到的 App Memory 数据和 Instruments 是不统一的。GT 无奈输入 GPU、System CPU, 然而 MoonLight 能够。
- GT 集成到 App 中,须要增加十分多的依赖库,勾销掉 Bitcode 反对,本身也比拟宏大,并且会减少 App 的包大小。MoonLight 更轻量化,对于 iOS 仅仅只须要减少一个零碎库,对于 Mac 不须要减少任何的零碎库。
Perfdog
- Perfdog 无奈反对 macOS 上的 App 的性能测试。
- Perfdog 并非是一个自动化的性能测试工具,长处是数据可视化。
- Perfdog 并非是一个开源的测试工具,之前在 iOS 14 上呈现过 App CPU 不准的 Bug, 而咱们也并不分明其实现的原理和代码,将来仍旧有可能在某些零碎上呈现性能项测试不准的状况。
Requirements
- iOS 8.0+
- macOS 10.11+
Installation
Cocoapods
- iOS:
Warning! For iOS, do not use it on AppStore release. Recommend use it on debug mode.
pod 'MoonLight_iOS', :configurations => ['Debug']
- macOS:
pod 'MoonLight_macOS'
Usage
// 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 或者流动监视器后果保持一致。
一、MoonLight VS Instruments
- iOS
- macOS
备注:MoonLight 对 CPU 有做归一化解决. CPU(MoonLight) = CPU(Instruments) / 外围数
二、MoonLight 本身的性能耗费
测试 case:
Step1: 关上 App,关上 MoonLight 的检测,测试性能 data1。
Step2: 关上 App, 不关上 MoonLight 的检测,测试性能 data2。性能耗费 = data1 – data2
- iOS
App Memory 耗费 = 7.38-7.34 = 0.04Mb;App CPU 耗费 =(2.1%-0.1%)/(6 核)= 0.33%;GPU = 0%,并且整个性能测试阶段,数据稳定稳固,不会呈现 MoonLight 的开启造成性能有不稳固变动。
测试设施:iPhone XS iOS 14.2 六核
- macOS
App Memory 耗费 = 14.42-14.36 = 0.06Mb;App CPU 耗费 =(0.08%-0.0%)/(4 核)= 0.02%;GPU = 0%,并且整个性能测试阶段,数据稳定稳固,不会呈现 MoonLight 的开启造成性能有不稳固变动。
测试设施:Macbook Pro 2017 13.3 Intel i5 , System: BigSur 11.0.1
————————————————————————————
写在最初
MoonLight 是咱们从日常的开发中诞生的开源工具,咱们心愿它能帮忙开发团队更疾速更准确的定位性能问题,进而推动性能优化和晋升;帮忙测试团队更快更准的获取性能数据,晋升测试效率。欢送大家应用。
MoonLight 开源地址:https://github.com/AgoraIO-Community/MoonLight
扫码退出交换群,与开源我的项目作者交换工具应用与开发的日常