《Wuthering Waves》是一款由 Kuro Games 開發的高保真動作角色扮演遊戲。如要持續提供優質的長時間遊戲體驗,就必須最佳化耗電量。
Android Studio 在 Hedgehog (2023.1.1) 中推出了電源分析器,可協助開發人員瞭解裝置端電源軌監控器 (ODPM) 的耗電量資料。
透過 Android Studio 的電源分析功能,您也可以有效地針對 Android 應用程式功能進行 A/B 測試,以測試電力消耗量 (如下所示)。
具體措施
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 和圖形設定一致的情況下,這項功耗降低功能的運作方式。
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 時脈和記憶體頻寬預估值,做為電源消耗的代理值。