开源 | MoonLight —— iOS/Mac 轻量化的性能测试组件

作者:声网Agora 刘君杰

什么是 MoonLight?

MoonLight 是 iOS/Mac 上的轻量化的性能测试组件,它可以单独集成在任何 App 中实现自动化性能数据的采集,你可以非常轻松的获取到 App CPU、System CPU、App Memory、System GPU 以及 GPU Info 的数据。MoonLight 由声网Agora 开发,并已开源至 Github。

开源地址:https://github.com/AgoraIO-Community/MoonLight

MoonLight 的愿景

MoonLight,它的中文意思名为月光。月光弥漫在地球之上是宁静且自然的,月光会给予地球上的人们以指引。而月光的寓意恰好和我们开发性能测试组件的出发点相契合。

我们希望 iOS/Mac 的性能测试也能像月光一样,轻松且自然。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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容