Core Animation是如何在CPU(中央处理器)软件层面和GPU(图形处理器)硬件层面分配工作的:
- 动画和屏幕上组合的图层实际上*被一个单独的进程管理,而不是你的应用程序***,iOS5之前的版本是SpringBoard进程,iOS6之后的版本叫做BackBoard.
当运行一段动画时候,这个过程会被四个分离的阶段被打破: 1
布局:这是准备你的视图/图层的图层关系,以及设置图层属性(位置,背景.边框等)的阶段. 2
显示:这是图层的寄宿图片被绘制的阶段.绘制有可能涉及你的-drawRect:和-drawLayer:inContext:方法的调用路径.
3 准备:这是Core Animation准备发送动画数据到渲染服务的阶段.这同时也是Core Animation
将要执行一些别的事务例如解码动画过程中将要显示的图片的时间点. 4 提交:这是最后的阶段,Core
Animation打包所有图层和动画属性,然后通过IPC(内部处理通信)发送到渲染服务进行显示.
一旦打包的图层和动画到达渲染服务进程,他们会被反序列化来形成另一个叫做渲染树的图层树.**渲染服务对动画的每一帧做出如下工作: 5
对所有的图层属性计算中间值,设置OpenGL几何形状(纹理化的三角形)来执行渲染. 6 在屏幕上渲染可见的三角形
一共六个阶段,前五个阶段在软件层面处理(通过CPU),最后一个阶段被GPU执行.你真正只能控制前两个阶段:布局和显示.CoreAnimation框架在内部处理剩下的事务,你也控制不了它.
这并不是个问题,因为在布局和显示阶段,你可以决定哪些由CPU执行,哪些交 给GPU去做。那么改如何判断呢? GPU相关的操作
GPU为一个具体的任务做了优化:它用来采集图片和形状(三角形),运行变换,应用纹理和混合然后把它们输送到屏幕上。现代iOS设备上可编程的GPU在这些操作的执行上又很大的灵活性,但是Core<