专项测试-如何测试APP流畅度,基于adb shell dumpsys gfxinfo命令来获取fps和丢帧率

FPS和丢帧率可以一定程度上作为APP流畅度的一项衡量标准,利用命令可以获取软件渲染加载过程的数据,进行计算从而获取结果
  • 前置业务知识:

    在此之前,需要先了解屏幕展示绘制过程及Android的VSync机制,可参考另一篇博客:
    专项测试-流畅度测试之前的知识储备-Andorid中VSync机制的介绍

  • 获取数据

  1. 运行命令 获取基础数据,我们会获得很多数据,这里截取需要进行分析的部分:
    专项测试-如何测试APP流畅度,基于adb shell dumpsys gfxinfo命令来获取fps和丢帧率
    专项测试-如何测试APP流畅度,基于adb shell dumpsys gfxinfo命令来获取fps和丢帧率
    1. 如上图信息表示了每一帧在安卓系统中的四个阶段:
    • Draw: 表示在Java中创建显示列表部分中,OnDraw()方法占用的时间
    • Prepare: 准备时间
    • Process: 表示渲染引擎执行显示列表所花的时间,view越多,时间就越长
    • Execute: 表示把一帧数据发送到屏幕上排版显示实际花费的时间,其实是实际显示帧数据的后台缓存区与前台缓冲区交换后并将前台缓冲区的内容显示到屏幕上的时间
    • 将上面的四个时间加起来就是绘制一帧所需要的时间,如果超过了16.67就表示掉帧了

    说明

    • Android定义了流畅度的数据标准,以60FPS为标准(FPS为每秒绘制的帧数),帧数过小就会出现卡顿感
    • 每一帧在安卓系统中分4个阶段,4个阶段的总和超过16.67(1秒60帧,算下来平均1帧的间隔就约是16.67ms)就认为丢帧
    • 这个定义在Android6.0以前是一定的,但是现在已经没有固定的标准了,因为目前安卓系统有3层缓存机制,加上硬件上的进步,即使超过16.67,也不一定会出现卡顿感。所以这个数据在测试时作为一种对比和相对衡量标准,也可根据需求自定义标准。
    • 计算结果

    通过以上数据,就可以获取到每一帧的时间、总帧数;从而就可以计算出jank数、vsync数,进而就可以得到最终的FPS和丢帧率数据;
    手工计算无疑效率低,出错率大,所以这里的计算过程最好还是以脚本形式,让代码帮我们去计算,具体代码计算原理与过程可参考博客:

    专项测试自动化-如何自动化获取APP的FPS、丢帧率等信息来测试流畅度(基于Android,Java)

    来源:TesterAllen

    声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年7月3日
下一篇 2019年7月3日

相关推荐