帧率概念
影响点:画面流畅度。
测试角度:是否存在卡顿现象。
标准数据
60fps作为衡量标准,即要求每一帧刷新的时间小于16ms,这样才能保证滑动中平滑的流畅度。
FPS:每秒显示的帧数,每一帧都是静止的画面。
数据采集
设置-开发者选项-GPU呈现模式分析
命令:
adb shell dumpsys gfxinfo <包名> > fps.txt
路径:C:\Users\Administrator\fps.txt
将数据拷贝到Excel,并绘制成折线图观察,是否有超出16ms(或其他标准fps)。
数据概念:
Draw: 表示在Java中创建显示列表部分中,OnDraw()方法占用的时间。
Process:表示渲染引擎执行显示列表所花的时间,view越多,时间就越长
Execute:表示把一帧数据发送到屏幕上排版显示实际花费的时间。
Draw + Process + Execute = 完整显示一帧 ,这个时间要小于16ms才能保存每秒60帧。
测试策略与测试场景
测试方向
- 界面过度绘制
- 屏幕滑动帧速率
- 屏幕滑动平滑度
帧率优化方向
手机的CPU处理速率、屏幕尺寸、内存及显存的大小都影响着APP帧率的大小,这些因素在一定程度上约束着准备数据和数据传到屏幕的时间。
GUI软件架构在一定程度上也影响着应用帧率的大小。在同等机器环境下,除去CPU、屏幕尺寸及系统GUI等固有数据传输耗时,要提升应用FPS就要减少视图渲染的时间。
通过以下几种方式可以有效提升应用FPS:
1、尽量不要在刷新时做耗时操作,例如准备数据,创建图片,图片变换等,数据和图片都应该在之前就加载到内存中,图片变换用canvas的变换来实现。
2、同一个界面中多个动画重叠出现时,尽量将动画的刷新过程统一刷新,避免频繁的invalidate,尤其是多个动画有时序上的关系时更应该统一。
3、尽量使用带有参数的invalidate来刷新,这样可以减少很多运算量。