关于ios:开源-MoonLight-助你实现更好的-iOSMac-自动化性能测试

37次阅读

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

  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

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

正文完
 0