background image
Android 性能测试之流畅度测试
流畅度测试简单的来说就是 Android 页面绘制。Android 系统每秒 60hz,也就是大
约每 16ms 刷新一次界面。但是在我们使用 APP 过程中,经常会看到页面有卡顿,
或者说丢帧的现象。也就是说可能此刻两个页面绘制的时间差超过 0.1S(人眼视
觉残留 0.1S)。总的来说,就是页面
原理分析
在确定衡量指标之前,先来说 Android 的 UI 更新机制。
在 Android 版本更新过程中,发现在 Jelly Bean 中 Google 加入了一个 Project
Butter,用来解决严重影响 Android 口碑的问题之一“UI 流畅性差”的问题。而
Project Butter 中主要引入了三个核心元素:VSYNC(垂直同步)、Triple Buffer 和
Choreographer。
VSync 是 Vertical Synchronization(垂直同步)的缩写,是一种在 PC 上很早就广泛使
用的技术,可以简单的把它认为是一种定时中断。而在 Android 4.1(JB)中已经开
始引入 VSync 机制。CPU 和 GPU 的处理时间都少于一个 VSync 的间隔,即 16.6ms。
如果每个间隔都有绘制的情况下,当前的 FPS 即为 60 帧。
VSync 机制就像是播放动画片(60 帧/s)。每次都会播放画面,有的时候有人偷懒
了,机器坏了,就会出现播放速度降低的状况。我们把这个播放速度叫做流畅度。
从 FPS&丢帧到流畅度
实际上在很多 Android 的 App 中,很少有需要不断地去绘制的场景,很多时候页
面都是静态的。也就是会出现这样的状况,虽然 1s 中 VSync 的 60 个 Loop 不是
每个都在做绘制的工作,FPS 会比较低,但并不代表这个时候程序不流畅(如我将
App 放着不动,实测 FPS 为 1)。所以 FPS 较低并不能代表当前 App 在 UI 上界面
不流畅,
而 1s 内 VSync 这个 Loop 运行了多少次更加能说明当前 App 的流畅程度。
所以,下面这 2 个指标比 FPS 更能代表当前的 App 是否处于流畅的状态。同样这
2 个指标更加能够量化 App 卡顿的程度:
1)丢帧(SF: Skipped Frame):如上图 2 所示情况应该在 16.6ms 完成工作却因各种
原因没做完,占了后 n 个 16.6ms 的时间,相当于丢了 n 帧。
2)流畅度(SM: SMoothness):和丢帧相对,在 VSync 机制中 1s 内 Loop 运行的次
数。
和丢帧相对 1s 内有 60 个 Loop 因为某几次工作时间超过了 16.6ms(丢帧),这
样 Loop 就无法运行 60 次(理论最大值)。