速度が遅いセッション

「速度が遅いセッション」は、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 はモニタリングを開始するだけです。 フレームレートを測定することもできます。

詳しくは、ヘルプセンターをご覧ください 見てみましょう。

遅いフレームと遅いフレームの数を示す円グラフのようなグラフィック。
図 1. Android Vitals の低速なセッション。
で確認できます。

FPS の測定方法と遅いフレームの検出方法

Android の dumpsys surfaceflinger timestats コマンドは、平均 FPS と 実行されるすべてのレイヤのタイミング ヒストグラムを表示から表示 表示されます。フレームの現在から現在までの時間は、 描画されている現在のフレームと前のフレーム。こちらの このコマンドを使用してゲームの FPS を収集する手順:

  1. enable フラグと clear フラグを指定してコマンドを実行し、キャプチャを開始します。 含まれます

    adb shell dumpsys SurfaceFlinger --timestats -clear -enable
    
  2. ゲームが十分な時間プレイされたら、次のコマンドを再度実行します。 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
    ...
    
  3. すべての情報を収集したら、 disable フラグを使用します。

    adb shell dumpsys SurfaceFlinger --timestats -disable
    

フレームが遅い原因と解決策

画面上にフレームが表示される、または長時間レンダリングされる理由はさまざまです 開発者のターゲットより大きくなりますゲームが CPU/GPU の制約を受ける可能性があります。または デバイスが過熱しており、温度が抑制されている状態になっている。または ゲームのフレームレートとデバイスのディスプレイが一致しない リフレッシュ レート

Android Frame Pacing(Swappy)を使用します。 VulkanADPF を使って、 ゲームのパフォーマンスの改善にお役立てください

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 の設定 >解決策と提示:

プロジェクト設定のダイアログ。
図 2. Unity Engine で Frame Pacing を有効にする。

または、ロジックコードで Optimized Frame Pacing オプションをプログラマティックに有効にして、Unity が均等に フレームを分配してフレームレートのばらつきを抑えることで、ゲームプレイをスムーズにします。

Unreal ゲームエンジンで Swappy を使用する方法

Unreal 4.25 以降では、Android Frame Pacing LibraryAndroid Game Development KitMobile 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

プロジェクト設定のダイアログ。
図 3. Unity Auto Graphics API を有効にします。

または、Auto Graphics API を無効にして、Vulkan を手動で有効にすることもできます。 グラフィック API リストで Vulkan を最優先にします。もし Unity 2021.1 以前のバージョンを使用している場合、これが Vulkan を使用する唯一の方法です。

プロジェクト設定のダイアログ。
図 4. Unity のメイン グラフィック API として、Vulkan を手動で選択します。

VkQuality Unity エンジン プラグインを使用する ゲームで使用するグラフィック API の起動時の推奨事項を 特定のデバイスでのみです。

Unreal ゲームエンジンで Vulkan を使用する方法

Vulkan Graphics API を有効にするには、[プロジェクト設定] >プラットフォーム > Android >ビルドして、[Support Vulkan] を選択します。[サポート VulkanOpenGL ES3.2 のサポートをサポートしているため、Unreal はデフォルトで Vulkan を使用します。デバイスが Vulkan をサポートしていない場合、Unreal は OpenGL ES 3.2 にフォールバックします。

プロジェクト設定のダイアログ。
図 5. Unreal Engine で Vulkan を有効にする。

動作が悪いことがわかっている特定の 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 を実装する手順をご案内します。

プロジェクト設定のダイアログ。
図 6. Unity Engine に ADPF を統合する。

Unreal ゲームエンジンで ADPF を使用する方法

プロジェクト設定のダイアログ。
図 7. ADPF を Unreal Engine に統合する。
  1. プラグインをダウンロードする
  2. プラグインをプロジェクトのプラグイン フォルダにコピーする
  3. Unreal エディタで ADPF Unreal Engine プラグインを有効にする
  4. Unreal エディタを再起動する
  5. ゲームをビルドして料理する

Android Dynamic Performance Framework(ADPF)プラグイン Unreal Engine は、 安定したパフォーマンスを確保し サーマルスロットリングを 防止します プラグインをダウンロードする 使用できます。このプラグインは、 Unreal コンソール値