首先我们来看一个图,它是iOS App 的图形渲染技术栈,由图可知App 使用 Core Graphics、Core Animation、Core Image 等框架来绘制可视化内容,这些软件框架相互之间也有着依赖关系。这些框架都需要通过 OpenGL 来调用 GPU 进行绘制,最终将内容显示到屏幕之上。
ios-rendering-framework-relationship.png
iOS下的Core Animation
20200704125455778.pngCore Animation 源自于 Layer Kit,我们平常写代码使用的动画只是 Core Animation 特性的冰山一角。Core Animation 是一个复合引擎,其职责是 尽可能快地组合屏幕上不同的可视内容,这些可视内容可被分解成独立的图层(即 CALayer),这些图层会被存储在一个叫做图层树的体系之中。从本质上而言,CALayer 是用户所能在屏幕上看见的一切的基础。
CoreAnimation渲染流水线
1593918526136-6b29cc76-23dd-4f8e-8831-20763a9e87b2.png事实上,app 本身并不负责渲染,渲染则是由一个独立的进程负责,即 Render Server进程。App 通过 IPC 将渲染任务及相关数据提交给 Render Server。Render Server 处理完数据后,再传递至 GPU。最后由 GPU 调用 iOS 的图像设备进行显示。
Core Animation 流水线的详细过程:
1.首先处理Handle Events响应事件,如:用户的点击操作,在此过程中 app 可能需要更新视图树,相应的图层树也会被更新。
2.Commit Transaction:通过 CPU 完成对显示内容的计算,如:视图的创建、布局计算、图片解码、文本绘制等。并等待下一次runloop提交到RenderServer。
3.Render Server主要执行 Open GL、Core Graphics 相关程序,并调用 GPU。
这些流程都是在CPU中完成的。
网友评论