敲黑板浓冒,劃重點!<饫ぁ稳懒!
圖片撕裂:兩幀或多幀圖片在屏幕上顯示,導致顯示效果錯位慢味,效果圖如下:
掉幀:指的是重復顯示同一幀圖片场梆,非丟失了某一幀內容(有疑問,見思考)
圖片撕裂流程圖如下:
為解決上述問題:iOS引入垂直同步Vsync + 雙緩存區(qū) DoubleBuffering?
1纯路、垂直同步Vsync:即加鎖原理或油,當前幀內容沒有顯示完全時,不會讀取下一幀內容感昼,幀緩存區(qū)被鎖定
2装哆、雙緩存區(qū) DoubleBuffering :即在GPU開辟兩個幀緩沖區(qū)
上述技術解決圖片撕裂問題的同時引入了掉幀的問題
如上圖,當CPU+GPU處理圖片的是時間>每一幀顯示的時間(16.7ms)(1s中顯示60幀,人視覺感官會更加流暢和逼真)時蜕琴,幀緩存區(qū)無更新萍桌,繼續(xù)顯示當前幀內容
為了解決上述問題:iOS引入了三級緩存技術,需要關注的是凌简,該技術僅僅只是解決了掉幀出現(xiàn)的概率上炎,沒有從根本上解決掉幀的問題
思考(問題):
當前顯示A緩存區(qū)數(shù)據(jù),Vsync信號接受時雏搂,B緩存區(qū)幀數(shù)據(jù)未更新藕施,那應該是顯示當前幀的上一幀數(shù)據(jù)而不是同一幀數(shù)據(jù),是B緩存區(qū)數(shù)據(jù)未更新時凸郑,即使A緩存區(qū)數(shù)據(jù)顯示完成裳食,屏幕控制器也不會指向B幀緩沖區(qū)嗎?
解答:掉幀時芙沥,還是顯示的當前幀數(shù)據(jù)诲祸,由于B緩存數(shù)據(jù)未更新,不會去讀B緩存區(qū)的數(shù)據(jù)