美文网首页
IOS中Core Animation流水线详细过程

IOS中Core Animation流水线详细过程

作者: 张小张x86 | 来源:发表于2020-07-06 00:21 被阅读0次

    首先我们知道,在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流水线详细过程

          本文链接:https://www.haomeiwen.com/subject/imhiqktx.html