ドキュメント

Unity Engine

Unity Engine

コードへのプロファイラーマーカーの追加

Add profiler markers to mark up areas of your code.
読み終わるまでの所要時間 9 分最終更新 1ヶ月前

コードに プロファイラーマーカー を追加して、Profiler ウィンドウ の CPU Usage モジュール の Timeline ビュー と Hierarchy ビュー に、
ProfilerMarker.Begin
、
ProfilerMarker.End
、または
ProfilerMarker.Auto
が生成するサンプルを表示します。

Timeline ビューのメタデータを持つプロファイラーサンプル

*

Hierarchy ビューのメタデータを持つプロファイラーサンプル

前提条件

一部の例では Profiling Core パッケージ を使用します。これは開始前にインストールする必要があります。Unity Profiling Core パッケージはコアパッケージであるため、Package Manager UI では検出できません。パッケージをインストールするには、以下のいずれかを実行します。

コードのマークアップ

ProfilerMarker
API
を使用するには、プロファイルするコードを
ProfilerMarker.Begin
呼び出しと
ProfilerMarker.End
呼び出しの間に配置します。以下に例を示します。
using UnityEngine;using Unity.Profiling;public class ProfilerMarkerExample{ static readonly ProfilerMarker k_MyCodeMarker = new ProfilerMarker("My Code"); void Update() { k_MyCodeMarker.Begin(); Debug.Log("This code is being profiled"); k_MyCodeMarker.End(); }}
**注:**プロファイラーマーカーの名前に
/
文字を使用しないでください。Profiler ウィンドウが CPU Profiler モジュールのチャートビューでマーカーを強調表示できなくなります。
End
が呼び出される前に、
Begin
呼び出しと
End
呼び出しの間のコードがスコープ外に出ないようにしてください。
End
が呼び出される前にコードがスコープを出ると、エラーメッセージがコンソールに記録されます。return のたびに
End
を呼び出す必要がないようにするには、
Auto
を使用して、サンプルがスコープから出るときに自動的に終了するようにします。詳細については、このドキュメントの プロファイラーマーカーのコードブロックの自動終了 セクションを参照してください。
Unity は、プロファイルされたコードブロックの実行時間を記録してプロファイラーに報告し、Deep Profiling を使用せずに CPU Profiler モジュール に表示します。以下のように、CPU Profiler モジュールの Hierarchy ビュー に新しいエントリーとして表示されます。

Profiler ウィンドウのプロファイラーサンプル

プロファイラーマーカーのコードブロックの自動終了

ProfilerMarker.Auto
を使用して、コードブロックの終了時に
ProfilerMarker.End
が自動的に呼び出されるようにします。以下の呼び出しは同等です。
using Unity.Profiling;public class MySystemClass{ static readonly ProfilerMarker k_UpdatePerfMarker = new ProfilerMarker("MySystem.Update"); public void Update() { k_UpdatePerfMarker.Begin(); // ... k_UpdatePerfMarker.End(); using (k_UpdatePerfMarker.Auto()) { // ... } }}
Begin()
呼び出しと
End()
呼び出しとは異なり、Unity は開発以外の (リリース) ビルドで
ProfilerMarker.Auto
呼び出しをコンパイルで除外できません。ただし、代わりに null を返すため、オーバーヘッドは最小限になります。
ProfilerMarker.Auto
を
using var
とともに使用することもできます。現在のスコープが終了すると、
End
呼び出しが自動的に発生します。このアプローチでは、コードに
ProfilerMarker
インスタンスを追加するときに変更する必要のあるコードの量が最小限に抑えられます。
using Unity.Profiling;public class MySystemClass{ static readonly ProfilerMarker k_UpdatePerfMarker = new ProfilerMarker("MySystem.Update"); public void Update() { using var _ = k_UpdatePerfMarker.Auto(); // ... }}
注:
ProfilerMarker
でマークアップされたエリア内の async
await
呼び出しおよび
yield
呼び出しはサポートされておらず、
Auto
を使用している場合でもコンソールにエラーメッセージが記録されます。

サンプルへの整数または浮動小数点パラメーターの追加

コードサンプルにコンテキストを追加して、コードが長時間実行される特定の条件を特定する必要がある場合があります。
例えば、システムがオブジェクトのシミュレーションを実行する場合、プロファイラーサンプルでオブジェクトの数を渡すことができます。プロファイラーが長いサンプル継続時間とともに異常な数値を返す場合は、シミュレーションに別のスレッドを使用するか、CPU 処理を複数のフレームに分割するか (タイムスライス)、アプリケーションの設計を調整してフレーム落ちを防ぐ必要がある可能性があります。
ProfilerMarker
は、
ProfilerMarker<TP1>
、
ProfilerMarker<TP1, TP2>
、
ProfilerMarker<TP1, TP2, TP3>
の 3 つの数値パラメーターまでサポートします。
using Unity.Profiling;public class MySystemClass{ static readonly ProfilerMarker<int> k_PreparePerfMarker = new ProfilerMarker<int>("MySystem.Prepare", "Objects Count"); static readonly ProfilerMarker<float> k_SimulatePerfMarker = new ProfilerMarker<float>(ProfilerCategory.Scripts, "MySystem.Simulate", "Objects Density"); public void Update(int objectsCount) { k_PreparePerfMarker.Begin(objectsCount); // ... k_PreparePerfMarker.End(); using (k_SimulatePerfMarker.Auto(objectsCount * 1.0f)) { // ... } }}

サンプルへの文字列パラメーターの追加

ProfilerMarker
API では、プロファイラーマーカーに文字列パラメーターを追加できます。文字列パラメーターは、アプリケーションがレベルまたはデータのファイルをロードするときにレベルまたはファイルの名前を表示したい場合に便利です。
ProfilerMarkerExtension
メソッドを使用して、プロファイラーサンプルとともに文字列パラメーターを渡します。
using Unity.Profiling;public class MySystemClass{ static readonly ProfilerMarker k_PreparePerfMarker = new ProfilerMarker("MySystem.Prepare"); public void Prepare(string path) { k_PreparePerfMarker.Begin(path); // ... k_PreparePerfMarker.End(); }}

追加リソース