アセットローディングメトリクス
Monitor asset loading at runtime.
読み終わるまでの所要時間 11 分最終更新 1ヶ月前
AsyncReadManagerMetrics クラスを使用して、ランタイムのアセットのロードとファイル読み込みのパフォーマンスを監視します。このクラスは、AsyncReadManager によって管理されるすべてのファイル読み込み操作に関するデータを記録します。
Unity エンジンは、ランタイムのほとんどのファイル読み込みに AsyncReadManager を使用します。AsyncReadManager で読み込まれるファイルには、アセットバンドル、Addressables、リソースなどがあります。さらに、AsyncReadManager.Read を使用してスクリプトからファイルをロードできます。
AsyncReadManagerMetrics クラスを使用すると、メトリクスの収集を有効にして、記録されたメトリクスデータを取得することができます。また、記録されたデータをフィルタリングしたり、要約したりして分析に役立てることができます。このメトリクス情報は、アセットローディングに関する問題領域の特定や、変更がアセットローディングのパフォーマンスに与える影響の計測に役立ちます。
AsyncReadManagerMetrics クラスは開発ビルドで のみ 使用できます。AsyncReadManagerMetrics API の呼び出しは、 シンボルを使用して #if プリプロセッサーディレクティブ内で保護する必要があります。 シンボルは開発ビルドに対してのみ定義されるため、メトリクスが使用できないビルドでもスクリプトをコンパイルできます。後方互換性のために、 シンボルを使用して以前のバージョンの Unity からメトリクスコードを削除することもできます。 例:
ENABLE_PROFILERENABLE_PROFILERUNITY_2020_2_OR_NEWER#if ENABLE_PROFILER && UNITY_2020_2_OR_NEWER AsyncReadManagerMetrics.StartCollectingMetrics();#endif
メトリクス収集を可能にする
データが記録される前に、メトリクス収集を有効にする必要があります。以下のいずれかの方法で、メトリクス収集を有効にします。
- AsyncReadManagerMetrics.StartCollectingMetrics を呼び出す。
- アプリケーションの起動時に -enable-file-read-metrics をコマンドライン引数として渡す。
ノート: Unity エディターアプリケーションの起動時に -enable-file-read-metrics を渡すことで、再生モードに入る際に収集を有効にすることができます。ただし、エディターはテクスチャなどの一部のカテゴリーのアセットをエディター自体でロードし、再生モードに入るときにはリロードしません。ファイル IO メトリクスの全体像を把握するには、アプリケーションの開発ビルドからデータを収集する必要があります。
メトリックスデータの取得
AsyncReadManagerMetrics クラスによって収集されたメトリクスは GetMetrics を呼び出して取得します。この関数に AsyncReadManagerMetrics.Flags を渡し、取得後にメトリクスを消去するかどうかを指定します。メトリクスを消去すると、保存されたメトリクスから完了したすべての読み込み (キャンセルされた読み込みと失敗した読み込みを含む) が削除されます。消去しても、キューに入っている操作や処理中の操作には影響しません。操作が未完了のメトリクスは、操作の完了後に GetMetrics を再度呼び出すことでアクセスできます。定期的にメトリクスを消去することで、同じデータの再読み込みを回避し、システムのデータオーバーヘッドも削減できます。
#if ENABLE_PROFILER && UNITY_2020_2_OR_NEWER AsyncReadManagerRequestMetric[] metrics = AsyncReadManagerMetrics.GetMetrics(AsyncReadManagerMetrics.Flags.ClearOnRead);#endif
可能な場合、メトリクスデータには読み込み操作に関するコンテキスト情報が加えられます。この情報には、読み込みをリクエストした AssetLoadingSubsystem、AssetName、AssetTypeID が含まれます。AsyncReadManager がこの情報にアクセスできない場合、これらのメトリクスフィールドの値は、それぞれ Other、空白、0 です。
__注意__現在サポートされている Asset TypeID は以下の表のとおりです。その他の TypeID については、YAML Class ID Reference を参照してください。
TypeID | 型名 |
|---|---|
| 28 | Texture2D |
| 117 | Texture3D |
| 89 | CubeMap |
| 43 | Mesh |
サマリーデータの取得
AsyncReadManager メトリクスのサマリー (要約) は、以下のメソッドで取得できます。
- GetCurrentSummaryMetrics -- 保存されたメトリクスを最後に消去したとき以降に収集されたすべてのメトリクスのサマリーを返します。
- GetSummaryOfMetrics -- GetMetrics を呼び出すことで取得できる AsyncReadManagerRequestMetric の配列でメトリクスのサマリーを返します。
例:
#if ENABLE_PROFILER && UNITY_2020_2_OR_NEWER AsyncReadManagerSummaryMetrics summaryOfMetrics = AsyncReadManagerMetrics.GetCurrentSummaryMetrics(AsyncReadManagerMetrics.Flags.ClearOnRead);#endif
または
#if ENABLE_PROFILER && UNITY_2020_2_OR_NEWER AsyncReadManagerRequestMetric[] metrics = AsyncReadManagerMetrics.GetMetrics(AsyncReadManagerMetrics.Flags.ClearOnRead); AsyncReadManagerSummaryMetrics summaryOfMetrics = AsyncReadManagerMetrics.GetSummaryOfMetrics(metrics);#endif
メトリクスのサマリーデータには、以下のような統計情報が含まれます。
- 平均帯域幅
- 平均読み込みサイズ
- ロード時間が最も長いアセットタイプ
- 読み込み数
- リクエスト数
- 読み込んだバイトの総数
(完全なリストについては、AsyncReadManagerSummaryMetrics を参照してください)。
デフォルトでは、キューに入っているものや進行中のものも含めて、すべての読み込み操作に関する統計を要約します。フィルターを使用して、特に関心のある操作のサマリーに制限することができます。例えば、フィルターを使って、完了したテクスチャアセットの読み込み操作に制限して統計を要約することができます。
__注意__サマリー統計を計算するには処理リソースが必要です。これらの計算が記録中の計測値を変更しないようにするためには、まずメトリクスを収集し、分析操作の終了後にサマリーを取得します。
サマリーフィルター
AsyncReadManagerMetricsFilters をこれらのメソッドのいずれかとともに使用すると、要約するデータの種類を指定できます。フィルターに一致しないメトリクスは、サマリーから除外されます。以下のカテゴリでフィルタリングできます。
- アセットタイプ (YAML ID)
- 処理状態 (読み込み操作がキューの状態か、読み込み中か、完了しているかなど)
- 読み込みタイプ (非同期または同期)
- 優先度 (高または低)
- サブシステム (AssetLoadingSubsystem)
同じフィルターに複数のカテゴリを設定できます。読み込み操作がすべてのカテゴリに一致しないと、その操作のメトリクスはサマリーに加えられません。例えば、フィルターの ProcessingState と Subsystem の両方に値を指定して、指定されたサブシステムによって開始される、指定された処理状態の操作のみを要約することができます。