gfxinfo 测试UI性能
参考:https://developer.android.com/training/testing/performance
gfxinfo
整个进程生命周期中收集的帧数据的聚合分析输出到 logcat
1 | adb shell dumpsys gfxinfo <PackageName> |
测试用例输出的信息如下(不同系统版本和不同品牌输出的信息会有出入):
1 | whyred:/ $ dumpsys gfxinfo com.benben.viewpractice |
开始一栏是统计所有帧的聚合数据,主要作用是查看渲染性能以及帧的稳定性
Graphics info for pid 7200 [com.benben.viewpractice]
:包名和pid
Total frames rendered: 55
:共收集了55帧Janky frames: 9 (16.36%)
:55帧中有9帧发生了 Janky,即单帧耗时超过了 16ms,卡顿考为 16.36%50th percentile: 6ms
:所有帧耗时排序后,其中前50%最大的耗时帧的耗时为6ms90th percentile: 34ms
:同上,依次类推95th percentile: 117ms
:同上,依次类推99th percentile: 150ms
:同上,依次类推Number Missed Vsync: 2
:垂直同步失败的帧数为2Number High input latency: 10
:处理input耗时的帧数为10Number Slow UI thread: 5
:因UI线程的工作而导致耗时的帧数为5Number Slow bitmap uploads: 1
: 因bitmap加载导致耗时的帧数为1Number Slow issue draw commands: 0
:因绘制问题导致耗时的帧数为0HISTOGRAM: 5ms=1 6ms=31 7ms=6 8ms=5 9ms=1 10ms=1 ...
:直方图列表,说明耗时 5ms 帧数为 1,6ms 帧数为 31
剩余的是一写内存信息和视图信息
Framestats
数据
该命令会从应用生成的最近 120 个帧中输出带有纳秒时间戳的帧时间信息。【有的系统无效,有的只会输出10帧等等】
1 | adb shell dumpsys gfxinfo <PACKAGE_NAME> framestats |
测试用例输出的信息如下,重点关注PROFILEDATA信息,数据块是 CVS 格式输出,具体含义参考:https://developer.android.com/training/testing/performance#aggregate
1 | ... |
运行 gfxinfo
、复制输出、将其粘贴到电子表格应用并将数据绘制成堆积条形图的结果
控制统计信息收集的时段
Framestats
和简单的帧时间均可在极短的时间内(相当于约 2 秒渲染)收集数据。要精确控制此时间范围(例如,将数据限制于特定动画),您可以重置所有计数器并汇总收集的统计信息
1 | adb shell dumpsys gfxinfo <PACKAGE_NAME> reset |
这也可以与转储命令结合使用来定期进行收集和重置,从而持续捕获时间范围不到 2 秒的帧