ゲームモード介入

ゲームモード介入は、デベロッパーによってアップデートされなくなったゲームのパフォーマンスを改善するために相手先ブランド製品製造企業(OEM)が設定するゲーム固有の最適化です。例:

  • WindowManager バックバッファをサイズ変更する。
  • ネイティブ GLES ドライバの代わりに ANGLE を使用する。

ゲームで Game Mode API をサポートして管理することで、OEM によって提供されるゲームモード介入をオーバーライドできます。

Game Mode API と介入は、次のデバイスで使用できます。

各ゲームは次のことができます。

  • Game Mode API の動作を実装します。
  • OEM にゲームモード介入の設定を提案する、または
  • ゲームモード介入を明示的にオプトアウトする。

背景

このセクションでは、ゲームモードの介入の内容と、各モードに合わせてゲームを最適化する方法について説明します。

WindowManager バックバッファのサイズ変更

WindowManager バックバッファのサイズを変更する介入により、デバイスの GPU 負荷を軽減できます。また、目標フレームレートでゲームがペーシングされるときのバッテリー消費量も削減できます。

サイズ変更を有効にすると、GPU の電力消費が最大 30%、システム全体の電力使用量が 10% 削減されます。削減結果は、使用するデバイス、環境条件、およびその他の要因(同時処理など)によって異なります。

ペーシングされていない GPU バウンドのゲームは、GPU の負荷が軽減されるとフレームレートが高くなる可能性があります。

不均一なフレームレートはユーザーが感じるパフォーマンスに大きく影響するため、すべてのゲームを十分にペーシングすることを強くおすすめします。

FPS スロットリング

Android FPS スロットリングは、ゲームモード介入の一つで、ゲームをより安定したフレームレートで実行し、バッテリーの消費を抑えることができます。この介入は Android 13 以降で利用できます。詳細については、FPS スロットリングの概要をご覧ください。

ゲームモード介入を評価する

このセクションでは、adb コマンドを使用します。

モードをセットアップする

ゲームモードの介入をテストする前に、アプリのゲームモード構成ファイルでゲームモードをオプトアウトする必要があります。そうしないと、プラットフォームはそれらをバイパスし、ゲーム内の最適化のみを優先します。

<?xml version="1.0" encoding="UTF-8"?>
<game-mode-config
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:supportsBatteryGameMode="false"
    android:supportsPerformanceGameMode="false"
/>

(省略可)既存のデバイス構成をバックアップする

Google Pixel などのデバイスでは、デバイスの構成にゲーム介入の既存の構成ファイルが存在する場合があります。次のコマンドを使用して構成をクエリできます。

adb shell device_config get game_overlay <PACKAGE_NAME>

クエリが null を返した場合は、既存の構成を無視します。それ以外の場合は、保存して、評価後にリセットします。

介入を評価する

WindowManager バックバッファのサイズを変更する介入の効果を単体で評価するには、次のコマンドを使用して、ゲームモードごとに異なる WindowManager バッファのサイズ変更値を設定します。

adb shell device_config put game_overlay <PACKAGE_NAME>
mode=2,downscaleFactor=0.9:mode=3,downscaleFactor=0.5

上記の例で、mode=2 は「パフォーマンス」、mode=3 は「バッテリー セーバー」です。downscaleFactor の値は、サイズ変更設定に適用される割合として指定されます(たとえば、0.7 は 70%、0.8 は 80%)。90%(0.9)のサイズ変更はごくわずかですが、50%(0.5)は重要です。

警告: Android 12 では、子プロセスが正確にサイズ変更されないことがあります。特に、トーストとポップアップが正しくレンダリングされることを確認します。サイズ変更の設定は 70% 以上に制限することをおすすめします。

新しいサイズ変更値を設定したら、ゲームモードを切り替えて、WindowManager バックバッファのサイズ変更介入がゲームに及ぼす影響を確認します。

adb shell cmd game mode [standard|performance|battery] <PACKAGE_NAME>

ゲームモードを選択するたびに、ゲームを再起動してください。ダウンスケーリング インターベンションを行うには、アプリの再起動が必要です。

介入をオプトアウトする

オプトアウトによって、ゲームに介入が適用されるかどうかを制御できます。介入ごとに固有のオプトアウト設定があります。

  1. ゲームモードのオプトインとオプトアウトの制御に使用される構成 XML ファイルは、介入設定にも使用されます。
<?xml version="1.0" encoding="UTF-8"?>
<game-mode-config
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:allowGameDownscaling="false"
    android:allowGameFpsOverride="false"
/>
  1. オプトアウトするゲームを再ビルドして再配信します。

デフォルトでは、相手先ブランド製品製造企業(OEM)が設定した介入が使用されます。ただし、ゲームで介入の使用を明示的にオプトアウトしている場合は使用されません。

リソース

ゲームのパフォーマンスの測定と最適化について詳しくは、以下をご覧ください。

  • System Profiler - CPU 使用量とグラフィック呼び出しを分析します。

  • Android GPU Inspector - Android 上のグラフィックをプロファイリングします。

  • Android Frame Pacing ライブラリ - OpenGL と Vulkan のゲームでスムーズなレンダリングと正確なフレーム ペーシングを実現するために利用できます。

  • Android Performance Tuner - 各種の Android デバイスで、大規模にフレームレートとグラフィックを測定し、最適化します。

  • Power Profiler - アプリが必要以上にエネルギーを消費している箇所を見つけます。