iOS 视觉特效三 iOS渲染流程解析和屏幕卡顿

2023-03-15  本文已影响0人  没有昵称的昵称没有

屏幕成像过程

屏幕卡顿

屏幕卡顿是指图形图像的在显示时出现了撕裂(即图片错位显示)、掉帧(重复显示同一帧数据)等问题,导致用户能直观的从屏幕上看到的一种异常现象。
接下来解释屏幕卡顿以及为什么会出现这种现象。

屏幕卡顿原因

  1. 由图像的显示原理,我们知道一帧的显示是由CPU和GPU共同决定的。一般来说,页面滑动流畅是60fps,也就是1s有60帧更新,即每隔16.7ms就要产生一帧画面,而如果CPU和GPU加起来的处理时间超过了16.7ms,从缓存区获取位图显示时,下一帧数据还没准备好,获取的仍是上一帧的数据,产生\color{red}{掉帧现象},掉帧就会导致屏幕卡顿。

  2. 苹果官方为解决屏幕撕裂问题,目前使用的方案是\color{red}{垂直同步+双缓存区},可以从根本上防止和解决屏幕撕裂,但是同时也导致了新的问题掉帧。虽然我们采用了双缓存区,但是我们并不能解决CPU和GPU处理图形图像的速度问题,导致屏幕在接收到垂直信号时,数据尚未准备好,缓存区仍是上一帧的数据,因此导致掉帧
    如图所示:

    卡顿、掉帧原因图
  3. 在垂直同步+双缓存区方案的基础上,提出将双缓存区,改为\color{red}{三缓存区}的优化,但是这样并不能从根本解决掉帧问题,只是比双缓存区掉帧的概率小很多,用户可能无感知。

垂直同步与双缓存区

渲染流程

iOS中的渲染流程如下图所示:


iOS渲染流程图

渲染框架总结

1、UIKit

2、CoreAnimation

源自Layer Kit,是一个复合引擎

3、CoreGraphics

基于Quartz发高级绘图引擎,提供了非常强大的轻量级2D渲染能力

4、CoreImage

拥有一系列线程的图像过滤器,可以对已经存在的图像进行高效处理

5、OpenGL ES

是 OpenGL 的子集

6、Metal

一套是由Apple实现的第三方标准

UIView和CALayer

上一篇 下一篇

猜你喜欢

热点阅读