ゲームモード介入

ゲームモード介入は、デベロッパーが更新しなくなったゲームのパフォーマンスを改善するために相手先ブランド製品製造企業(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. ゲームモードのオプトインとオプトアウトの制御に使用するのと同じ config 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 デバイスで、大規模にフレームレートとグラフィックを測定し、最適化します。

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