PerfDog性能测试说明

2,018 阅读5分钟
参考链接:https://bbs.perfdog.qq.com/article-detail.html?id=6

原文讲解更细致,需要了解原理建议去看原文

FrameTime

FrameTime的定义:两帧画面间隔耗时(也可简单认为单帧渲染耗时)。

用户真正看到的是屏幕新画面刷新间隔时间,这里提到的Frametime统统指的是屏幕Display-Frametime。

PerfDog工具优点:PerfDog统计的PFS和Frametime都是用户看到的屏幕Display新画面真实刷新PFS和帧耗时。所以可以直接通过Frametime来判断测试过程中是否出现卡顿。

FPS是什么?

FPS即Frames Per Second(每秒显示的帧数),用于测量显示帧数的度量。帧数为0说明页面处于静止,只要页面动起来,这个帧就会有变化,然后再趋于静止,页面滚动起来帧数整体呈现“非对称”抛物线走势。

平均帧率:传统常说的FPS,1秒内平均画面刷新次数
瞬时帧率:单帧耗时FrameTime算出来实时FPS,每一帧画面刷新耗时换算出的实时帧率

注:帧率高未必流畅,需要多维度衡

FPS值的大小对画面流畅度的影响,每一帧都是静止的图像,快速连续地显示帧便形成了运动的假象,因此高帧率可以得到更流畅、更逼真的动画。

何为帧延迟?卡顿如何造成的?

帧延迟的高低可以通过帧时间(Frame Time)来判定。我们参考显示器的60Hz刷新率进行计算,它意味着每秒刷新60帧,每帧大约用时16.7毫秒。画面中每帧生成时间如果与16.7毫秒很接近,那么全程画面的帧数就很稳定,更接近理想的60帧每秒。

如果每帧生成时间高于16.7毫秒,也就意味着渲染这一场景所花费的时间比其他帧更多,造成画面跟不上,进而带来显示卡顿。

流畅度

流畅度与卡顿的关联可以用以下的流程图来大致展示:

流畅度.jpeg

流畅度影响卡顿。这个可以简单的理解为视觉惯性和电影帧这两个方面:

1、视觉惯性

视觉预期帧率,用户潜意识里认为下帧也应该是当前帧率刷新。比如一直60帧,用户潜意识里认为下帧也应该识60帧率。刷新一直25帧,用户潜意识里认为下帧也应该是25帧率。但是刷新如果是60帧一下跳变为25帧,扰乱用户视觉惯性。这个时候就会出现用户体验的卡顿感。

1、电影帧

电影帧率(18-24),一般是24帧。电影帧单帧耗时:1000ms/24≈41.67ms。电影帧率是一个临界点。低于这个帧率,人眼基本能感觉到画面不连续性,也就是感觉到了卡顿。

PerfDog-Jank

PerfDog Jank计算思路:考虑视觉惯性,假设以前三帧的平均帧耗时为参考,作为vsync时间间隔,连续两次vsync没有新渲染画面刷新,则认为是一个潜在卡顿,也就是说下一帧耗时大于前三帧平均帧耗时2倍,则认为一次潜在卡顿。同时单帧耗时满足大于两倍电影帧耗时1000ms/24*2(由于人眼低于24帧才能辨别画面不连续性),则认为是一次真正卡顿。同时若单帧耗时大于3倍电影帧耗时,则认为是一次严重卡顿。

注解:为什么是两次vsync?GPU一般是3重缓冲buffer,当前帧已占用一个buffer,即剩余2缓冲buffer,人眼一般可容忍2帧延迟。

为什么是两帧电影帧耗时?低于24帧画面,人眼就能感知到画面不连续性,电影一般都是24帧。即电影帧耗时1000ms/24≈41.67ms,两帧电影帧耗时也就是41.67ms*2,三帧电影帧耗时是41.67ms*3。

PerfDog-Jank计算方法:

同时满足两条件,则认为是一次卡顿Jank。 1、Display FrameTime > 前三帧平均耗时2倍。
2、Display FrameTime > 两帧电影帧耗时(1000ms/24*2≈83.33ms)。

同时满足两条件,则认为是一次严重卡顿BigJank。 1、Display FrameTime > 前三帧平均耗时2倍。
2、Display FrameTime > 三帧电影帧耗时(1000ms/24*3≈125ms)。

PerfDog-Stutter(卡顿率)

PerfDog Stutter定义:测试过程中,卡顿时长的占比。即Stutter(卡顿率)= 卡顿时长/总时长。
PerfDog Stutter计算思路:基于PerfDog Jank的基础上,一次Jank卡顿,会有一次卡顿时间Jank time。测试过程中可能有多次Jank卡顿,即有多次卡顿时间Jank time。测试总时长为Time。

Stutter(卡顿率) = ∑Jank time / Time

说明:Jank为卡顿次数,Stutter为卡顿率,Jank和Stutter趋势有一致性,但并非完全线性,因为每次Jank卡顿严重性是不一样的。同时也说明了,没有Jank卡顿出现,自然也就卡顿率是0了

影响

游戏方面

游戏流畅度是最影响用户体验的,所以需要重点关注FPS、Jank及卡顿率。
备注:比如游戏中已预知的卡顿,如新UI弹出等造成卡顿,可认为是干扰,需要剔除,不应算在Jank,可通过web云上,框选右键删除干扰数据。

APP方面

APP也需要关注FPS、Jank及卡顿率。只是需要区分使用场景,如:

  1. 静态页面窗口
    只需关注FPS,理论PFS应该为0,否则,说明有冗余刷新,容易引起收集发热及耗电。

  2. 有滚动动画页面窗口 只需关注FPS,FPS处于合适值即可,无需高频刷新。

  3. 快速滑动页面窗口 需要关注FPS、Jank及卡顿率。手机交互灵敏度就是来源于此,Android系统才出黄油计划Jank。一般滑动状态下,帧率越高越好,Jank越小越好。

  4. 播放视频页面窗口 需要关注FPS、Jank及卡顿率,视频卡顿直接影响用户。视频一般帧率18-24帧,Jank=0.比如微信播放视频、视频播放器等。