究其根源,所有反应在设备上的性能问题,基本围绕的就是三个点,流畅度问题,卡顿问题,以及内存问题,在简单点就是GPU,CPU以及内存问题,这几个问题属于关注的重心,也是各种问题最后回归的最终问题,所以接下来会根据这三个问题去展开介绍并且使用工具表现形式去解释,以及通过了解移动设备的底层机制来快速定位,快速了解瓶颈,话不多说,开始。
1、先介绍官方解释,官方难懂或者不容易理解会进行解读;
2、测试过程中要被关注的场景;
3、延伸达到什么样的程度算不错的程度;
定义流畅度,这里在 Perfdog 以及 Google 官网上的文档解释已经相对明确不少,但是还是会有点,难以理解,我们来看下关于 Perfdog 上面针对于其中定义流畅度其中的要点内容。
以下截图摘自 Perfdog 官方文档的中图
从图中可以看出每个 VSync 之间都会有蓝色绿色的方块分辨代表每一帧中是谁,并且做了些什么样的事情,蓝色 B 为CPU,绿色 B 为GPU,黄块 A 代表绘制屏幕后面就这么称呼了。
他们的执行顺序代表的是在黄块 A 这个时间区间中,蓝 B 先处理,后面绿 B 再处理,这样,一帧的画面就显示在了屏幕中,这部分内容就是有关于渲染流程相关的内容了,暂不解释,后续讲到底层调度时会详细去讲,这部分也涉及到内存相关的内容,在这里只要先知道的是"CPU 先处理,GPU 后处理"即可。
而像上面的图中可以看到,他们在执行每一帧的画面时,有的蓝块 B 大,有的绿块 B 大会导致绘制的队列中超出当前帧的时间区间现象,这样的话就会出现所谓超时绘制,因为下一帧的黄块绘制时间被压缩了,这样绘制出来的画面是不稳定的,也就是出现了所谓的画面不流畅。
那就是在黄块 A 固定给的时间区间中让蓝块 B,绿块 B 正常把活儿干完,并且不会超支时间,并且能维持一个较长时间比较稳定的状态也就不会出现所谓的不流畅现象了。
目前 Perfdog 的 FPS 与 Jank 评估流畅度已相对成熟,就可以拿现成的轮子去执行:
(摘自 Perfdog 的官方计算方式)
Google Jank 计算思路:考虑视觉惯性,以硬件 vsync 时间间隔,连续 1 次 vsync 没有新画面刷新,则认为是一次卡顿,也就是说下一次 vsync 时间点没有新画面刷新,则认为是一次 Jank。
计算依据:电影帧耗时——是按照 24 的帧率去计算
PerfDog Jank 计算方法:
同时满足两条件,则认为是一次卡顿 Jank.
①Display FrameTime>前三帧平均耗时 2 倍。
②Display FrameTime>两帧电影帧耗时 (1000ms/24*2≈83.33ms)。
同时满足两条件,则认为是一次严重卡顿 BigJank.
①Display FrameTime >前三帧平均耗时 2 倍。
②Display FrameTime >三帧电影帧耗时 (1000ms/24*3=125ms)。
特别解释:Jank 是记录一次卡顿的发生,如果采集过程中多次发生放在中低端机上就越容易出现帧率持续走低的情况,因为高端机的我 CPU 处理起来相对优越,中低端的 CPU 一旦处理过程中发生阻塞,就会容易出现帧率持续走低的情况,可以特别记录一下。
1、性能数据是否达标
2、版本优化前后优化成果对比
3、竞品分析
是否达标问题
达标是在公司有现成的客户端性能标准的情况下,比如:TX 的 TDR3 客户端性能标准中会指出平均的 FPS 达到多少标准算合格,详细的可以去查看 TX 每年发送的白皮书中提到内容,属于公司指定的一套标准,测试过程中如果发现 FPS 以及 Jank 不达标,就说明产品就公司而言是不合格,需要去优化。
版本优化前后对比
在当前版本中执行过一次性能测试后,记录一次性能数据,经过一版的优化后,执行相同的测试场景再次观察性能指标,进行前后对比,来评估优化后的效果。
竞品分析
老生常谈的一个点,所做的产品大多都是有相同竞品,在持有相同硬件条件的情况下,同步去记录性能数据,做产品的横向对比,来查看产品与竞品上横向的差距,来决定是否继续接着优化。
以上就是目前使用该指标要重点关注的场景,也是平时用到最多场景。对于客户端性能来说。
就目前而言,如果我们本身属于非执行者,也就是性能数据不是测的,也应该能通过给到的性能数据评估出,整体的性能是否做到了优化,通过看性能数据指标而非看图也能脑子里想出大概曲线,那相对来说你就达到了一个比较好成长以及熟练度。
综上所述,目前评估流畅度:
理解
黄块 A 的时间区间是硬件设备【也就是手机】比如现在的高刷屏,90hz 你去推算一下一帧的时间是多少,给你的这个时间就是黄块 A,你在硬件给你的这段时间里,项目每帧处理的数据要恰好让设备的蓝块 B,绿块 B 处理完,这样就能产生一个较为顺畅的画面,且机身也不会因此发热严重。超时的话,你应该也理解会带来什么样的影响。
延伸
FPS 与 Jank 一起去看去记录去评估流畅度;
该指标数据是作为迭代数据去对比,评估优化程度;
该指标是横向作为产品质量之一的一个指标;