作者: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保持一致的。具体的优劣比照如下:

  1. Instruments无奈实现性能自动化,无奈将获取到的性能数据提取进去进行剖析,最初提供进来的性能数据准确度不够,存在人为误差。MoonLight能够解决这个问题。
  2. Instruments无奈实现近程性能测试,天然也无奈实现高并发的性能测试,通常来说须要一台设施连贯USB线后测试,而后一台测试完再测试下一台。MoonLight能够一次性测试十分多台,也没有必须连贯数据线的要求。
  3. 高版本的Instruments无奈测试一些低端零碎机器的性能,MoonLight能够完满反对。
  4. 对于macOS上的App, Instruments是不反对GPU的输入,MoonLight反对。进过测试,GPU的输入和macOS自带的流动管理器GPU输入保持一致。
  5. Instruments长处是数据可视化,并且能够提供内存透露测试。MoonLight临时不提供数据可视化,然而因为MoonLight是可编程的,当开发者拿到相干的性能数据后, 能够自行实现数据上报或者可视化的解决。

GT

  1. GT不反对macOS,MoonLight反对。
  2. GT采集到的App Memory数据和Instruments是不统一的。GT 无奈输入 GPU、System CPU, 然而MoonLight能够。
  3. GT集成到App中,须要增加十分多的依赖库,勾销掉Bitcode反对,本身也比拟宏大,并且会减少App的包大小。MoonLight更轻量化,对于iOS仅仅只须要减少一个零碎库,对于Mac不须要减少任何的零碎库。

Perfdog

  1. Perfdog无奈反对macOS上的App的性能测试。
  2. Perfdog并非是一个自动化的性能测试工具,长处是数据可视化。
  3. 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

扫码退出交换群,与开源我的项目作者交换工具应用与开发的日常