APP页面丢帧原因及性能测试FPS
在了解堵塞的原因之前,先了解如下图所示的视图的渲染过程:
1,CPU计算显示内容(如文字绘制、UI布局计算、视图创建、图片解码等。),然后将计算出的内容提交给GPU。
2.经过GPU渲染(变换、图层合成、纹理渲染等。)完成后,将渲染结果放入帧缓冲区。
3.视频控制器会根据VSync信号逐行读取帧缓冲器中的数据,通过可能的数模转换传输到显示器。
备注:
1.显示器上的所有图像被逐行扫描(从左到右和从上到下刷新),如下图所示:
3.水平同步可能会造成画面撕裂(如下图)。因为画面的渲染并不是整个画面在一起,而是一行一行一列的。如果没有开启垂直同步,设备配置不够,在画面的高速移动中,还没有完成刷新,就会出现下一行,然后出现撕裂。
4.垂直同步是为了解决画面撕裂的问题。当垂直同步打开时,GPU将在渲染新帧和更新缓冲区之前等待显示器的VSync信号。这样可以解决画面撕裂现象,增加画面流畅度,但是需要消耗更多的计算资源,也会带来一定的延迟。
5.目前iOS设备使用双缓存并开启垂直同步,而Android有三个缓存并开启垂直同步(如何在缓存间切换?)
首先我们来了解一下基础知识:假设设备刷新率为60HZ,如果页面滑动流畅度为60fps,即一秒更新60张图片,那么对人眼来说是平滑的,即每16.7ms(1/60)会产生一帧图片,即每16.7ms会发出V..
卡顿帧丢失原因:
如果CPU在一个VSync时间内占用的时间较长,留给GPU的时间较少,GPU+CPU的总时间可能超过16.7 ms,在下一帧到来之前,下一帧的屏幕还没有准备好。此时显示器仍然显示上一帧的画面,会出现掉帧和滑动卡顿的情况。
同样,如果GPU耗时较长,总时间可能超过16.7 ms。
所以无论哪个CPU或者GPU阻碍显示进程,都会造成丢帧。
经过以上分析,为了优化丢帧问题,我们需要优化CPU和GPU的处理过程。
我们来谈谈以下参数:
每秒帧数;每秒应用程序界面的平均刷新次数,
邱建:果酱邱建的数量:1。
big jank:1s内严重堵塞的次数。
邱建计算方法:
1.如果同时满足以下两个条件,则认为是邱建堵塞。
a)当前帧需要的时间>;前三帧平均花费两倍的时间。
b)当前帧需要的时间>;两个电影帧需要时间(1000 ms/24 ^ 2 = 84 ms)。
2.如果同时满足两个条件,则认为是严重堵塞。
a)当前帧需要的时间>;前三帧平均花费两倍的时间。
b)当前帧需要的时间>;三个电影帧需要时间(1000 ms/24 ^ 3 = 125 ms)。
测试期间,卡住时间的比例。也就是口吃=口吃时长/总时长。
卡住时间的计算:基于邱建,一旦邱建卡住,就会有一个卡住时间邱建时间。测试过程中可能会有很多卡,也就是可能会有很多卡。捕捉时间是多次捕捉时间的总和。
上下帧的显示时间间隔也可以简单的认为是单帧渲染的耗时。
Avg(FTime):平均帧时间。
1,流畅度不等于FPS,所以需要多维度衡量,考虑FPS,邱建,口吃。
2.APP需要关注FPS、邱建和卡顿率。只需要区分使用场景,比如:
(1),静态页面窗口
只要注意FPS,理论上FPS应该是0,否则说明有冗余刷新,容易导致手机发热耗电。
(2)有一个滚动动画页面窗口。
注意FPS就行了,FPS在一个合适的值,不需要高频刷新。
(3)快速滑动页面窗口。
需要注意FPS,邱建和卡顿率。这就是手机交互的敏感之处。一般在滑动状态下,帧率越高越好,邱建越小越好。
(4)播放视频页面窗口。
需要关注FPS、邱建和卡顿率,视频卡顿直接影响用户。视频的一般帧率是18-24帧,邱建=0。比如微信播放视频,视频播放器。