Android Dynamic Performance Framework(ADPF)は、アプリケーションのパフォーマンスを最適化したいデベロッパー向けの Google の強力なツールです。ADPF は、サーマル API を介してデバイスの熱状態に関するリアルタイム情報を提供します。この情報は、アプリのグラフィック設定の調整に使用されます。
研究目的で、Arm は Unreal Engine と ADPF を使用してデモを開発し、ADPF を使用してゲームのパフォーマンスを最適化する方法を調査しました。
ADPF は熱ステータスをモニタリングし、それに応じてゲームエンジンでグラフィック品質を調整します。
デベロッパーを念頭に置いた目標は、ゲームプレイ エクスペリエンスとデバイスの電力消費に影響を与えることなく、ユーザーがゲームを長時間プレイできるようにすることです。
始める前に
デモを詳しく見る前に、ADPF に関する Google の公式ドキュメントをご確認ください。このドキュメントは、ADPF の使用方法に関する詳細な分析情報とガイダンスを提供する貴重なリソースです。
ただし、カスタマイズ可能な学習を希望される場合は、ADPF サンプル リポジトリに、Android アプリに ADPF を実装する実用的な例が含まれています。
グラフィック設定の調整
Unreal Engine のコンテキストでは、パフォーマンスを維持するためにグラフィック設定を動的に調整できます。
ADPF の Thermal State モニターと Thermal Headroom API を使用して、サーマル スロットリングをモニタリングしました。デバイスがスロットリングを開始したら、シャドウの品質、反射の品質、テクスチャの品質などの画質設定を調整できます。
Unreal Engine の次のグラフィック品質設定は、さまざまな設定を変更するために使用されます。
- ViewDistanceQuality
- ShadowQuality
- GlobalIlluminationQuality
- ReflectionQuality
- AntiAliasingQuality
- TextureQuality
- VisualEffectQuality
- PostProcessingQuality
- FoliageQuality
- ShadingQuality
- OverallScalabilityLevel
実世界の脅威に対するテスト


Arm は独自のデモゲームを作成しており、モバイル グラフィックスとゲーム技術の研究に使用しています。今年は、そのうちの 1 つである SteelArms デモで ADPF をテストしました。
SteelArms には、さまざまなレベルのグラフィック インテンシティと、かなりの CPU ワークロードがあります。最新のモバイルゲームのように構築されているため、最新のスマートフォンでゲームの動作をモデル化できます。また、Arm ベースのモバイル デバイス上のゲームでさまざまなテクノロジーがどのように機能するかをテストすることもできます。
結果


上の画像は、ADPF が有効になってグラフィック設定が調整されたときの、最高品質(シネマティック)と最低品質(低)の違いを示しています。この変化は段階的であり、ゲームプレイ中にユーザーが気付くことはありません。

左側(青いロボット)に最高のグラフィック設定、右側(赤いロボット)に最低のグラフィック設定を表示した分割画面ビュー。


上の図 3 と 4 は、ロボットの同じビューを並べて示しています。よく見ると、ADPF を使用して調整されたグラフィック設定が表示されています。リングの床、ロボットの肩、リングロープ、観客に注目してください。いずれも、ADPF を使用したため、品質が若干低下しているようです。
スロットリングが差し迫っている場合、SteelArms デモではこれらの効果がスケールダウンされました。ポスト処理や視覚効果におけるこのような小さな低下は、見つけにくいものです。また、通常、ユーザーは再生中にそれらに気付くことはありません。つまり、ゲームプレイ エクスペリエンスを損なうことなく、ゲームのビジュアル エクスペリエンスのほとんどを維持できます。ゲームの電力パフォーマンスとデバイスのバッテリー駆動時間を維持しながら、これらすべてを行うことができます。
前述のように、デモ用に、品質設定が最も高い画像と最も低い画像を比較しています。そのため、よく見ると違いがわかることがあります。ただし、ゲームプレイ中にダウンスケールしても、安定したゲームプレイ エクスペリエンスを維持しながら、ユーザーにはほとんど気付かれません。
結果




デバイスが過熱せず、サーマル ヘッドルームが 1.0 以内に収まります。
消費電力

ADPF の結果
ADPF をオンとオフにした結果は、前述の図で確認できます。ゲームのフレームレートとコアの消費電力に違いがあることを示しています。ADPF をオンにすると、フレームレートが最大 57% 向上します。ADPF がオフの場合、GPU は大量の電力を消費します。大きな CPU コアでは、GPU ワークロードと一致する電力スパイクが発生します。処理量に追いつくためです。ADPF がオンの場合、大きな CPU コアはスロットリングに応答し、デバイス内のすべてのコアの全体的な消費電力を削減します。
まとめ
ADPF を使用すると、ゲームの消費電力を大幅に削減できます。最終的には、ゲーマーのプレイ時間が長くなり、バッテリー駆動時間が長くなり、使用しているデバイスの温度が低下します。デベロッパーの観点から見ると、ADPF はゲームの正しいフレームレートを維持します。画質設定を柔軟にスケールダウンしながら、優れたゲームプレイ エクスペリエンスをユーザーに提供できます。
ADPF は、新しいデバイスと古いデバイスの両方でメリットがあります。これにより、追加の最適化作業を行わなくても、以前の世代のデバイスでゲームを高い基準で実行できます。