Android 性能優化 - 檢查 GPU 渲染速度和繪製過度

轉載地址:https://developer.android.google.cn/studio/profile/inspect-gpu-rendering

 

檢查 GPU 渲染速度和繪製過度

Android 包含一些設備上開發者選項,可幫助您直觀地瞭解您的應用在何處出現界面渲染問題,如執行太多不必要的渲染工作,或執行長時間的線程和 GPU 操作。 本頁介紹如何調試 GPU 過度繪製問題以及如何分析 GPU 渲染問題。

如需瞭解有關設備上開發者選項的更多信息,包括如何啓用它們,請閱讀配置設備上開發者選項

分析 GPU 的渲染速度

Profile GPU Rendering 工具以滾動直方圖的形式直觀地顯示渲染界面窗口幀所花費的時間(以每幀 16 毫秒的速度作爲對比基準)。

在性能較低的 GPU 上,可用的填充率(GPU 填充幀緩衝區的速度)可能很低。 隨着繪製幀所需的像素數增加,GPU 可能需要花較長時間來處理新命令,並要求系統的其餘任務等待,直到系統可以跟上需求。 此分析工具可幫助您確定 GPU 何時因嘗試繪製像素而負擔過重,或何時因大量的過度繪製而被拖累。

注:此分析工具不適用於使用 NDK 的應用。 這是因爲當 OpenGL 提取全屏上下文時,系統會將框架消息推送到後臺。 在此情況下,您可能會發現 GPU 製造商提供的分析工具會很有幫助。

啓用分析器

開始前,請確保您使用的是運行 Android 4.1(API 級別 16)或更高版本的設備,並啓用開發者選項。 要在使用應用時開始分析設備 GPU 渲染,請執行以下操作:

  1. 在您的設備上,轉到 Settings 並點按 Developer Options
  2. 在 Monitoring 部分,選擇 Profile GPU Rendering
  3. 在 Profile GPU Rendering 對話框中,選擇 On screen as bars 以在設備屏幕上疊加圖表。
  4. 打開您要分析的應用。

檢查輸出

在圖 1 中顯示的放大的 Profile GPU Rendering 圖表圖像中,您會看到 Android 6.0(API 級別 23)上顯示的彩色部分。

圖 1. 放大的 Profile GPU Rendering 圖表。

 

以下是有關輸出的幾點注意事項:

  • 對於每個可見應用,此工具將顯示一個圖表。
  • 沿水平軸的每個豎條都代表一個幀,每個豎條的高度表示渲染該幀所花的時間(單位:毫秒)。
  • 水平綠線表示 16 毫秒。 要實現每秒 60 幀,代表每個幀的豎條需要保持在此線以下。 當豎條超出此線時,可能會使動畫出現暫停。
  • 此工具通過加寬對應的豎條並降低透明度來突出顯示超出 16 毫秒閾值的幀。
  • 每個豎條都有與渲染管道中某個階段對應的彩色區段。 區段數因設備的 API 級別而異。

下表介紹了使用運行 Android 6.0 及更高版本的設備時分析器輸出中某個豎條的每個區段。

豎條區段 渲染階段 說明
  交換緩衝區 表示 CPU 等待 GPU 完成其工作的時間。 如果此豎條升高,則表示應用在 GPU 上執行太多工作。
  命令問題 表示 Android 的 2D 渲染器向 OpenGL 發起繪製和重新繪製顯示列表的命令所花的時間。 此豎條的高度與它執行每個顯示列表所花的時間的總和成正比—顯示列表越多,紅色條就越高。
  同步和上傳 表示將位圖信息上傳到 GPU 所花的時間。 大區段表示應用花費大量的時間加載大量圖形。
  繪製 表示用於創建和更新視圖顯示列表的時間。 如果豎條的此部分很高,則表明這裏可能有許多自定義視圖繪製,或 onDraw 函數執行的工作很多。
  測量/佈局 表示在視圖層次結構中的 onLayout 和 onMeasure 回調上所花的時間。 大區段表示此視圖層次結構正在花很長時間進行處理。
  動畫 表示評估運行該幀的所有動畫程序所花的時間。 如果此區段很大,則表示您的應用可能在使用性能欠佳的自定義動畫程序,或因更新屬性而導致一些意料之外的工作。
  輸入處理 表示應用執行輸入 Event 回調中的代碼所花的時間。 如果此區段很大,則表示此應用花太多時間處理用戶輸入。 考慮將此處理任務分流到另一個線程。
  其他時間/VSync 延遲 表示應用執行兩個連續幀之間的操作所花的時間。 它可能表示界面線程中進行的處理太多,而這些處理任務本可以分流到其他線程。

表 1. Android 6.0 及更高版本中的豎條區段。

4.0(API 級別 14)和 5.0(API 級別 21)之間的 Android 版本具有藍色、紫色、紅色和橙色區段。 低於 4.0 的 Android 版本只有藍色、紅色和橙色區段。 下表顯示的是 Android 4.0 和 5.0 中的豎條區段。

豎條區段 渲染階段 說明
  進程 表示 CPU 等待 GPU 完成其工作的時間。 如果此豎條升高,則表示應用在 GPU 上執行太多工作。
  執行 表示 Android 的 2D 渲染器向 OpenGL 發起繪製和重新繪製顯示列表的命令所花的時間。 此豎條的高度與它執行每個顯示列表所花的時間的總和成正比—顯示列表越多,紅色條就越高。
  XFer 表示將位圖信息上傳到 GPU 所花的時間。 大區段表示應用花費大量的時間加載大量圖形。 此區段在運行 Android 4.0 或更低版本的設備上不可見。
  更新 表示用於創建和更新視圖顯示列表的時間。 如果豎條的此部分很高,則表明這裏可能有許多自定義視圖繪製,或 onDraw 函數執行的工作很多。

表 2. Android 4.0 及 5.0 中的豎條區段。

如需詳細瞭解如何解釋分析工具提供的信息,請閱讀使用 Profile GPU Rendering 進行分析

注: 儘管此工具名爲 Profile GPU Rendering,但所有受監控的進程實際上發生在 CPU 中。 通過將命令提交到 GPU 觸發渲染,GPU 異步渲染屏幕。 在某些情況下,GPU 會有太多工作要處理,在它可以提交新命令前,您的 CPU 必須等待。 在等待時,您將看到橙色條和紅色條中出現峯值,且命令提交將被阻止,直到 GPU 命令隊列騰出更多空間。

將 GPU 過度繪製可視化

這是開發者選項中的另一個功能,通過對您的界面進行彩色編碼來幫助您識別過度繪製。 當您的應用在同一幀中多次繪製相同像素時,便會發生過度繪製。 因此,此圖可顯示您的應用可能在何處執行太多不必要的渲染工作,這可能是 GPU 多此一舉地渲染用戶不可見的像素所導致的性能問題。 因此,您應儘可能修復過度繪製 Event

如果您尚未執行此操作,請啓用開發者選項。 然後,要在您的設備上可視化過度繪製問題,請執行以下操作:

  1. 在您的設備上,轉到 Settings 並點按 Developer Options
  2. 向下滾動到 Hardware accelerated rendering 部分,並選擇 Debug GPU Overdraw
  3. 在 Debug GPU overdraw 對話框中,選擇 Show overdraw areas

Android 按如下方法爲界面元素設置顏色,以便確定過度繪製的次數:

  • 真彩色: 沒有過度繪製
  •  藍色: 過度繪製 1 次
  •  綠色: 過度繪製 2 次
  •  粉色: 過度繪製 3 次
  •  紅色: 過度繪製 4 次或更多

圖 2. 某個應用正常時的樣子(左側),以及它在 GPU 過度繪製後的樣子(右側)

請注意,這些顏色是半透明的,因此,您在屏幕上看到的確切顏色取決於您的界面內容。

現在,您可以瞭解您的佈局中何處出現了過度繪製,請閱讀如何減少過度繪製

請記住,有些過度繪製是不可避免的。 在優化您的應用的界面時,應嘗試達到大部分顯示真彩色或僅有 1 次過度繪製(藍色)的視覺效果。

圖 3. 大量過度繪製的應用(左側)以及很少過度繪製的應用(右側)的示例

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