Version: 2022.2
言語: 日本語
Audio プロファイラーモジュール
File Access Profiler module

CPU Usage プロファイラーモジュール

CPU Usage プロファイラーモジュールには、アプリケーションのどこで時間が費やされているかを表示するチャートが含まれています。レンダリング、スクリプト、アニメーションなど、アプリケーションが時間を費やすすべての重要な領域の概要を提供します。このセクションには以下のトピックが含まれます。

チャートのカテゴリ

CPU Usage プロファイラーモジュールのチャートは、アプリケーションのメインスレッドで費やされた時間を追跡します。タイミングは 9 のカテゴリに分けられます。チャートのカテゴリの順序を変更するには、カテゴリをチャートの凡例にドラッグアンドドロップします。カテゴリの色の付いた凡例をクリックして、表示を切り替えることもできます。

CPU Usage プロファイラーモジュール
CPU Usage プロファイラーモジュール
カテゴリ 説明
Rendering アプリケーションがグラフィックスのレンダリングに費やす時間。
Scripts アプリケーションがスクリプトの実行に費やす時間。
Physics アプリケーションが物理演算エンジンに費やす時間。
Animation アプリケーションがアプリケーション内のスキンしたメッシュレンダラー、ゲームオブジェクト、その他のコンポーネントをアニメーション化するのに費やす時間。これには、Animation コンポーネントと Animator コンポーネントが使用するシステムが計算に要した時間も含まれます。
GarbageCollector アプリケーションが ガベージコレクター の実行に費やす時間。
VSync アプリケーションが targetFrameRate または次の VBlank との同期を待機するフレームごとの時間。これは、 QualitySettings.vSyncCount 値、ターゲットフレームレート、または VSync 設定 (アプリケーションが実行されているプラットフォームのデフォルト、または最大値) に基づいています。VSync の詳細については、このページの レンダリングと VSync のサンプル を参照してください。
Global Illumination アプリケーションがライティングに費やす時間。
UI アプリケーションが UI の表示に費やす時間。
Others アプリケーションが他のカテゴリに分類されないコードに費やす時間。これには、EditorLoop すべてや、エディターで再生モードをプロファイルするときのプロファイリングオーバーヘッドなどが含まれます。

モジュールの詳細ペイン

CPU Usage プロファイラーモジュールを選択すると、その下の詳細ペインに選択したフレームのアプリケーションが使った時間の内訳が表示されます。Timeline (タイムライン) か Detailed (詳細) の 2 通りでそのデータを表示できます。表示を変更するには、詳細ペインの左上のドロップダウンを使用します (デフォルトでは Timeline に設定)。

表示 機能
Timeline フレームの長さを時間軸にして、特定のフレームの時間消費の内訳を表示します。これは、すべてのスレッドのタイミングを一度に、またそれらが発生したフレーム内の時間内で表示するために使用できる唯一の表示モードです。そのため、スレッド (例えば、メインスレッドのシステムがスケジュールした後に起動する ジョブシステム ワーカースレッド) 間でタイミングを関連付けることができます。
Hierarchy 内部の階層構造によって時間のデータをグループ化します。このオプションは、アプリケーションが呼び出した要素を、使用された時間の降順 (デフォルト) のリスト形式で表示します。また、割り当てられたスクリプトのメモリの量 (GC Alloc)、または呼び出し回数で情報を並べ替えることもできます。表の並び方を決める列を変更するには、表の列のヘッダーをクリックします。
Raw Hierarchy 時間のデータを、タイミングが発生したコールスタックと同様の階層構造で表示します。Hierarchy ビューのように各コールスタックをマージせずに、このモードでは個別にリストします。

ライブ設定

ライブ 設定は各ビューで使用可能で、Playmode またはエディターで新しいデータの記録を開始すると、モジュールの詳細ペインに現在のフレームまたは選択したフレームに関する情報が表示されます。これを有効にするには、モジュールの詳細ドロップダウンの横にある Live ボタンをクリックします。デフォルトではこの設定は無効になっており、データを記録するときモジュールの詳細ペインは空白です。ノート: この設定により、Profiler ウィンドウが再描画されるときに EditorLoop のオーバーヘッドが増加します。

Show Scripting Method Names 設定

さらに、各ビューで More Items メニュー (⋮) を選択し、 Show Full Scripting Method Names を有効にすると、すべてのスクリプトメソッドのフルバージョンの名 (Assembly::Class::MethodName) が表示されます。

A: Hierarchy ビューと Timeline ビューのスクリプトメソッド。Show Full Scripting Method Names は無効。<br/> B: Hierarchy ビューと Timeline ビューのスクリプトメソッド。Show Full Scripting Method Names は有効。
A: Hierarchy ビューと Timeline ビューのスクリプトメソッド。Show Full Scripting Method Names は無効。
B: Hierarchy ビューと Timeline ビューのスクリプトメソッド。Show Full Scripting Method Names は有効。

Timeline ビュー

Timeline ビューの CPU Usage プロファイラーモジュール
Timeline ビューの CPU Usage プロファイラーモジュール

The Timeline view is the default view for the CPU Usage Profiler module. It contains an overview of where time is spent in your application and how the timings relate to each other.

Timeline ビューでは、Hierarchy ビューとは異なり、すべてのスレッドのプロファイリングデータを独自のサブセクションに同じ時間軸に沿って表示します。Hierarchy ビューには、一度に 1 つのスレッドのみ (デフォルトではメインスレッド) のプロファイリングデータが表示されます。また、Hierarchy ビューはサンプルの継続時間のみを表示しますが、Timeline ビューは各サンプルが発生した時間を表示します。

タイムラインビューを使用して、並列実行で異なるスレッドのアクティビティが互いにどのように相関しているかを確認できます。 Job Systemのワーカースレッドなど、さまざまなスレッドをどれだけ使用しているか、どれだけ使用しているか、スレッドでの作業がどのようにキューに入れられているか、アイドル状態(Idle サンプル)か、別のスレッドや待機中の スレッドがあるかを確認できます。ジョブの終了(Wait for x サンプル)

アイテムの操作と選択

時間軸のエリアを拡大するにはマウスのスクロールホイールを使用するか、Alt キーを押しながらマウスの右ボタンを押してドラッグします。水平スクロールバーの端を使用して拡大することもできます。ズームをリセットするにはキーボードの A キーを押します。すると、フレーム時間全体が表示されます。

スレッドの下部に白い矢印が表示されている場合は、クリックしてスレッドを展開するとすべての行が表示され、再度クリックすると一番上の行のみが表示されます。スレッドを分ける線をドラッグして、表示される行の数を再調整することもできます。行をダブルクリックすると、スレッドセクションの高さがコールスタックの最大の深さに設定されます。ビューをパンするには、マウスの中ボタンを押すか、 Alt キー (macOS では Command キー) を押しながらマウスの左ボタンを押します。

スレッドのグループを折りたたんだり展開したりするには、ビューの左端にあるスレッド名の横の折りたたみ矢印をクリックします。

CPU チャートに対する項目の寄与を表示するには、下のペインで項目を選択します。プロファイラーはその寄与を強調し、チャートの残りの部分を暗くします。項目の選択を解除するには、ビュー内の任意の場所をクリックします。F キーを押すと、選択した現在のサンプルにフォーカスが移動します。何も選択しない場合は、デフォルトのズームレベルで表示されます。

項目が選択された Timeline ビューの CPU Usage モジュール
項目が選択された Timeline ビューの CPU Usage モジュール

In the image above, the tooltip on the selected sample provides further details, such as the number of instances and the total time of this sample across all threads. You can select the text within the tooltip and copy it as well as use the buttons to interact with the sample further:

Operation 説明
Copy Copy the call stack and the entire content of the tooltip to your clipboard.
Show Select this dropdown to choose from the following options:
Hierarchy Switch to this sample in Hierarchy view
Raw Hierarchy Switch to this sample in Raw Hierarchy view
Full Details for Call Stacks Unity records call stacks as a list of method pointer addresses, which it uses to display the method name, file path, and line number of the stack. Whenever only the pointer address is present, Unity ignores it to conserve screen space for the actionable items that have further information available. Enable this property to see the full list of method pointer addresses of the call stack.
Selected Sample Stack View the details of the sample stack. Unity opens this information in a separate window. You can then copy the sample stack information to your clipboard.

The sample stack differs from a method’s call stack because Unity does not tie every sample to a specific method, nor does it record every call as a sample. If you select a sample in a different frame and there isn’t a sample with the same sample stack in the displayed frame, this window shows both the sample stack of the original selection, as well as the approximate selection for this frame.

GC.Alloc samples appear colored in red-magenta, and show you the size of the allocation.

マネージコールスタックをツールチップに表示するには、Profiler ウィンドウのツールバーに移動し、Call Stacks ボタンを選択します。フレームのコールスタックを表示するには、フレームをプロファイルする前にこのプロパティを有効にする必要があります。詳細については、コールスタック を参照してください。

Flow Events

Unity がスレッド間でどのようにジョブをスケジュールするかを視覚化するために、Flow Events の設定を使用できます。この設定では、システム、ジョブ、スレッドの関係が表示されます。この設定を有効にするには、タイムライン表示ペインの右上にある More メニュー (⋮) を選択し、Show Flow Events を選択します。

この設定を有効にすると、ジョブをスケジュールしたり、スケジュールされたジョブが完了するのを待ったりする Profiler サンプルに、白いイベントマーカーが追加されます。また、関係ないサンプルを暗くすることで、選択したサンプルをよりわかりやすく可視化することができます。

プロファイラーがサンプルに加える矢印の種類は 3 つあります。

  • 下矢印: フローの始まりを示し、このサンプルが何らかの作業を予定していることを示します。
  • 右矢印: フローの中で次の項目を示し、これを予定したのは別のサンプルであることを示します。
  • 上矢印: フローの終わりを示し、このサンプルで作業が終了、または同期したことを示します。

サンプルを選択すると、プロファイラーは関連するフローイベントマーカーを線でつなぎます。太い線は、選択した特定のフローラインを強調します。例えば、begin のサンプルが他の 2 つの next のサンプルを指している場合、next のサンプルの 1 つをクリックすると、Profiler はそのサンプルに向かって太い線を引きます。

このビューは、コードの実行のフローや、どの作業が完了するのを待機しているかを見つけたり、コードの依存関係を視覚的に明らかにするのに役立ちます。

The Timeline CPU Profiler view with Flow Events enabled and a sample selected.
The Timeline CPU Profiler view with Flow Events enabled and a sample selected.

Hierarchy と Raw Hierarchy ビュー

Hierarchy または Raw Hierarchy ビューに切り替えると、サンプルがメインスレッド上にある限り、選択が引き継がれます。選択したものがすぐに見つからない場合は、F キーを押してフォーカスします。

Hierarchy ビューの CPU Usage プロファイラーモジュール
Hierarchy ビューの CPU Usage プロファイラーモジュール

Hierarchy ビューには、プロファイルしたすべてのサンプルがリストされ、共有コールスタックと ProfilerMarkers の階層によってグループ化されます。 Raw Hierarchy ビューはサンプルをグループ化しないため、サンプルを詳細に確認するのに理想的です。Thread ドロップダウンを使用して特定のスレッドを選択することもできます。例えば、このビューで Main Thread や Render Thread を検査することができます。

デフォルトでは、すべての EditorOnly サンプルはこれらのビューで折りたたまれています。EditorOnly サンプルは、エディターのみの安全性チェックのためにのみ発生する Player Loop のサンプルです。サンプルが折りたたまれている場合、それらの GC.Alloc 値はそれらを含むサンプルの GC.Alloc 値に影響しません。これらのサンプルを表示するには、詳細ペインの右上にある More Items メニュー (⋮) を選択し、 Collapse EditorOnly Samples 設定を無効にします。詳細は、このドキュメントの エディターのみのサンプル のセクションを参照してください。

両方のビューは、各項目の以下の詳細情報を表示します。

プロパティ 機能
Total Unity が特定の関数に費やした合計時間 (パーセンテージ)
Self Unity が特定の関数に費やした合計時間 (サブ関数の呼び出しに要した時間を除く。パーセンテージ)。

例えば、スクリーンショットでは、時間の 16.7% が Camera.Render 関数に費やされています。これは多くの描画とカリング関数を呼び出すためです。ただし、呼び出す関数を除外すると、Camera.Render 関数自体に費やされる時間はわずか 0.2% です。
Calls このフレームでこの関数に対して行われた呼び出しの数。Raw Hierarchy ビューでは、プロファイラーはサンプルの階層をマージしないため、この列の値は常に 1 です。
GC Alloc Unity が現在のフレームに割り当てたスクリプティングのヒープメモリの量。スクリプティングのヒープメモリは、ガベージコレクタ によって管理されます。

Unity が GC.Collect() を呼び出すか、ヒープの現在のサイズに収まらないスクリプティングヒープの割り当てがある場合は常に、ガベージコレクターが起動します。参照がなくなったすべての割り当てにマークを付けて収集します。このプロセスは、プロファイラーで GC.Collect サンプルとして表示されます。

Unity は、アプリケーションがヒープにより多くを割り当てると、ガベージコレクターをより頻繁に実行します。 マネージヒープが増加すると、Unity がメモリにマークして回収するのに時間がかかります。そのため、アプリケーションの実行中は GC Alloc 値をゼロに保ち、ガベージコレクターがアプリケーションのフレームレートに影響を与えないようにし、全体的なヒープサイズを小さく保つ必要があります。

マネージヒープの詳細については、マネージメモリ のドキュメントを参照してください。
Time ms Unity が特定の関数に費やした合計時間 (ミリ秒)。アプリケーションが Job System やマルチスレッドレンダリングを使用する場合、現在選択しているスレッドで費やした時間しか含まれていないため、この情報は誤解を招く可能性があります。スレッドを変更するには、Hierarchy ペインの上部にある Thread ドロップダウンを選択します。
Self ms Unity が特定の関数に費やした合計時間 (ミリ秒)。Unity がサブ関数を呼び出す時間は除きます。
Warning 警告アイコンで示され、現在のフレーム中にアプリケーションが警告をトリガーした回数を表示します。詳細については、パフォーマンスの警告 を参照してください。

アプリケーションがプロファイルされた関数をどこで呼び出し、使用するかに関する詳細情報を取得するには、モジュールの詳細ペインの右上にある Details ドロップダウンを選択し、Related DataCalls ビューのいずれかを選択します。

Related Data panel
Related Data panel

The Related Data view displays a list of UnityEngine.Objects that use a Begin() overload and are associated with the Profiler sample. Some samples that Unity reports have these associations built in, such as Camera.Render samples that are linked to the Camera GameObject that does the rendering. Unity reports these objects via their instance ID and resolves them to a name in the Profiler window, if you profile in the Editor.

これらのオブジェクトの 1 つをクリックすると、Unity はシーンの Hierarchy を使ってオブジェクトを検索し、ping しようとします。アソシエーションはインスタンス ID を使用するため、ping はアプリケーションがエディターでプロファイルされている場合と、 オブジェクトがまだ存在している場合にのみ機能します。

GC.Alloc サンプルの場合、このビューには、この階層レベルで発生した各割り当てに 1 つずつ、N/A 項目のリストが表示されます。割り当てのサイズは GC.Alloc 列に表示されます。Call Stacks 設定を有効にしてアプリケーションをプロファイルする場合、このビューで GC.Alloc サンプルを選択すると、Deep Profiling 設定を有効にしていなくても、割り当てられたスクリプティングオブジェクトのコールスタックが Profiler ウィンドウに表示されます。詳細については、アロケーション、割り当てコールスタック を参照してください。

Calls panel
Calls panel

The Calls view displays where the selected sample is being called from as well as what other functions it calls to.

コールスタック

ProfilerMarkers emit a set of samples which the Profiler uses to display and organize profiling information into different chronological and hierarchical views. Any sample displayed in the Profiler window is therefore part of a sample stack.

A sample stack differs from a method’s call stack because Unity does not tie every sample to a specific method, nor does it record every call as a sample. Deep Profiling adds a ProfilerMarker to every function call, but it does not add any for native code, plus recording all of these samples comes with a potentially high overhead.

GC.AllocUnsafeUtility.MallocJobHandle.Complete が出力するサンプルのすべてのコールスタックを有効にすることができます。これは、ディーププロファイリングを有効にして高いオーバーヘッドを発生させることなく、これらのサンプルがどこで発生したかを追跡したい場合に便利です。これらのマーカーの詳細については、よく使われるプロファイラーマーカー のドキュメントを参照してください。

To enable full call stacks for these samples, navigate to the toolbar of the Profiler window and enable the Call Stacks button. By default, this enables the call stacks for GC.Alloc samples. To enable other call stacks, select the dropdown arrow and enable any of the other markers you would like to see the call stacks for.

この機能は、エディターでプロファイルする場合でも、実行中のプレイヤーでプロファイルする場合でも使用できます。この機能は、これをオンにしたときのみフレームに対し有効です。

For example, every scripting heap allocation shows up as a GC.Alloc sample in both the Hierarchy view and Timeline view. In the Timeline view, it is colored bright magenta. To see a call stack, select the CPU Profiler module and then select a GC.Alloc sample in Timeline view. The call stack appears in the selection highlight.

To copy the call stack, select the Copy button in the tooltip. You can also open the relevant code file from this view if the file path is highlighted as a blue link. Click on the link and the file opens in your default IDE. Note: The call stack information does not contain the exact line number within that method but just the line at the beginning of that method.

Profiler window in Timeline view with GC.Alloc sample selected (top), and with the same sample selected in Hierarchy view.
Profiler window in Timeline view with GC.Alloc sample selected (top), and with the same sample selected in Hierarchy view.

You can also use the Show dropdown to see the GC.Alloc’s sample stack, its full details, or switch to view it in the Hierarchy or Raw Hierarchy view.

完全なコールスタックの詳細を見るには、Hierarchy または Raw Hierarchy ビューで、 Details ビューを Related Data に設定します。このビューでは、このサンプルに関連するメタデータが一覧表示されます。このメタデータには、関連する UnityEngine.Object が含まれる場合があります。UnityEngine.Object に関連付けられていないメタデータエントリーについては、このパネルに N/A と表示されます。N/A エントリーを選択すると、プロファイラーは詳細ビューの下半分にコールスタックを含むメタデータを表示します。

マネージアロケーションの詳細については、マネージメモリt を参照してください。

一般的なマーカー

Unity のコードには数多くのプロファイラーマーカーが用意されており、アプリケーションで何に時間がかかっているかを知ることができます。プロファイリングデータに表示される可能性のある最も一般的なマーカーの完全なリストについては、よく使われるプロファイラーマーカー のドキュメントを参照してください。

Audio プロファイラーモジュール
File Access Profiler module