Game Mode interventions are game specific optimizations set by original equipment manufacturers (OEMs) to improve the performance of games that are no longer being updated by developers. For example:
- WindowManager backbuffer resize.
- Using ANGLE instead of native GLES drivers.
Alternatively, if a game supports and manages the Game Mode API, it overrides any Game Mode interventions provided by the OEM. If it doesn't, any Game Mode interventions by OEMs persist.
The Game Mode API and interventions are available on:
This section describes what the Game Mode interventions do and how to optimize your game for each mode.
WindowManager backbuffer resizing
The WindowManager backbuffer resize intervention can reduce a device's GPU load. It can also reduce battery consumption when a game is paced at a target frame rate.
When resize is enabled, it can result in up to a 30% GPU power reduction and 10% system power reduction. The results can vary based on the device used, environmental conditions, and other factors, such as simultaneous processing.
An unpaced game that is GPU bound is likely to experience higher frame rates during reduced GPU loads. However, we strongly recommend that all games are well-paced because uneven frame rates significantly impact how users perceive performance.
Evaluate Game Mode Interventions
We will use adb command in this section.
Opt-out Game Modes before evaluation
You need to opt out Game Modes in the app's Game Mode config file before testing the Game Mode interventions, as otherwise the platform will bypass them and respect only in-game optimizations.
<?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" />
(Optional) Back up existing device config
If you are using Pixel or other devices, there may be existing game intervention config in your device config. You can query the config using the command:
adb shell device_config get game_overlay <PACKAGE_NAME>
If it returns
null, you can safely ignore it. Otherwise you can save and reset
to it after the evaluation.
To evaluate the WindowManager backbuffer resize intervention on its own, use the following command to set different WindowManager buffer resize values across game modes. Note that a 90% resize is almost negligible, whereas 50% is significant:
adb shell device_config put game_overlay <PACKAGE_NAME> mode=2,downscaleFactor=0.9:mode=3,downscaleFactor=0.5
Then you can switch between game modes to see how your game is affected by the WindowManager backbuffer resize intervention:
adb shell cmd game mode [standard|performance|battery] <PACKAGE_NAME>
Opt-out from interventions
Alternatively, you can control whether an intervention is applied to your game by opting-out. Each intervention has its own opt-out setting.
- Update the same Game Mode config XML file used to opt-in/opt-out Game Modes to also include intervention settings:
<?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" />
- Rebuild and resubmit your game to opt-out.
For more information about measuring and optimizing game performance:
System Profilers - analyze CPU usage and graphics calls.
Android GPU Inspector - profile graphics on Android.
Android Frame Pacing Library - help OpenGL and Vulkan games achieve smooth rendering and correct frame pacing.
Android Performance Tuner - measure and optimize frame rate and graphics across Android devices at scale.
Energy Profiler - find where your app uses more energy than necessary.