一、离屏渲染的定义
因为一些限制,无法把渲染结果直接写入frame buffer,而是先暂存在另一个内存区域,完成渲染之后再写入frame buffer,这个过程被称为离屏渲染。
离屏渲染消耗性能的原因:
1、需要创建新的缓冲区
2、离屏渲染的整个过程,需要多次切换上下文环境,先从当前屏幕(On-Screen)切换到离屏(Off-Screen)。等到离屏渲染结束以后,将离屏渲染缓冲区的渲染结果显示到屏幕上,又需要将上下文环境从离屏切换到当前屏幕。
二、产生离屏渲染的案例
1.使用遮罩mask
2.设置圆角调用cornerRadius+maskToBounds
3.设置阴影没有设置path
4.开启光栅化 shouldRasterize
5、group opacity
6、UIBlurEffect
注:https://zhuanlan.zhihu.com/p/72653360 此处作者有详细的各个案例分析
三、产生离屏渲染的根本原因(个人猜想与理解)
无法使用frame buffer渲染出最终结果,必须开辟出一块内存来渲染整合。通俗点就是有一帧画面有多个图层需要同时修改时会触发。
四、离屏渲染的其他概念
1、内存中的内容超过100ms没有被使用会自动被丢弃
2、离屏渲染内存空间最大值为2.5倍的屏幕像素,需要渲染的内容大于最大值则无法生效
3、离屏渲染虽然会占用更多内存但一些复杂的图层且需要频繁使用开启离屏渲染能提高性能。
4、真正的离屏渲染发生在GPU
5、模拟器检测哪些图层发生离屏渲染 DEBUG->color-off-screen rendered 界面变黄的则产生了离屏渲染
网友评论