IOS中Core Animation流水线详细过程

首先我们知道,在IOS中是由CALayer来做图像的渲染,那么它是如何调用 GPU 并显示可视化内容的呢?接下来介绍一下Core Animation流水线工作流程。
注意:IOS 中APP 本身并不负责渲染,渲染是由另外一个叫做Render Server的进程负责。App 通过 IPC 将渲染任务及相关数据提交给 Render Server。Render Server 处理完数据后,再传递至 GPU。最后由 GPU 调用 iOS 的图像设备进行显示。

ios-core-animation-pipeline-steps.png

如上图,Core Animation 流水线的详细过程如下:

  1. 由 app 处理事件(Handle Events),如:用户的点击操作,在此过程中 app 可能需要更新 视图树,相应地,图层树 也会被更新。
  2. app 通过 CPU 完成对显示内容的计算,如:视图的创建、布局计算、图片解码、文本绘制等。在完成对显示内容的计算之后,app 对图层进行打包,并在下一次 RunLoop 时将其发送至 Render Server,即完成了一次 Commit Transaction 操作。具体可细分为4个步骤:
    2.1 Layout: Layout 阶段主要进行视图构建,包括:LayoutSubviews 方法的重载,addSubview: 方法填充子视图等。
    2.2 Display: Display 阶段主要进行视图绘制,这里仅仅是设置最要成像的图元数据。重载视图的 drawRect: 方法可以自定义 UIView 的显示,其原理是在 drawRect: 方法内部绘制寄宿图,该过程使用 CPU 和内存
    2.3 Prepare: Prepare 阶段属于附加步骤,一般处理图像的解码和转换等操作。
    2.4 Commit: Commit 阶段主要将图层进行打包,并将它们发送至 Render Server。该过程会递归执行,因为图层和视图都是以树形结构存在
  3. Render Server 主要执行 Open GL、Core Graphics 相关程序,并调用 GPU
  4. GPU 则在物理层上完成了对图像的渲染。
  5. GPU 通过 Frame Buffer、视频控制器等相关部件,将图像显示在屏幕上。

由于上流程执行时长远远超过 16.67 ms,因此为了满足对屏幕的 60 FPS 刷新率的支持,需要将这些步骤进行分解,利用流水线的方式并行执行,如下图所示。

ios-core-animation-pipeline-workflow.png

你可能感兴趣的:(IOS中Core Animation流水线详细过程)