Wuthering Waves は、Kuro Games が開発した高品質のアクション RPG ゲームです。長時間のゲーム セッションでプレミアムなユーザー エクスペリエンスを持続的に提供するには、消費電力を最適化することが非常に重要です。
Android Studio では、Hedgehog(2023.1.1)から Power Profiler が導入されました。これにより、デベロッパーは On Device Power Rails Monitor(ODPM)に基づいて消費電力データを把握できます。
Android Studio の電力プロファイリング機能を使用すると、Android アプリの機能の消費電力を効果的に A/B テストすることもできます(下記を参照)。
Ultimate Guitar の取り組み
Kuro Games はまず、Android Studio Power Profiler を使用して、ゲームの動作がデバイスの消費電力に与える影響を把握しました。この経験から、Perfetto と ODPM に基づいてカスタマイズされたツールを開発し、次の機能強化を組み込みました。
- カスタマイズされたビュー - デベロッパーは電源レールをフィルタし、柔軟な期間を事前設定できます。
- メンテナンスの改善 - デベロッパーは、カスタマイズした QA システムに消費電力データをアップロードし、ゲームのバージョン間でデータを比較できます。
ODPM データを処理する
ODPM データにアクセスするために、Kuro Games は Perfetto Trace Processor(Python)Metric API を使用して、Pertetto 指標プロトコルで AndroidPowerRails
として定義されている android_powerrails
指標から 30 秒間のセッションの avg_used_power_mw data
を次の形式で処理しました。
電源レール | グラフィックの品質 | FPS | 明るさ | 平均消費電力 | 割合(レールごと / 合計) |
---|---|---|---|---|---|
power.rail.cpu.big | 高 | 30 | 低 | 474.158mW | 14.70% |
power.rail.cpu.mid | 高 | 30 | 低 | 470.916mW | 14.60% |
power.rail.cpu.little | 高 | 30 | 低 | 438.662mW | 13.60% |
power.rail.gpu | 高 | 30 | 低 | 346.761mW | 10.70% |
… | ... | ... | ... | ... | … |
消費電力の高い電源レールを特定する
各電源レールには標準値はありません。消費電力の多い電源レールを特定するため、Kuro Games は、アイドル状態、実行、戦闘など、さまざまなテストケースを使用して A/B テストを作成しました。明らかに高い値を持つ特定の電源レールは、同じ電源レールの値を比較することで特定できます。さまざまなテストケースでの動作の違いを比較することで、消費電力の問題の根本原因を徐々に特定できます。
最適化
ODPM データを使用すると、Kuro Games は各最適化シナリオの改善を測定できます。
- CPU コアのスケジューリング戦略を変更し、さまざまなスレッドの優先度を調整して、大きなコアのワークロードを削減する
- PSO(パイプライン ステート オブジェクト)を事前にコンパイルして、CPU のランタイム シェーダーのコンパイル ワークロードを削減する
- PVS(潜在的に可視セット)の除去を実装して GPU レンダリング ワークロードを削減する
- オフライン シャドウ オクルージョン カリングをベイクして GPU レンダリング ワークロードを削減
同じ再現可能な条件でテスト結果を比較するため、Kuro Games は、同じ 3D シーンとカメラの視点を使用して、同じ時間の ODPM データをテストケースで取得しました。
結果
Kuro Games は、ODPM と電力プロファイリングのデータを利用して、総消費電力を 9.68% 削減しました。9 月のリリース(バージョン 0904)では 3, 233 mW だった消費電力が、11 月のリリース(バージョン 1.4 最終版)では 2,920 mW になりました。次の図は、FPS とグラフィックの設定が一定の場合のこの電力削減について詳しく示しています。
現在、ODPM データは Google Pixel 6 以降のデバイスでのみ利用できます。ただし、CPU 使用率、GPU 使用率、Batterystats などの他の指標を使用して、すべての Android デバイスで改善を確認できます。たとえば、Kuro Games は Oppo Reno 5 の同じシーンで、GPU 使用量が全体で 9.6% 減少したことを確認しています。
始める
高度なユースケースの場合は、Power Profiler または Perfetto Power Rails データから始めることができます。
ODPM 電源レールの名前はデバイス固有です。レール名は「S2S_VDD_G3D」などです。対応する電力モニタ データを解釈するには、デバイスのハードウェアに関する特定の知識が必要です。Android API レベル 35 以降では、getSupportedPowerMonitors
の PowerMonitor
を使用できます。PowerMonitor を使用すると、人間が読めるラベルと、各 OEM によって設定された未加工の電源レール名のマッピングを取得できます。
ODPM のないデバイスの改善を確認するには、CPU クロック、GPU クロック、メモリ帯域幅の推定値を消費電力の代用として使用できます。