微信号:gh_1cb598337696

介绍:Qtest,是360公司唯一的服务端测试团队.我们的理念是做一个会编程的测试工程师,做一个不断思考,全力保证产品质量的测试工程师.

Android性能专项FPS测试实践(二)

2016-09-18 13:26 刘俊
接上篇


测试指标&范围

搞清楚一些基础概念后,我们需要确定接下来测试需要获取的数据,本次测试除了常规的数据以外,业务
方也通过程序埋点输出了一些关注的指标信息,概况起来包括但不限于以下几点:
组件初始化时间(业务方埋点)
APP启动时间(冷启动、热启动)
CPU占用(活动、静默状态)
PSS内存占用(活动、静默状态)//不能root手机,所以没有取USS
电池温度变化(活动、静默状态)
FPS
硬件渲染掉帧数
单帧渲染平均时间
单帧检测处理时间(业务方埋点)
OS版本: 4.4、5.0、5.1、4.2、4.3、6.0、4.0
品牌覆盖: 华为、小米、Nexus、VIVO、奇酷、酷派、三星、锤子
分辨率覆盖: 1920X1080、2560X1440、1280X720、854X480
业务场景: 针对业务特点进行设置的测试场景,在此不表。


采样策略

在调研了网上各种方案后,个人觉得 @sandman 的方案是最符合我的预期,因此直接拿来使用。方案如
下:
1. 通过命令: dumpsys SurfaceFlinger | grep "|....|" 获取当前置顶窗口名称
2. 历史记录127行数据,按60帧算可记录2.12S数据,从而不用频繁获取。(最终考虑设定1.6S间隔刷
新数据。)
3. 定期清零重新记录,避免如何分清哪些数据是上次的。命令: dumpsys SurfaceFlinger --
latency-clear
4. 有刷新则计算帧率,无刷新则不输出数据,有时候取到的fps为1,就是这个原因
5. 每次采样数据大于等于1帧则计算FPS,丢帧率,最大帧间隔

6. 针对业务需求,增加了单帧平均渲染时间的统计



具体实现

网上的实现方式大多数都是取自于这里:
https://github.com/ChromiumWebApps/chromium/blob/master/build/android/pylib/perf/surface_stats_collector.py
掌握python开发的同学可以阅读和学习一下作者的采集思路。针对源代码,有篇博客做了详细的解读,感
兴趣的同学可以看这里:
http://blog.csdn.net/itfootball/article/details/43084527
我采取的实现方式是@sandman的办法,利用shell文件在手机内部获取数据后生成csv文件,再通过adb命
令pull到本地进行统计,针对我自己的需求,对shell代码略微做了调整,增加了单帧平均渲染时间的统
计,运行效果像这样:
这种采样的方式最大的好处就是不用root手机,针对shell代码的解释,由于篇幅太长我就不在这里贴了,
大家可以移步这里去看详细的解释:
https://testerhome.com/topics/4775
各位可以在这里下载完整版工具,工具包中包含了利用python生成HTML报表的代码:
https://yunpan.cn/ckcypyNLDAet2 (提取码:005f)
那么测试出来的报告大概可以是这样的:


 
360Qtest 更多文章 Android性能专项FPS测试实践(一) 还在用grep --color?教你如何快速高亮关键词 QTest团建的那些事儿 面试?!如何让你的简历杀出重围——一位资深互联网面试官透露的不为人知的行业面试内幕 Android之安全性测试
猜您喜欢 如何有效地报告 Bug JAVA就业前景分析 拥抱 Android Studio 一从 ADT 到 Android Studio 一种跨平台的App开发解决方案 我们需要更好的 NGINX 统计和监控