理想狀況是在必定的頻率下,人眼中看到流暢的畫面(通常60fps),掃描完一張圖,屏幕刷新一幀圖像,當每一秒有60幀的畫面更新,至關於每隔16.7ms就有1幀畫面更新,若是CPU和GPU能在16.7ms內處理完1幀畫面那麼就是流暢的,反之就會出現卡頓緩存
圖像的顯示流程是:掃描圖像--->幀緩存區--->視頻控制器發出指令讀取幀緩存區位圖信息--->數模轉換(數字信號轉換爲模擬信號)---> 顯示 顯示器的刷新是逐⾏進⾏的,所以爲了防顯示的時候屏幕緩衝區的數據分屬於兩個不一樣的幀,且兩幀圖像有必定的位移,咱們就會看到撕裂圖像的現象,以下圖post
常規的GPU⾄少都會有兩個幀緩衝區。顯示在屏幕上的稱爲屏幕緩衝區,沒有顯示的稱爲離屏緩衝區。在一個緩衝區渲染完成以後,經過將屏幕緩衝區和離屏緩衝區交換,實現圖像在屏幕上的顯示。性能
顯示器的刷新時,爲了防止緩衝區的數據分屬於兩個不一樣的幀,給幀緩衝區加鎖,所以交換通常會等待顯示器刷新完成的信號,在顯示器兩次刷新的間隔中進行交換,這個信號就被稱爲垂直同步信號,這個技術被稱爲垂直同步cdn
雙緩衝區要等待緩衝區交換以後再進行顯示,若是未交換,仍顯示上一幀的數據,使得幀率沒法徹底達到硬件容許的最⾼水平-->引入三緩衝區技術.視頻
三緩衝區技術 :有1個上屏緩衝區和兩個離屏緩衝區,在等待垂直同步時,來回交替渲染兩個離屏的緩衝區,而垂直同步發生時,屏幕緩衝區和最近渲染完成的離屏緩衝區交換,充分利用硬件性能blog
接收到垂直信號時,CPU和CPU處理圖片數據未完成,拿不到緩衝區的數據,重複渲染同一幀數據(上一次緩存中的數據)到屏幕,稱爲掉幀。 圖片
CPU/GPU 渲染流水線耗時過長-->掉幀get
使用垂直同步信號+雙緩存區以掉幀爲代價解決撕裂問題同步
使用三緩衝也有可能掉幀,但能夠減小掉幀次數it