在上篇博文性能优化之TraceView中介绍了提到了TraceView分析面板中只能追踪Java函数的CPU消耗情况,本文介绍另一性能查询工具Systrace。
一:Systrace 简介:
Systrace是Android4.1 新增的性能数据采集和分析工具,它可帮助开发者收集Android关键子系统(如surfaceflinger、WindowManagerService等Framework部分关键模块、服务)的运行信息,从而帮助开发者更直观的分析系统瓶颈,改进性能。Systrace比Traceview用途更广泛,它支持对CPU、Native进程甚至Kernel线程进行性能数据采样,可帮助开发者对整个系统的性能情况进行一个详尽的分析。
Android提供的Trace类来使用Systrace,Android 4.1为系统中的几个关键进程和模块都添加了Systrace功能。同时应用进程也可以自己添加trace来增加跟踪内容,由于篇幅关系,关于Trace使用更多的信息请读者阅读frameworks/native/include/utils/Trace.h或者android.os.Trace类。本文只关注系统自身添加的trace和用DDMS来采集数据的方法。Android官方对Systrace也有一些介绍,有兴趣的可点击打开链接查看。
二:使用方法:
1. 采集数据,通过DDMS启动数据采集,如下图:
图 1:Systrace 数据采集
Systrace 提供系统framework关键模块的数据采集,本人在动画平滑优化中主要关注的是UI刷新平滑度,显然图形窗口相关的项都要勾上,如图1所示。
2. 结果分析
在按图1配置好后点击OK,将在选定的目录下得到一个trace.html的文件,通过浏览器打开这个文件,结果如图2所示。
图2:trace.html 内容
trace的内容与TraceView的Timeline面板非常相似,根据时间轴描述了函数的调用,同时还显示了CPU的状态信息。比TraceView更强大的是Systrace还采集了surfaceflinger 等系统模块的信息,这是这些信息让我找到了动画卡顿的原因,继续上图两张,分别是前一博文中动画对比的两个平台的trace图。
图3,平台A trace 内容
图3 平台B的trace内容
图2和图3只显示了SurfaceFlinger的部分内容,从中可以看出平台B在执行图形composition的时候有时候消耗时间在20ms内,有时间达到38ms,在fps为50的情况下20ms内不能完成composition肯定会出现卡顿啊。呵呵,可以顺利将问题转平台的哥们了。