屏幕卡頓
屏幕卡頓是指圖形顯示到屏幕上時倡缠,出現(xiàn)了圖像撕裂伊群、掉幀等問題
卡頓原因
- 圖形、圖像顯示到屏幕上,需要經(jīng)過CPU計算和GPU渲染氨距,但是在這過程中是需要一定的耗時,如果耗時過長赚导,就會導致
幀緩沖區(qū)
的數(shù)據(jù)沒有更新尚粘,顯示的還是上一幀的數(shù)據(jù) -
垂直同步+雙緩沖區(qū)
:通過Vsync
強制同步,雖然可以解決屏幕撕裂
蝇庭,但同時也會導致掉幀
醉鳖,雖然采用了雙緩沖區(qū),但是并不能從根本上解決CPU哮内、GPU處理圖形盗棵、圖像的速度,從而導致掉幀
屏幕顯示的過程
- CPU計算需要顯示的圖像北发,提交給GPU
- GPU進行渲染后將結(jié)果存放到
幀緩沖區(qū)
- 視頻控制器再去讀取
幀緩沖區(qū)
里的內(nèi)容
image.png
垂直同步和雙緩沖區(qū)
- 垂直同步:是指給幀緩沖加鎖纹因,當電子光束掃描的過程中,只有掃描完成了才會讀取下一幀的數(shù)據(jù)琳拨,而不是只讀取一部分
- 雙緩沖區(qū):采用兩個幀緩沖區(qū)用于GPU處理結(jié)果的存儲瞭恰,當屏幕顯示其中一個緩存區(qū)內(nèi)容時,另一個緩沖區(qū)繼續(xù)等待下一個緩沖結(jié)果狱庇,兩個緩沖區(qū)依次進行交替
image.png
掉幀
當前屏幕顯示的是A寄疏,在收到垂直信號后,CPU和GPU處理的B還沒有準備好僵井,此時陕截,屏幕顯示的仍然是A
image.png
iOS渲染流程
- App通過調(diào)用
CoreGraphics
、CoreAnimation
批什、CoreImage
等框架接口觸發(fā)圖像渲染操作 - 框架將渲染交由
OpenGL ES
來驅(qū)動GPU做渲染农曲,最后顯示到屏幕上
image.png
iOS中的渲染框架
未命名文件.png