「速度が遅いセッション」は、Google Play Console に新たに追加された Android Vitals の指標です。低速 25% を超えるフレームで速度が低下しているセッションです。フレーム 前のフレームから 50 ミリ秒以内に応答しない場合は遅い (20 FPS に相当)。Android Vitals では、2 つ目の「Slow Sessions」も 34 ms(30 FPS に相当)を目標に設定しています。「速度が遅いセッション」を使用すると、 ゲームのフレームレートのパフォーマンスを把握できます 滑らかで滑らかな ゲームのようなものです
将来的に、Google Play は、Google Play で利用できないゲームを 20FPS を達成していますなお、Android Vitals はモニタリングを開始するだけです。 フレームレートを測定することもできます。
詳しくは、ヘルプセンターをご覧ください 見てみましょう。
![遅いフレームとそうでないフレームの数を示す円グラフのようなグラフィック。](https://android-dot-devsite-v2-prod.appspot.com/static/topic/performance/vitals/images/slow-session.png?hl=ja)
FPS の測定方法と遅いフレームの検出方法
Android の dumpsys surfaceflinger timestats
コマンドは、平均 FPS と
実行されるすべてのレイヤのタイミング ヒストグラムを表示から表示
表示されます。フレームの現在から現在までの時間は、
描画されている現在のフレームと前のフレーム。こちらの
このコマンドを使用してゲームの FPS を収集する手順:
enable
フラグとclear
フラグを指定してコマンドを実行し、キャプチャを開始します。 含まれますadb shell dumpsys SurfaceFlinger --timestats -clear -enable
ゲームが十分な時間プレイされたら、次のコマンドを再度実行します。
dump
フラグを指定して情報をダンプします。adb shell dumpsys SurfaceFlinger --timestats -dump
ダンプされた情報から、フレーム数の合計と presentToPresent ヒストグラムが SurfaceFlinger でレンダリングされたすべてのレイヤ。
layerName
に基づいてフィルタリングすることで、ゲームの該当セクションに配置するlayerName = SurfaceView[com.google.test/com.devrel.MainActivity]@0(BLAST)#132833
セッションの遅いフレームレートは、 あります。
例: 20 FPS が遅いフレームの割合 = (54 ms ~ 1,000 ms の値の合計)/ totalFrames x 100
totalFrames = 274 ... presentToPresent histogram is as below: 0ms=0 1ms=0 2ms=0 3ms=0 4ms=0 5ms=0 6ms=0 7ms=0 8ms=0 9ms=0 10ms=0 11ms=0 12ms=0 13ms=0 14ms=0 15ms=0 16ms=1 17ms=0 18ms=0 19ms=0 20ms=0 21ms=0 22ms=0 23ms=0 24ms=0 25ms=0 26ms=0 27ms=0 28ms=0 29ms=0 30ms=0 31ms=0 32ms=0 33ms=269 34ms=0 36ms=0 38ms=0 40ms=0 42ms=0 44ms=0 46ms=0 48ms=0 50ms=1 54ms=0 58ms=0 62ms=0 66ms=0 70ms=1 74ms=0 78ms=0 82ms=0 86ms=0 90ms=0 94ms=0 98ms=0 102ms=0 106ms=0 110ms=0 114ms=0 118ms=0 122ms=0 126ms=0 130ms=0 134ms=0 138ms=0 142ms=0 146ms=0 150ms=0 200ms=0 250ms=0 300ms=0 350ms=0 400ms=0 450ms=0 500ms=0 550ms=0 600ms=0 650ms=0 700ms=0 750ms=0 800ms=0 850ms=0 900ms=0 950ms=0 1000ms=0
各レイヤの平均 FPS もダンプに表示されます。
... averageFPS = 30.179 ...
すべての情報を収集したら、
disable
フラグを使用します。adb shell dumpsys SurfaceFlinger --timestats -disable
フレームが遅い原因と解決策
画面上にフレームが表示される、または長時間レンダリングされる理由はさまざまです 開発者のターゲットより大きくなりますゲームが CPU/GPU の制約を受ける可能性があります。または デバイスが過熱しており、温度が抑制されている状態になっている。または ゲームのフレームレートとデバイスのディスプレイが一致しない リフレッシュ レート。
Android Frame Pacing(Swappy)を使用します。 Vulkan、ADPF を使って、 ゲームのパフォーマンスの改善にお役立てください
Swappy とは
Swappy という名前でも知られる Android Frame Pacing ライブラリは、 AGDK ライブラリ。Swappy は OpenGL と Vulkan のゲームを支援 Android でスムーズなレンダリングと正確なフレーム ペーシングを実現する。
フレーム ペーシングとは、ゲームのロジックとレンダリング ループを、 OS のディスプレイ サブシステムと基盤となるディスプレイ ハードウェアです。Android ディスプレイ サブシステムは、視覚的なアーティファクト(テアリング)を回避するように設計されています。 ディスプレイ ハードウェアが途中で新しいフレームに切り替わったときに発生する可能性がある おすすめします。こうしたアーティファクトを回避するために、ディスプレイ サブシステムは 次のとおりです。
- 過去のフレームを内部的にバッファリングする
- 遅延しているフレーム送信を検出する
- 遅延しているフレームが検出されたときは過去のフレームの表示を繰り返す
ネイティブ プロジェクトで Swappy を使用する方法
Android Frame Pacing ライブラリを統合するには、次のガイドをご覧ください。 追加できます
Unity ゲームエンジンで Swappy を使用する方法
Unity は Android Frame Pacing をエンジンに統合しました。この機能を有効にするには、 Unity 2019.2 の [プロジェクト設定] > [フレーム ペーシングの最適化] チェックボックスを プレーヤー >Android の設定 >解決策と提示:
![プロジェクト設定のダイアログ。](https://android-dot-devsite-v2-prod.appspot.com/static/topic/performance/vitals/images/unity-frame-pacing.png?hl=ja)
または、ロジックコードで Optimized Frame Pacing オプションをプログラマティックに有効にして、Unity が均等に フレームを分配してフレームレートのばらつきを抑えることで、ゲームプレイをスムーズにします。
Unreal ゲームエンジンで Swappy を使用する方法
Unreal 4.25 以降では、Android Frame Pacing Library( Android Game Development Kit。Mobile Frame Pacing(モバイル フレーム ペーシング)の記事で、Android Frame Pacing ライブラリと、C++ コードからフレーム ペーシングを制御する方法。
Vulkan とは
Vulkan は、デバイスのグラフィック ハードウェアとゲームの間の抽象化を最小限に抑えるために設計された最新のクロス プラットフォーム 3D グラフィック API です。Vulkan は Android の主要な低レベル グラフィック API であり、OpenGL ES に代わるものです。OpenGL ES Android ではサポートされますが、有効ではなくなります 必要があります。
Vulkan には OpenGL ES に比べて次のような利点があります。
- グラフィック ドライバでの CPU オーバーヘッドが低減された、より効率的なアーキテクチャ
- CPU パフォーマンスを向上させる新しい最適化戦略
- OpenGL ES では利用できない新しいグラフィック機能(バインドレス API や レイ トレーシング
ネイティブ Android プロジェクトで Vulkan を使用する方法
Android で Vulkan を使ってみる Codelab では、設定手順を説明します。 Vulkan レンダリング パイプラインでのレンダリングと、テクスチャのある回転三角形のレンダリング 表示されます。この Codelab を使用して、ゲーム グラフィックのレンダリング方法を学習します。
Unity ゲームエンジンで Vulkan を使用する方法
Unity でデバイスの自動選択を有効にするには、次の手順に沿って構成してください Auto Graphics API。
![プロジェクト設定のダイアログ。](https://android-dot-devsite-v2-prod.appspot.com/static/topic/performance/vitals/images/unity-vulkan.png?hl=ja)
または、Auto Graphics API を無効にして、Vulkan を手動で有効にすることもできます。 グラフィック API リストで Vulkan を最優先にします。もし Unity 2021.1 以前のバージョンを使用している場合、これが Vulkan を使用する唯一の方法です。
![プロジェクト設定のダイアログ。](https://android-dot-devsite-v2-prod.appspot.com/static/topic/performance/vitals/images/unity-vulkan-2.png?hl=ja)
VkQuality Unity エンジン プラグインを使用する ゲームで使用するグラフィック API の起動時の推奨事項を 特定のデバイスでのみです。
Unreal ゲームエンジンで Vulkan を使用する方法
Vulkan Graphics API を有効にするには、[プロジェクト設定] >プラットフォーム > Android >ビルドして、[Support Vulkan] を選択します。[サポート Vulkan と OpenGL ES3.2 のサポートをサポートしているため、Unreal はデフォルトで Vulkan を使用します。デバイスが Vulkan をサポートしていない場合、Unreal は OpenGL ES 3.2 にフォールバックします。
![プロジェクト設定のダイアログ。](https://android-dot-devsite-v2-prod.appspot.com/static/topic/performance/vitals/images/unreal-vulkan.png?hl=ja)
動作が悪くなることが確認されている特定の Vulkan 機能を使用している場合
BaseDeviceProfile.ini
ファイルをカスタマイズして、
できます。デバイス プロファイルとスケーラビリティのカスタマイズに関するページ
をご覧ください。
BaseDeviceProfile.ini
をカスタマイズ。新しいデバイス ドライバは
BaseDeviceProfile.ini ファイルを更新して、
見ていきましょう。
ADPF とは
Android Dynamic Performance Framework(ADPF) 温度、CPU、GPU の動的な管理機能に基づいてゲームを最適化 。主にゲームに重点を置いていますが、 高いパフォーマンスが要求される アプリに最適です
ADPF は、ゲームや高いパフォーマンスを必要とするアプリが Android デバイスの電力システムや温度システムをより直接的に操作できるようにする API のセットです。あり これらの API を使用すると、Android システム上の動的な動作をモニタリングでき、 デバイスが過熱しないサステナブルなレベルでゲーム パフォーマンスを最適化する。
ADPF の主な機能は次のとおりです。
- Thermal API: デバイスの温度状態をモニタリングして、アプリケーションが持続不能になる前にワークロードをプロアクティブに調整できるようにします。
- CPU Performance Hint API: Android がワークロードに適したパフォーマンス設定(CPU 動作点やコアなど)を選択できるように、パフォーマンスのヒントを提供します。
- Game Mode API と Game State API: ユーザーの設定とゲーム固有の構成に基づいてパフォーマンスやバッテリー駆動時間の特性を優先することで、ゲームプレイの最適化を可能にします。
- 固定パフォーマンス モード: ベンチマーク中にデバイスで固定パフォーマンス モードを有効にすると、動的な CPU クロックによって変更されない測定値を取得できます。
- 省電力モード: パフォーマンスよりも電力効率を優先するように、Performance Hints セッションのスレッドを安全にスケジュールできることをセッションに伝えます。Android 15(API leve 35)で利用できます。
ネイティブ Android プロジェクトで ADPF を使用する方法
Codelab 適応性機能をネイティブ ゲームに統合するでは、ADPF 機能をネイティブ ゲームに統合する方法を説明しています。 自分のペースで進めることができます。Deployment の この Codelab では、次の機能を統合します。
- Thermal API: デバイスの温度状態をリッスンし、デバイスがサーマル スロットリング状態になる前に対応します。
- Game Mode API: プレーヤーの最適化設定(パフォーマンスの最大化、バッテリーの節約)を把握し、それに応じて調整します。
- Game State API: システムにゲームの状態(読み込み中、プレイ中、UI など)を通知し、それに応じてリソースを調整します(I/O、CPU、GPU のブーストなど)。
- Performance Hints API: システムにスレッドモデルとワークロードを通知して、システムがそれに応じてリソースを割り当てられるようにします。
Unity ゲームエンジンで ADPF を使用する方法
Unity の Adaptive Performance は、 モバイル デバイス向けのゲームを最適化したいと考えているゲーム デベロッパー向けのツールです。 特に多様な Android エコシステムにとって重要です。パフォーマンスの自動調整により可能になること デバイスのパフォーマンスと温度特性に合わせて調整し、 スムーズで効率的なゲーム体験を実現できます。
アダプティブ パフォーマンス Android プロバイダ Unity で ADPF を実装する手順をご案内します。
![プロジェクト設定のダイアログ。](https://android-dot-devsite-v2-prod.appspot.com/static/topic/performance/vitals/images/unity-adpf.png?hl=ja)
Unreal ゲームエンジンで ADPF を使用する方法
![プロジェクト設定のダイアログ。](https://android-dot-devsite-v2-prod.appspot.com/static/topic/performance/vitals/images/unreal-adpf.png?hl=ja)
- プラグインをダウンロードする
- プラグインをプロジェクトのプラグイン フォルダにコピーする
- Unreal エディタで ADPF Unreal Engine プラグインを有効にする
- Unreal エディタを再起動する
- ゲームをビルドして料理する
Android Dynamic Performance Framework(ADPF)プラグイン Unreal Engine は、 安定したパフォーマンスを確保し サーマルスロットリングを 防止します プラグインをダウンロードする 使用できます。このプラグインは、 Unreal コンソール値。