gpu渲染性能調優

這裏寫圖片描述

Android開發者選項中提供了Profile GPU Rendering功能,用於在屏幕上實時顯示GPU渲染每一幀圖像花費的時間(單位:ms)。
小米手機。 開發者選項——gpu呈現模式分析——在屏幕上顯示爲條形圖

渲染時間用柱狀圖表示,上面的綠線代表16ms,也就是要儘量保證所有柱狀圖都在這條線下方。每一條柱狀圖都由3部分組成,藍色、紅色和黃色,代表渲染的3個不同的階段,通過分析這三個階段的時間就可以找到渲染時的性能瓶頸。

藍色部分表示繪製時間或者在Java層創建和更新display list的時間。在一個View 實際被渲染前,它需要先轉換爲GPU能識別的格式。簡單來說可能就是幾個繪製命令,複雜一點,我們可能在嵌入了一條從canvas獲取的自定義路徑。這一步完成之後,輸出結果就會被系統作爲display list緩存起來。

藍色部分記錄了這一幀對所有需要更新的view完成這兩步(轉化成gpu識別的格式 作爲display list 緩存)花費的時間。當它很高的時候,說明有很多view突然被作廢無效(invalidate)重繪了,或者是有幾個自定義view在onDraw函數中做了特別複雜的繪製邏輯。

紅色部分代表執行時間,也就是Android 2D渲染引擎(OpenGL)執行display list的時間。爲了將變化繪製在屏幕上,Android需要使用OpenGL ES API來繪製這些display list信息,OpenGL最終將數據傳給了GPU,然後GPU渲染到屏幕上。View越複雜,OpenGL繪製所需要的命令也越複雜。如果紅色這一段比較高,複雜的view都可能是罪魁禍首。還有值得注意的是比較大的峯值,這說明有些view重複提交了,也就是繪製了多次,而它們可能並不需要重繪。

橙色部分代表處理時間,更進一步,就是GPU告訴CPU渲染已經完成的時間。這部分是阻塞的,CPU會等待GPU知道確認收到了命令,如果這裏比較高,說明GPU做的任務太多了,通常是由於很多複雜的view繪製從而需要過多的OpenGL渲染命令去處理。

CPU 與 GPU
現代的圖形API不允許CPU直接與GPU通信,而是通過中間的一個圖形驅動層(Graphics Driver)來連接這兩部分。
圖形驅動維護了一個隊列,CPU把display list添加到隊列裏,GPU從這個隊列取出數據進行繪製。

這裏寫鏈接內容

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章