FPS和丢帧率可以一定程度上作为APP流畅度的一项衡量标准,利用
adb shell dumpsys gfxinfo
命令可以获取软件渲染加载过程的数据,进行计算从而获取结果
-
前置业务知识:
在此之前,需要先了解屏幕展示绘制过程及Android的VSync机制,可参考另一篇博客:
专项测试-流畅度测试之前的知识储备-Andorid中VSync机制的介绍
-
获取数据
-
运行命令
"adb -s " + deviceName + " shell dumpsys gfxinfo " + packageName
获取基础数据,我们会获得很多数据,这里截取需要进行分析的部分:
注:如果运行完命令发现无上图中的4个参数,则很可能是手机的“GPU呈现模式分析”未打开;
在手机的开发者选项中,找到“GPU呈现模式分析”,选择
“在adb shell dumpsys gfxinfo中”
,如果是华为或荣耀的手机,则选择“
在屏幕上显示为线型图
”:
- 如上图信息表示了每一帧在安卓系统中的四个阶段:
Draw
: 表示在Java中创建显示列表部分中,OnDraw()方法占用的时间
Prepare
: 准备时间
Process
: 表示渲染引擎执行显示列表所花的时间,view越多,时间就越长
Execute
: 表示把一帧数据发送到屏幕上排版显示实际花费的时间,其实是实际显示帧数据的后台缓存区与前台缓冲区交换后并将前台缓冲区的内容显示到屏幕上的时间- 将上面的四个时间加起来就是绘制一帧所需要的时间,如果超过了16.67就表示掉帧了
说明
通过以上数据,就可以获取到每一帧的时间、总帧数;从而就可以计算出jank数、vsync数,进而就可以得到最终的FPS和丢帧率数据;
手工计算无疑效率低,出错率大,所以这里的计算过程最好还是以脚本形式,让代码帮我们去计算,具体代码计算原理与过程可参考博客:
版权声明:本文为weixin_43291944原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。