ゲームモード介入は、デベロッパーが更新しなくなったゲームのパフォーマンスを改善するために相手先ブランド製品製造企業(OEM)が設定するゲーム固有の最適化です。次に例を示します。
- WindowManager バックバッファのサイズ変更を使用する。
- ネイティブ GLES ドライバの代わりに ANGLE を使用する。
ゲームをサポートし、Game Mode API を管理し、OEM が提供するゲームモード介入をオーバーライドするようにできます。
Game Mode API と介入は以下で利用できます。
- [Android 12] デバイスを選択します
- Android 13 以降を搭載したデバイス
各ゲームでできること:
- 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>
ゲームモードを選択するたびに、ゲームを再開してください。ダウンスケーリング介入には、アプリの再起動が必要です。
介入をオプトアウトする
オプトアウトすることで、ゲームに介入を適用するかどうかを制御できます。介入ごとに固有のオプトアウト設定があります。
- ゲームモードのオプトインとオプトアウトの制御に使用するのと同じ 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"
/>
- オプトアウトするゲームを再ビルドして再配信します。
デフォルトでは、相手先ブランド製品製造企業(OEM)が設定した介入は、明示的にゲームからオプトアウトしない限り、使用されます。
リソース
ゲームのパフォーマンスの測定と最適化について詳しくは、以下をご覧ください。
System Profiler - CPU 使用量とグラフィック呼び出しを分析します。
Android GPU Inspector - Android 上のグラフィックをプロファイリングします。
Android Frame Pacing ライブラリ - OpenGL と Vulkan のゲームでスムーズなレンダリングと正確なフレーム ペーシングを実現するために利用できます。
Android Performance Tuner - 各種の Android デバイスで、大規模にフレームレートとグラフィックを測定し、最適化します。
Energy Profiler - アプリが必要以上にエネルギーを消費している箇所を見つけます。