一、度量指标基本概念
1.1 基本概念
著名的"16ms"原则:
我们通常会提到60fps(Frame Per Second) 与 16ms
60fps:人眼与大脑之间的写作无法感知超过60fps的画面更新
16ms:因为Android设定的刷新频率是60fps,也就是60帧每秒,即16ms =1000/60Hz
Android 系统每隔16ms会发出VSYN信号,重绘展示给用户的界面
FPS
FPS是图像领域的定义,是指画面每秒传输的帧数,通俗来讲就是动画或者视频的画面数。FPS是测量用于保存、动态视频的信息数量。
测量方法:测量应用的帧率FPS:adb shell dumpsys gfxinfo
丢帧SF:跳过的帧数。如下图所示
FPS的缺陷:如果页面本身没有刷新展示的需求,FPS就会很小,比如一个静态页面,FPS可能是0,这是正常现象,并不代表当前页面卡顿。但从FPS的指标来说,会误认为该页卡顿。
流畅度SM(SMoothness)
在VSync机制中,1s内Loop运行的次数,更加能说明当前APP的流畅度。如果没有绘制事件,也会运行一个这样的Loop;
SM=帧率(60)*(单位时长的总帧数-单位时长丢帧数)/单位时长总帧数
代码层面:Choreographer中doFrame()执行的次
SM值与主观卡顿情况对照表
SM值 | 卡顿感受 |
---|---|
<=20 | 卡死 |
20<SM<=40 | 很卡 |
40<SM<=50 | 较卡 |
50<SM<=60 | 不卡,流程 |
测量方式:GT,在插件中选择GT流畅度测试