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

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

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

チャートのカテゴリ

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

The CPU Usage Profiler module
The CPU Usage Profiler module
カテゴリ 説明
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.

The Timeline view displays profiling data from all threads in their own subsections and along the same time axis, unlike the Hierarchy views. The Hierarchy views only display profiling data one thread at a time, defaulting to the main thread. Also, these views only show a sample’s duration, whereas the Timeline view shows at which times each sample occurred.

You can use the Timeline view to see how activities on the different threads correlate to each other in their parallel execution. You can see how much or little you are using the different threads, such as the Job System’s worker threads, how work on the threads are queued up, and if any thread is idling (Idle sample) or waiting for another thread or a Job to finish (Wait for x sample).

アイテムの操作と選択

To zoom in on areas of the time axis, use the scroll wheel on your mouse, or press and hold the Alt key while you drag with the right mouse button pressed down. You can also use the ends of the horizontal scrollbar to zoom in. Press the A key on your keyboard to reset the zoom so that the entire frame time is visible.

Whenever you see a white arrow on the bottom of a thread, you can click it to unfold the thread to show all lines, or click again to show only the top ones. You can also drag the line that separates the threads to readjust how many lines you can see. Double-clicking the line sets the height of the thread’s section to the maximum depth of the call stack. To pan the view, press the middle mouse button, or hold the Alt key (Command key on macOS) and press the left mouse button.

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

To see an item’s contribution to the CPU chart, select it in the lower pane. The Profiler highlights its contribution, and dims the rest of the chart. To deselect the item, click elsewhere in the view. Press the F key to focus the current sample you selected, or to show the default zoom level if you’ve selected nothing.

項目が選択された 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.

To show managed call stacks in the tooltip, navigate to the Profiler window’s toolbar, and select the Call Stacks button. You must enable this property before you profile a frame to display the call stack for a frame. For more information, see the section on call stacks.

Flow Events

To help you visualize how Unity schedules jobs across threads, you can use the Flow Events setting. This setting displays the relationship between systems, jobs and threads. To enable this setting, select the More menu (⋮) in the top right of the Timeline view pane, and then select Show Flow Events.

When you enable this setting, the Profiler adds white event markers to the Profiler samples that schedule jobs, or wait on scheduled jobs to complete. It also darkens unrelated samples so that you can more easily visualize the sample you select.

There are three types of arrows the Profiler adds to the samples:

  • Down arrow: Indicates the beginning of a flow, and that this sample scheduled some work.
  • Right arrow: Indicates the next item in a flow, and that a different sample scheduled this.
  • Up arrow: Indicates the end of a flow, and that the work ended or synchronized on this sample.

When you select a sample, the Profiler connects the relevant flow event markers together with lines. A thicker line highlights the particular flow line you select. For example, if a begin sample points to two other next samples, when you click one of the next samples, the Profiler draws a thicker line to it.

This view is useful to discover the flow of execution of your code, what work was being waited on to complete, and helps you uncover the dependencies of your code in a visual way.

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 How much scripting heap memory Unity has allocated in the current frame. The garbage collector manages the scripting heap memory.

Whenever Unity calls GC.Collect() or there is a scripting heap allocation that does not fit within the heap’s current size, the garbage collector triggers. It marks all allocations that have no more references to them and collects them. This process appears as GC.Collect samples in the Profiler.

Unity runs the garbage collector more frequently as your application allocates more on the heap. As the managed heap grows, it takes Unity longer to mark and collect the memory. As such, you should keep the GC Alloc value at zero while your application runs, to prevent the garbage collector from affecting your application’s framerate, and to keep the overall heap size small.

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

To get more information about where your application calls and uses the profiled functions, select the Details dropdown at the top right hand corner of the module details pane and choose either Related Data or Calls view.

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. When you profile a built player, or load a capture from disk, these names do not appear and the Profiler displays them as N/A.

これらのオブジェクトの 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.

Call stacks

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.

You can enable the full call stacks for samples that GC.Alloc, UnsafeUtility.Malloc, JobHandle.Complete emit. This is useful if you want to track down where these samples happened, without enabling Deep Profiling and encountering its high overhead. For more information about these markers, see the documentation on Common Profiler Markers.

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.

You can use this functionality whether you profile in the Editor or on a running player. This only takes effect for the frames you profile after you turn this option on.

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.

To see the full call stack details, while in the Hierarchy or Raw Hierarchy view, set the Details view to Related Data. This view lists the metadata associated with this sample, which might include a UnityEngine.Object that it was associated with. For any metadata entry that is not associated with a UnityEngine.Object, the name shows up as N/A in this panel. When you select an N/A entry, the Profiler displays the meta data, including the call stack in the bottom half of the details view.

For more information about managed allocations, see documentation on Understanding Automatic Memory Management.

Common markers

Unity’s code is instrumented with a large number of Profiler markers that give you insight into what is taking up time in your application. For a full list of the most common markers you might see in your profiling data, see the documentation on Common Profiler markers.

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