iOS渲染
VSync:
- iOS渲染由VSync信号驱动。
- VSync有硬件始终驱动,频率为60hz。
- VSync通过mach port通知APP的Runloop(可能通过调用CADisplayLink)。
APP内流程:
Core Animation(CA)在Runloop中注册 BeforeWaiting(即将休眠)和 Exit(即将退出)两个Observer(OB)。
OB收到消息后会通知CA更新内容,并推到缓冲区等待GPU调用。如:CADisplayLink回调后Runloop休眠前会调用BeforeWaiting OB。
CA & CG(core graphic/Quartz)
CG在主线程使用CPU渲染。
CA由ES驱动,不在主线程,异步绘图,GPU渲染。
On-Screen:
使用当前屏幕缓冲区。
Off-Screen:
- 开辟一个新的缓冲区。
- 使用CG生成一张Bitmap。如果UIView实现了drawRect方法,就会生成一张视图大小*scale的一张Bitmap,所以不要有空的drawRect方法。
- shouldRasterize(光栅化)、mask(遮罩)、shadow(阴影)、anti-aliasing(抗锯齿)、group opacity(不透明)会引起Off-Screen。
开销大:
创建缓冲区。
上下文切换。