標籤:android 效能最佳化
概念
- VSYNC,vertical synchronization
- Refresh Rate 螢幕一秒鐘重新整理的次數,由硬體決定,單位Hz,一般是60Hz
- Frame Rate GPU在一秒內繪製的幀數,單位fps(Frames per second)
具體解釋
GPU擷取圖形資料進行繪製,硬體將繪製好的資料呈現在螢幕上,為了使畫面在螢幕上流暢的顯示,需要保持Frame Rate 在60以上,也就是一次draw操作的時間不超過16.7ms。
Frame Rate與Refrash Rate不會總保持一致,如果GPU繪製速度大於螢幕重新整理速度,就會出現截斷現象,這是因為GPU使用一塊記憶體繪製幀資料,新的映像幀會從上到下一行一行覆蓋舊映像幀,當螢幕重新整理時並不知道緩衝區現在的資料狀態,這樣就抓取了GPU中還沒有繪製完的一幀資料。
解決方案是雙緩衝技術(double buffering),GPU首先將幀資料寫到back buffer中,然後把它拷貝到另一塊地區frame buffer。當繪製下一幀時,資料先寫到back buffer,螢幕重新整理時,只從frame buffer中擷取。如果GPU正在寫back buffer,這時候來了重新整理螢幕,VSYNC就會阻止這個拷貝過程。
VSYNC or vertical synchronization,will basically keep this copy operation from back buffer to frame buffer from happening if the screen is in the middle of refreshing from it.
當GPU的繪製速度小於螢幕重新整理速度,也就是FrameRate < RefreshRate,就會在螢幕上看到卡頓現象。所以要盡量保證一幀的繪製時間小於16ms。
Reference
Android Performance Patterns: Understanding VSYNC
Android效能最佳化系列——VSYNC