Kuro Games 使用 Android Studio 電源分析器和 ODPM 為《Wuthering Waves》降低 9.68% 的耗電量

《Wuthering Waves》是一款由 Kuro Games 開發的高保真動作角色扮演遊戲。如要持續提供優質的長時間遊戲體驗,就必須最佳化耗電量。

圖 1. Wuthering Waves 螢幕截圖

Android Studio 在 Hedgehog (2023.1.1) 中推出了電源分析器,可協助開發人員瞭解裝置端電源軌監控器 (ODPM) 的耗電量資料。

透過 Android Studio 的電源分析功能,您也可以有效地針對 Android 應用程式功能進行 A/B 測試,以測試電力消耗量 (如下所示)。

圖 2. Android Studio Power Profiler 螢幕截圖

具體措施

Kuro Games 一開始使用 Android Studio 電源分析器,瞭解遊戲行為如何影響裝置耗電量。這段經驗促使他們以 Perfetto 和 ODPM 為基礎,開發出自訂工具,並納入下列強化功能:

  • 自訂檢視畫面:開發人員可以篩選電源軌和預設的彈性時間範圍。
  • 改善維護作業:開發人員可以將耗電量資料上傳至自訂的 QA 系統,並比較不同遊戲版本的資料。

處理 ODPM 資料

為了存取 ODPM 資料,Kuro Games 使用 Perfetto Trace Processor (Python) Metric API 處理 android_powerrails 指標的 30 秒工作階段 avg_used_power_mw data (在 Peretto 指標 proto 中定義為 AndroidPowerRails),並轉換為下列格式:

電源軌 圖像品質 FPS 亮度 平均耗電量 百分比(每個廣告欄 / 總數)
power.rail.cpu.big 30 474.158mW 14.70%
power.rail.cpu.mid 30 470.916 毫瓦 14.60%
power.rail.cpu.little 30 438.662 毫瓦 13.60%
power.rail.gpu 30 346.761 毫瓦 10.70%
... ... ... ... ... ...

找出耗電量高的電源軌

每個電源軌都沒有標準值。為了找出耗電量高的電源軌,Kuro Games 使用不同的測試案例建立 A/B 版本測試,包括閒置、執行和戰鬥。您可以比較相同電源軌的值,找出明顯偏高的特定電源軌。比較不同測試案例的行為差異,即可逐步找出耗電問題的根本原因。

最佳化

有了 ODPM 資料,Kuro Games 就能評估每個最佳化情境的改善情形:

  • 變更 CPU 核心排程策略,並調整不同執行緒的優先順序,以減少大核心的工作負載
  • 預先編譯 PSO (管道狀態物件),以減少 CPU 的執行階段著色器編譯工作負載
  • 實作 PVS (可能可見集合) 剔除作業,以減少 GPU 算繪工作負載
  • 烘焙離線遮蔽陰影剔除,以減少 GPU 轉譯工作負載

為了比較相同且可重現的條件下測試結果,Kuro Games 使用相同的 3D 場景和相機視角,並在相同的時間長度下,擷取測試案例中的 ODPM 資料。

結果

透過利用 ODPM 和電源分析資料,Kuro Games 將總耗電量減少了 9.68%,從 9 月版本 (0904 版) 的 3233 毫瓦降至 11 月版本 (1.4 版最終版) 的 2920 毫瓦。下圖詳細說明在 FPS 和圖形設定一致的情況下,這項功耗降低功能的運作方式。

圖 3 9 月版本與 11 月版本的電源軌資料差異

ODPM 資料目前僅適用於 Pixel 6 以上機型,但透過其他指標 (包括 CPU 用量、GPU 用量和 Batterystats),所有 Android 裝置都能看到改善情形。舉例來說,Kuro Games 也發現,在 Oppo Reno 5 上,同一個場景的 GPU 用量總體減少了 9.6%。

開始使用

您可以從電源分析器開始,或使用Perfetto Power Rails 資料來進行進階用途。

ODPM 電源軌名稱會因裝置而異。軌道名稱可能會是「S2S_VDD_G3D」之類的名稱;您必須具備裝置硬體的特定知識,才能解讀相應的電源監控資料。自 Android API 級別 35 起,您可以使用 getSupportedPowerMonitors 中的 PowerMonitor。透過 PowerMonitor,您可以擷取人類可讀標籤與各個原始設備製造商 (OEM) 設定的原始電源軌名稱之間的對應關係。

如要驗證未啟用 ODPM 的裝置改善情形,您可以使用 CPU 時脈、GPU 時脈和記憶體頻寬預估值,做為電源消耗的代理值。

其他資源

提升電力效率