Version: Unity 6.0 (6000.0)
言語 : 日本語
コードへのプロファイリング情報の追加の概要
コードへのプロファイラーカウンターの追加

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

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

Timeline ビューのメタデータを持つプロファイラーサンプル
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 ウィンドウのプロファイラーサンプル
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.Autousing 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();
  }
}

追加リソース

コードへのプロファイリング情報の追加の概要
コードへのプロファイラーカウンターの追加