一瀑志、離屏渲染的定義
因為一些限制涩搓,無法把渲染結(jié)果直接寫入frame buffer,而是先暫存在另一個內(nèi)存區(qū)域劈猪,完成渲染之后再寫入frame buffer昧甘,這個過程被稱為離屏渲染。
離屏渲染消耗性能的原因:
1战得、需要創(chuàng)建新的緩沖區(qū)
2充边、離屏渲染的整個過程,需要多次切換上下文環(huán)境常侦,先從當前屏幕(On-Screen)切換到離屏(Off-Screen)浇冰。等到離屏渲染結(jié)束以后,將離屏渲染緩沖區(qū)的渲染結(jié)果顯示到屏幕上聋亡,又需要將上下文環(huán)境從離屏切換到當前屏幕肘习。
二、產(chǎn)生離屏渲染的案例
1.使用遮罩mask
2.設(shè)置圓角調(diào)用cornerRadius+maskToBounds
3.設(shè)置陰影沒有設(shè)置path
4.開啟光柵化?shouldRasterize
5杀捻、group opacity
6井厌、UIBlurEffect
注:https://zhuanlan.zhihu.com/p/72653360 ?此處作者有詳細的各個案例分析
三蚓庭、產(chǎn)生離屏渲染的根本原因(個人猜想與理解)
無法使用frame buffer渲染出最終結(jié)果,必須開辟出一塊內(nèi)存來渲染整合仅仆。通俗點就是有一幀畫面有多個圖層需要同時修改時會觸發(fā)器赞。
四、離屏渲染的其他概念
1墓拜、內(nèi)存中的內(nèi)容超過100ms沒有被使用會自動被丟棄
2港柜、離屏渲染內(nèi)存空間最大值為2.5倍的屏幕像素,需要渲染的內(nèi)容大于最大值則無法生效
3咳榜、離屏渲染雖然會占用更多內(nèi)存但一些復(fù)雜的圖層且需要頻繁使用開啟離屏渲染能提高性能夏醉。
4、真正的離屏渲染發(fā)生在GPU
5涌韩、模擬器檢測哪些圖層發(fā)生離屏渲染 DEBUG->color-off-screen rendered 界面變黃的則產(chǎn)生了離屏渲染