android获取某应用的帧数据:
说明:
(打开手机 开发者选项-GPU显示配置文件(显示于 adb shell dumpsys gfxinfo)勾上,只有4.1以上支持)
在android4.1中,谷歌提供了一个工具来,叫做“ GPU呈现模式分析(Profile GPU rendering)”,
在开启这个功能后,系统就会记录保留每个界面最后128帧图像绘制的相关时间信息
开始操作:
命令行 adb shell dumpsys gfxinfo com.taobao.mobile.dipei
结果中 Profile data in ms
分析下面数据
Draw:表示在Java中创建显示列表部分中,OnDraw()方法占用的时间。
Process:表示渲染引擎执行显示列表所花的时间,view越多,时间就越长
Execute:表示把一帧数据发送到屏幕上排版显示实际花费的时间。
其实是实际显示帧数据的后台缓存区与前台缓冲区交换后并将前台缓冲区的内容显示到屏幕上的时间。所以这个时间,一般都很短。
PS:View类包含Surface(变量名mSurface),每个Surface通常对应两个buffer,一个front buffer, 一个back buffer。
(4.1之后是3个,一个前,两个后)其中,back buffer就是canvas绘图时对应的bitmap (研究Android_view_Surface.cpp::lockCanvas)。
因此,绘画总是在back buffer上,需要更新时,则将back buffer和front buffer互换。
Draw + Process + Execute = 完整显示一帧 ,
这个时间要小于16ms才能保存每秒60帧。
将数据复制到excel中(win记得逐列复制,mac下就直接复制过去吧),然后将数据生成“堆积柱形图”;