檢查算繪速度

Android 系統提供了一些裝置端開發人員選項,可以視覺化呈現應用程式在轉譯 UI 時可能發生的問題,例如執行多餘的轉譯工作、長時間執行緒和 GPU 作業。本頁面會說明如何對 GPU 過度繪製和 GPU 轉譯剖析偵錯。

如要進一步瞭解裝置端開發人員選項及其啟用方式,請參閱「設定裝置端開發人員選項」一文。

剖析 GPU 轉譯速度

剖析 GPU 轉譯工具會顯示捲動式直方圖,視覺化呈現相對於每影格 16.67 毫秒的基準,轉譯 UI 視窗影格所需時間。

在效能較低的 GPU 上,像素填充率 (GPU 可填滿影格緩衝區的速度) 可能會相當低。隨著繪製影格所需的像素量增加,GPU 處理新指令所需的時間也可能延長,導致系統其他部分必須等候 GPU 跟上進度。

您可以使用剖析工具找出 GPU 因嘗試繪製像素、或因嚴重過度繪製而不堪負荷的情形。

啟用分析器

開始之前,請先確認您使用的是搭載 Android 4.1 (API 級別 16) 以上版本的裝置,且已啟用開發人員選項。如要在使用應用程式時剖析裝置 GPU 轉譯,請按照下列步驟進行:

  1. 前往裝置的「設定」,輕觸「開發人員選項」
  2. 在「監控」部分中,根據裝置搭載的 Android 版本,選取「剖析 GPU 轉譯」或「剖析 HWUI 轉譯」
  3. 在「剖析 GPU 轉譯」對話方塊中,選取「在螢幕上顯示長條圖」,即可在裝置螢幕上疊加顯示圖表。
  4. 開啟要剖析的應用程式。

檢查輸出內容

在圖 1 顯示的剖析 GPU 轉譯圖表放大圖中,您可以看到如 Android 6.0 (API 級別 23) 所顯示的上色部分。

圖 1. 放大的剖析 GPU 轉譯圖表。

以下是輸出內容的相關注意事項:

  • 這項工具會為每個可見應用程式顯示圖表。
  • 橫軸上每個垂直長條都代表一個影格,每個垂直長條的高度則代表轉譯影格所需時間 (單位為毫秒)。
  • 綠色橫線代表 16.67 毫秒。如要達到每秒 60 個影格,每個影格的垂直長條都需要保持在這條線以下。長條超出這條線時,動畫就可能會發生卡頓情形。
  • 這項工具會醒目顯示超過 16.67 毫秒門檻的影格,將對應的長條加寬並降低透明度。
  • 每個長條都有上色的元件,對應到轉譯管道中的特定階段。元件數量會因裝置的 API 級別而異。

下表說明裝置搭載 Android 6.0 以上版本時,在剖析工具輸出內容中,垂直長條各區段代表的意義。

長條的元件轉譯階段說明
切換緩衝區 代表 CPU 等候 GPU 完成工作的時間。如果這個長條變高,表示應用程式在 GPU 執行過多工作。
指令問題 代表 Android 2D 轉譯器發出指令讓 OpenGL 繪製及重新繪製顯示清單花費的時間。此長條的高度,與每個顯示清單所需執行時間加總,直接成正比;顯示清單越多,紅色長條就越高。
同步和上傳 代表將點陣圖資訊上傳至 GPU 花費的時間。區隔偏大表示應用程式花費相當多的時間載入大量圖形。
繪圖 代表用於記錄繪圖指令的時間,例如 drawLine。在 Compose 中,這個階段有時會包含測量和版面配置作業。如果這個長條圖很高,請擷取系統追蹤記錄,並使用 Perfetto 檢查,取得詳細的細目。
測量/版面配置 代表在版面配置階段,用於定位及決定 UI 元件大小的時間量,包括執行測量和位置修飾符。如果區隔偏大,表示這些修飾符內有複雜的計算,或是版面配置樹狀結構過深,需要頻繁重新計算。
處理輸入內容和動畫 代表評估 Animation API 呼叫或處理指標輸入及其回呼所花費的時間。如果這個區隔偏大,可能表示自訂動畫或輸入回呼花費太多處理時間。捲動 LazyColumnLazyRow 時的狀態計算和資料對應通常也會發生在這個區隔,是導致這個區隔速度變慢更常見的原因。
其他時間/VSync 延遲 代表應用程式在兩個連續影格之間執行作業花費的時間。這可能表示 UI 執行緒中發生太多處理程序,以致可能會卸載到其他執行緒。

表 1. Android 6.0 以上版本的元件長條。

如要進一步瞭解如何解讀剖析工具提供的資訊,請參閱「使用剖析 GPU 轉譯工具進行分析」一文。