背景交代
最近有一款游戏要上线,性能检测虽然在安卓上已经检测通过,但 ios 上还是第一次检测,尤其是近年来移动端用户越来越重视手机的续航能力,所以我们对游戏的电量消耗等指标的关注程度也越来越重视;
然而 ios 性能检测的相关文档相对安卓来说还是少很多,以前我们常用的就是 Instruments,最近 perfdog 也出了 iOS 电量测试功能,特来对比一下。
这里首先给出 ios 手机 wifi 连接 Imac 的方法
1.打开 Xcode,选择菜单栏中 Window ——>Devices and Simulators 弹出相应的对话框
2.将 Connect via network 复选框选中
3.将数据线从苹果电脑上拔掉,此时真机回显示为 DisConnected,点击手机 弹出一个快捷菜单
4.选中其中的 Connect Via IP Address 命令,弹出对话框,输入手机的 IP 地址然后单击 Connect 按钮 此时真机就通过无线就连接到苹果电脑了,
首先我们要打开 ios 的开发者选项,简单来说你需要登录 Xcode,把 IOS 手机连接电脑,这样就可以打开开发者,接下来:
1.iOS 设置选项 ->开发者选项->logging ->start recording
2.打开需要测试电量的游戏场景操作后开始跑游戏
3.进入开发者选项点击 stop recording
4.将 iOS 设备和 Mac 连接
5.打开 Instrument,选择 Energy Diagnostics
6.选择 File > Import Logged Data from Device
此时可能会有一些卡顿,稍等后会出现结果
要注意的是:
测试过程中要断开 iOS 设备和电脑、电源的连接
电量使用 level 为 0-20,1/20:表示运行该 app,电池生命会有 20 个小时;20/20:表示运行该 app,电池电量仅有 1 小时的生命,这里表示电量消耗有点大啊,我测试的时候手机有 75% 的电量,玩游戏也就是说大概 20/17=1.17 小时就会没电了;
下面还有屏幕亮度,CPU,网络使用,GPS,蓝牙等等电量消耗
不过此处的数据无法保存,而且由于无法标注场景,所以在测试时要尽量保证场景单一;
为了分析详细数据,找到问题,笔者开始采用其他常见方法测试游戏电量;
1.打开 perfdog,选择要连接的 IOS 手机,注意选择 wifi 模式。
2.选择要捕获的数据,wifi 模式不能截图比较可惜
3.选择要测试的应用就可以了;
这里介绍一些常用的技巧,由于不能截图,我们最好对场景做一些批注,
1)批注及标定 (鼠标左键双击,则批注。左键双击已生成的批注,则取消。鼠标左键单击,则标定)
2)可以通过鼠标框选/拖动查询时间周期内,统计数据等。同时可对框选数据进行保存。右边可以设定对应的性能参数统计分析阈值等。
3)通过标签按钮给性能数据打标签,鼠标左键双击颜色区域可修改对应区域标签名
具体技巧可以参考:Perfdog 使用说明
当我们测试完毕上传后台的时候记得勾选 Save 就可以在本地保存所捕获的所有数据,点击文件夹既就可以看到,数据就保存在包名所命名的文件夹里.
这是平台的电量数据信息,
整机实时 Current 电流:单位毫安 (mA)、Voltage 电压:单位毫瓦 (mW)、Power 功耗:单位毫伏 (mV)
这里可以多场景组合分析,可以看到在资源下载的时候功耗明显上升,在资源结束的时候仍在上升,这里怀疑在解压资源,通过 cpu 也可以完全证实这一点;而在游戏开始,副本战斗的时候功耗开始下降。如果想要优化,可以从资源处理的方面入手。
1.官网下载证书 Profiles and Logs。(需要开发者证书)
2.下载完成后通过 AirDrop 发到测试手机上安装。
3.在不重启手机的情况下,等待 10 到 30 分钟。
4.手机连上电脑,通过 iTunes 同步到电脑上。
5.去 ~/Library/Logs/CrashReporter/MobileDevice 目录下,打开 powerlog_xxxx.PLSQL 文件。
简单介绍下表名的意思
PLBatteryAgent_EventBackward_Battery: 整台机器的电量数据,包含电流、电压、温度等,每 20 秒 左右一条数据
PLBatteryAgent_EventBackward_BatteryUI: 电量百分比数据,每 20 秒一条数据
PLIOReportAgent_EventBackward_EneryModel: 整机的详细电量数据。包含 CPUGPUDRAMISP 等关键信息。每半小时到一小时一条数据。
6.接来下需要 知道你要测试的 App 的 Bundle Identifier ,可以通过 pp 助手或者其他应用获取,有很多方法;
7.得到每个 App 的唯一标识后,我们就可以去 PLAccountingOperator_Aggregate_RootNodeEnergy biao 表里看电量消耗数据了,这里的单位在 iOS 9 是 mAh ,iOS 9 及以上应该是 1/1000 mAh,也就可以执行 SQL 语句计算出来,不过一番操作下来比较复杂,费时费力;
在开发过程中,运行调试模式就可以在 Xcode 里直接查看 Energy Impact。有 3 个区域,红色代表有严重问题。下面的柱状图会告诉你耗电的组成部分:CPU,Network,Location,GPU。其中 Overhead 表示不是由你的 App 引起的耗电。
如果有问题,可以进一步通过快捷入口打开 Time Profile,Network Profile,Location Profile 做进一步细致排查问题点。
这个没什么复杂的,自己研究下就可以。缺点只适合开发人员;而且对于耗电只能给出定性,没有定量的显示。
名字 | 上手难度 | 优点 | 可优化功能 | 推荐指数 |
---|---|---|---|---|
Perfdog | 简单 | 测试报告数据清晰,可以查看当时的 cpu 等其他维度数据,可添加批注,所以可以多个场景同时测试,数据可以保存到本地,电量指标较为详细 | wifi 连接无法截图比较可惜,人工添加批注有时容易不及时 | ✰✰✰✰✰ |
Instruments | 简单 | 数据清晰,操作简单,可以查看当时的 cpu 等其他维度数据 | 无测试报告,无法添加批注,为保证数据准确性尽量保证单一场景,详细数据无法保存 | ✰✰✰✰ |
sysdiagnose | 复杂 | 捕获的数据丰富 | 需要开发者证书,操作较为复杂,无测试趋势图,仅有数值 | ✰✰✰ |
Energy Impact | 简单 | 上手简单,开发时运行调试模式就可以 | 需要有项目源码权限,而且对于耗电只能给出定性,没有定量的显示 | ✰✰✰ |
综合以上数据来看,还是推荐使用 Perfdog 进行测试,无论是从用户的交互方式还是从数据指标的丰富程度,Perfdog 都达到了较高的水准,至于参考标准可以从精品产品获取数据作为对比参考;