The Android Dynamic Performance Framework (ADPF) provides developers with more device information, enabling them to control performance stability and resource usage throughout the app lifecycle. Thermal information for mobile devices is crucial, as developers previously had to infer device heat through FPS and battery consumption. With real-time thermal details, developers can proactively adjust app content to slow heat accumulation before the battery overheats and the system passively throttles performance. Earlier this year, Google released ADPF's Unreal Plugins on GitHub, allowing developers to instantly enable the features provided by ADPF. Once successfully installed, the app will, by default, call the function SetQualityLevels() in Unreal based on thermal indicators to switch scalability levels, dynamically changing the app's graphics settings to match the various levels set by developers during runtime.
Figure 1: The indoor scene Tree Hollow and the outdoor scene Forest of Mori
Mori is the in-house demo project showcasing the capabilities and features of the latest Immortalis GPU, where a Siberian flying squirrel runs and glides through the forest. The project is developed using Unreal Engine 5.3. The game starts with the flying squirrel resting in a tree hollow, with Lumen simulating global illumination to render realistic light and shadow changes. After clicking start, the squirrel enters the detailed coniferous forest with rich foliage and terrain, where players will search for hidden treasures. The forest scene displays PBR materials and millions of triangles on mobile devices through Vulkan Shader Model 5, and high-quality motion blur enhances the graphics to achieve console quality.
The game has four graphics quality levels: Epic, High, Medium, and Low. Various graphical parameters are set according to these levels, such as Foliage, View Distance, Shadow, Post Process, and Texture. The corresponding visual performance for each setting is shown in the following diagram.
Figure 2: The scalability of four graphics quality levels of Mori.
You can observe that Epic has a noticeable Depth of Field effect. When lowered to High, the bush on the right shows Level of Details adjustments. At Medium, the shadows are rougher, and the screen percentage causes aliasing. Low settings result in a significant decline in lighting, foliage, and clarity. Overall, it is preferable to keep the graphics quality at Medium or above so that players can enjoy the game without compromising the visual experience.
During 30 minutes of gameplay testing on the Vivo X90S and X100, players did not adjust the graphics settings and experienced the game entirely on Epic quality. As shown in the chart, the Headroom accumulates quickly, and the Frame Rate fluctuates significantly. The phone will overheat after 5 minutes and automatically throttle the frequency, causing the Frame Rate to drop. After 10 minutes, the Headroom accumulates to over 90%, triggering another frequency reduction and Frame Rate drop. Figure 3: Performance and device status chart before applying ADPF
After installing and enabling ADPF, the game will switch graphics settings based on the default Headroom scale. In the Epic setting, shadow texture size, DistanceScale, and Quality are all set to the highest values, as are PostProcess's ScreenPercentage and BloomQuality. In the High and Medium settings, shadow texture sizes are halved, Quality decreases sequentially, PostProcess's ScreenPercentage drops to 80 and 60, respectively, and BloomQuality decreases accordingly. The Low setting reduces everything to the minimum, with the shadow's MaxResolution set to 512 and DistanceScale halved. PostProcess's ScreenPercentage drops to 50, BloomQuality is set to 1, and everything else remains at Unreal's default settings.
As shown in the chart, the game's Headroom significantly stabilizes after automatically adjusting the graphics settings, with the X100 maintaining 60 FPS and the X90S around 55 FPS. However, upon closer inspection, it becomes apparent that the game quickly switches to the lowest quality settings to maintain FPS and manage heat. Although this maintains good performance, prolonged use of Low-quality settings is not ideal.
Figure 4: Performance and device status chart after applying ADPF
We noticed that the default Headroom scale value in the Plugins switches graphics settings immediately when it exceeds or falls below the threshold. This can lead to visual flickering as the graphics quality may be quickly increased after a successful cooldown following a quality reduction. Therefore, we moved the switching logic to control by the game layer, made the scale value adjustable, and ensured that heating and cooling do not share the same value, allowing enough time for quality reduction to impact the temperature.
Figure 5: The UI for integrating ADPF in Mori
In addition to the adjustments mentioned above, developers can not only modify parameters in the AndroidScalability.ini file but also add callbacks for graphics settings switching in the game layer. This allows for additional control through console commands, such as adjusting foliage.MinLOD, Cull Distance, Max Draw Distance, FPS locking, and more.
Table 1: Recommended advanced settings by graphics level
Figure 6: Example of advanced settings for each graphics level in Blueprint
As shown in the chart, with the added detailed controls maintaining visual quality, graphics settings are only reduced to a maximum of Medium. Performance and temperature are also stabilized, with a fixed framerate of 60 FPS for Epic settings, 45 FPS for High settings, and 30 FPS for Medium and lower settings.
Figure 7: Performance and device status chart after applying ADPF with additional configurations
The ADPF effectively helps maintain a better gaming experience by allowing developers to finely adjust and control the graphics quality based on the phone's condition. It prevents the phone from overheating and addresses battery consumption, ensuring the entire process is visually pleasing without draining the player's battery. By enabling ADPF, we can see that the final battery discharge curves of the Vivo X90S and Vivo X100 show a slower decline, indicating improved power consumption. We recommend that developers try this painless and quick integration process themselves, as it takes only a short amount of time to significantly improve game quality. Resources: