在android4.1中,谷歌提供了一个工具来,叫做“ GPU呈现模式分析(Profile GPU rendering)”。在开启这个功能后,系统就会记录保留每个界面最后128帧图像绘制的相关时间信息。位置:
开发者选择 / GPU呈现模式分析(Profile GPU rendering)
注意:
如果是在开启应用后才开启此功能,记得先把应用结束后重新启动
开启后操作你需要分析的部分(比如滑动列表之类的),然后快速执行adb命令(时间过长存在数据被覆盖的可能性)。
adb shell dumpsys gfxinfo com.xxxx.xxx (显示到终端屏幕) 或 adb shell dumpsys gfxinfo com.android.gallery3d > d:\apks\logs\gfx0625 (保存到文件)
在执行的结果中,有一块叫做“Profile data in ms”底下有一堆数据。
... Profile data in ms: com.android.gallery3d/com.android.gallery3d.app.Gallery/android.view.ViewRootImpl@41fd8070 Draw Process Execute 6.32 216.47 20.54 3.10 4.42 32.58 0.96 8.15 27.95 6.36 9.51 1.48
View hierarchy: com.android.gallery3d/com.android.gallery3d.app.Gallery/android.view.ViewRootImpl@41fd8070 44 views, 1.41 kB of display lists, 4 frames rendered Total ViewRootImpl: 1 Total Views: 44 Total DisplayList: 1.41 kB ...
Draw:表示在Java中创建显示列表部分中,OnDraw()方法占用的时间。
Process:表示渲染引擎执行显示列表所花的时间,view越多,时间就越长
Execute:表示把一帧数据发送到屏幕上排版显示实际花费的时间。其实是实际显示帧数据的后台缓存区与前台缓冲区交换后并将前台缓冲区的内容显示到屏幕上的时间。所以这个时间,一般都很短。
Draw + Process + Execute = 完整显示一帧 ,这个时间要小于16ms才能保存每秒60帧(即1000秒/60帧)。
将数据复制到 excel中,然后将数据生成“柱形图”来观察结果。