作者: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
扫码退出交换群,与开源我的项目作者交换工具应用与开发的日常