使用硬體加速功能改善錶面效能

使用標準檢視的 Wear OS 應用程式受惠於自動硬體加速圖形算繪的優勢。不過,錶面通常會使用畫布進行實作,因此不會自動執行硬體加速。

為什麼要為錶面使用經硬體加速的畫布?

在大多數情況下,使用經硬體加速的畫布時,錶面會以較高的影格速率算繪。影格速率較高時,肉眼看到的動畫和轉場效果會更順暢,從而提供更優質的使用者體驗。

使用經硬體加速的畫布時,您也可以存取更多錶面相關的 UI 效能資料。例如,只有在使用經硬體加速的畫布時,才能存取評估使用者介面效能中所述的詳細影格資訊。

我的錶面是否使用硬體加速功能?

您可以使用開發人員選項或 adb,檢查錶面是否使用硬體加速功能。

使用開發人員選項檢查

如要使用開發人員選項檢查錶面是否使用硬體加速功能,請按照下列步驟操作:

  1. 在 Wear OS 裝置上,依序前往「設定」>「開發人員選項」
  2. 啟用「針對 GPU 剖析進行偵錯」

    這個選項會在可見介面上方繪製疊加 (每個介面上一個疊加),顯示該介面各 GPU 轉譯階段花費的時間。

  3. 在裝置上返回錶面。

  4. 如果錶面使用經硬體加速的畫布,錶面的每個轉譯影格都會顯示從右到左移動的新長條。

使用 ADB 檢查

如要使用 adb 檢查錶面是否使用硬體加速功能,請按照下列步驟操作:

  1. 在 Wear OS 裝置上,將錶面變更為要測試的錶面。
  2. 讓錶面在互動模式下執行幾秒鐘。
  3. 執行下列 adb 指令,檢查錶面是否使用硬體加速功能:

    adb shell dumpsys gfxinfo [package-name]

執行指令後,會取得類似以下範例的輸出內容:

Applications Graphics Acceleration Info:
Uptime: 2239933 Realtime: 13568751

** Graphics info for pid 1100 [package-name] **

Stats since: 59875589194ns
Total frames rendered: 1213
Janky frames: 0 (0.00%)
50th percentile: 7ms
90th percentile: 18ms
95th percentile: 25ms
99th percentile: 150ms
Number Missed Vsync: 0
Number High input latency: 0
Number Slow UI thread: 0
Number Slow bitmap uploads: 0
Number Slow issue draw commands: 0
Number Frame deadline missed: 0

...

在此輸出內容範例中,請注意顯示 Total frames rendered 這一行。一般而言,如果輸出內容顯示的轉譯影格總數大於 0,就表示錶面使用加速畫布。否則,轉譯影格總數和報表中的其他影格資料通常為 0。

不過,由於 gfxinfo 是應用程式完整套件的輸出內容,除了經硬體加速的畫布外,可能會顯示某些來自其他元素的影格時間資訊,例如應用程式用於設定畫面的 Activity。為了分辨差異,請確認錶面是唯一可見的介面,然後重新執行 adb shell dumpsys gfxinfo 指令,檢查 Total frames rendered 的值是否增加。

最佳做法

採用下列最佳做法,即可確保使用者能享有最佳體驗。

盡量延長電池續航力

如果錶面含有長時間執行的動畫,使用硬體加速功能可能會大幅降低裝置的電池續航力。如果錶面嘗試在每個影格中繪圖,問題可能會更嚴重。為避免對使用者造成負面影響,請勿在錶面中長時間執行動畫。這項原則並非特別適用於使用硬體加速功能的情況,而是因為使用硬體加速功能會增加能繪製的影格數量,依循這項原則就更為重要。詳情請參閱「動畫最佳做法」。

使用支援的繪圖作業

使用硬體加速功能時,系統不支援某些繪圖作業。如要瞭解哪些是支援的作業,請參閱「硬體加速」。如果您有一小段程式碼路徑使用不支援的作業,可以建立支援點陣圖的畫布,然後使用 canvas.drawBitmap() 將點陣圖繪製到錶面的畫布上。

使用硬體加速功能時維持相容性

硬體加速功能適用於搭載 Android 9 (API 級別 28) 以上版本的 Wear OS 裝置。如要避免在不支援硬體加速的舊裝置上執行特定繪圖作業,或避免在經硬體加速的畫布上執行不支援的繪圖作業,可以檢查 Canvas.isHardwareAccelerated(),然後提供替代功能。