CPU Usage Profiler モジュールには、アプリケーションのどこで時間が費やされているかを表示するチャートが含まれています。レンダリング、スクリプト、アニメーションなど、アプリケーションが時間を費やすすべての重要な領域の概要を提供します。このセクションには以下のトピックが含まれます。
CPU Usage Profiler モジュールのチャートは、アプリケーションのメインスレッドで費やされた時間を追跡します。タイミングは 9 のカテゴリに分けられます。チャートのカテゴリの順序を変更するには、カテゴリをチャートの凡例にドラッグアンドドロップします。カテゴリの色の付いた凡例をクリックして、表示を切り替えることもできます。
カテゴリ | 説明 |
---|---|
Rendering | アプリケーションがグラフィックスのレンダリングに費やす時間。 |
Scripts | アプリケーションがスクリプトの実行に費やす時間。 |
Physics | アプリケーションが物理演算エンジンに費やす時間。 |
Animation | アプリケーションがアプリケーション内のスキンしたメッシュレンダラー、ゲームオブジェクト、その他のコンポーネントをアニメーション化するのに費やす時間。これには、Animation コンポーネントと Animator コンポーネントが使用するシステムが計算に要した時間も含まれます。 |
GarbageCollector | アプリケーションが ガベージコレクター の実行に費やす時間。 |
VSync | アプリケーションが targetFrameRate または次の VBlank との同期を待機するフレームごとの時間。これは、 QualitySettings.vSyncCount 値、ターゲットフレームレート、または VSync 設定 (アプリケーションが実行されているプラットフォームのデフォルト、または最大値) に基づいています。VSync の詳細については、このページの レンダリングと VSync のサンプル を参照してください。 |
Global Illumination | アプリケーションがライティングに費やす時間。 |
UI | アプリケーションが UI の表示に費やす時間。 |
Others | アプリケーションが他のカテゴリに分類されないコードに費やす時間。これには、EditorLoop すべてや、エディターで再生モードをプロファイルするときのプロファイリングオーバーヘッドなどが含まれます。 |
CPU Usage Profiler モジュールを選択すると、その下の詳細ペインに選択したフレームのアプリケーションが使った時間の内訳が表示されます。Timeline (タイムライン) か Detailed (詳細) の 2 通りでそのデータを表示できます。表示を変更するには、詳細ペインの左上のドロップダウンを使用します (デフォルトでは Timeline に設定)。
表示 | 機能 |
---|---|
Timeline | フレームの長さを時間軸にして、特定のフレームの時間消費の内訳を表示します。これは、すべてのスレッドのタイミングを一度に、またそれらが発生したフレーム内の時間内で表示するために使用できる唯一の表示モードです。そのため、スレッド (例えば、メインスレッドのシステムがスケジュールした後に起動する ジョブシステム ワーカースレッド) 間でタイミングを関連付けることができます。 |
Hierarchy | 内部の階層構造によって時間のデータをグループ化します。このオプションは、アプリケーションが呼び出した要素を、使用された時間の降順 (デフォルト) のリスト形式で表示します。また、割り当てられたスクリプトのメモリの量 (GC Alloc)、または呼び出し回数で情報を並べ替えることもできます。表の並び方を決める列を変更するには、表の列のヘッダーをクリックします。 |
Raw Hierarchy | 時間のデータを、タイミングが発生したコールスタックと同様の階層構造で表示します。Hierarchy ビューのように各コールスタックをマージせずに、このモードでは個別にリストします。 |
Inverted Hierarchy | Groups samples by profiler marker and displays them with inverted sample stacks. The first level of the hierarchy shows an item for each profiler marker. Expand an item in the tree to show the markers that contain this one in their sample stack. This option helps to reveal larger performance issues caused by lots of instances of small performance impacts. These kinds of issues can be harder to spot in the Timeline or non-inverted hierarchy views. As with the other hierarchy views, click on column headers to order items. |
Live (ライブ) 設定は各ビューで使用可能で、Playmode またはエディターで新しいデータの記録を開始すると、モジュールの詳細ペインに現在のフレームまたは選択したフレームに関する情報が表示されます。これを有効にするには、モジュールの詳細ドロップダウンの横にある Live ボタンをクリックします。デフォルトではこの設定は無効になっており、データを記録するときモジュールの詳細ペインは空白です。ノート: この設定により、Profiler ウィンドウが再描画されるときに EditorLoop
のオーバーヘッドが増加します。
さらに、各ビューで More Items メニュー (⋮) を選択し、 Show Full Scripting Method Names を有効にすると、すべてのスクリプトメソッドのフルバージョンの名 (Assembly::Class::MethodName
) が表示されます。
Timeline ビューは CPU Usage Profiler モジュールのデフォルトビューです。このビューは、アプリケーションで時間を使う場所と、タイミングが互いにどのように関連しているかについての概要を表示します。
Timeline ビューでは、Hierarchy ビューとは異なり、すべてのスレッドのプロファイリングデータを独自のサブセクションに同じ時間軸に沿って表示します。Hierarchy ビューには、一度に 1 つのスレッドのみ (デフォルトではメインスレッド) のプロファイリングデータが表示されます。また、Hierarchy ビューはサンプルの継続時間のみを表示しますが、Timeline ビューは各サンプルが発生した時間を表示します。
タイムラインビューを使用して、並列実行で異なるスレッドのアクティビティが互いにどのように相関しているかを確認できます。 Job Systemのワーカースレッドなど、さまざまなスレッドをどれだけ使用しているか、どれだけ使用しているか、スレッドでの作業がどのようにキューに入れられているか、アイドル状態(Idle サンプル)か、別のスレッドや待機中の スレッドがあるかを確認できます。ジョブの終了(Wait for x サンプル)
時間軸のエリアを拡大するにはマウスのスクロールホイールを使用するか、Alt キーを押しながらマウスの右ボタンを押してドラッグします。水平スクロールバーの端を使用して拡大することもできます。ズームをリセットするにはキーボードの A キーを押します。すると、フレーム時間全体が表示されます。
スレッドの下部に白い矢印が表示されている場合は、クリックしてスレッドを展開するとすべての行が表示され、再度クリックすると一番上の行のみが表示されます。スレッドを分ける線をドラッグして、表示される行の数を再調整することもできます。行をダブルクリックすると、スレッドセクションの高さがコールスタックの最大の深さに設定されます。ビューをパンするには、マウスの中ボタンを押すか、 Alt キー (macOS では Command キー) を押しながらマウスの左ボタンを押します。
スレッドのグループを折りたたんだり展開したりするには、ビューの左端にあるスレッド名の横の折りたたみ矢印をクリックします。
CPU チャートに対する項目の寄与を表示するには、下のペインで項目を選択します。プロファイラーはその寄与を強調し、チャートの残りの部分を暗くします。項目の選択を解除するには、ビュー内の任意の場所をクリックします。F キーを押すと、選択した現在のサンプルにフォーカスが移動します。何も選択しない場合は、デフォルトのズームレベルで表示されます。
上の画像では、選択したアイテムのツールチップに、インスタンス数やすべてのスレッドにわたるこのサンプルの合計時間などの詳細が表示されます。ツールチップ内のテキストを選択してコピーしたり、ボタンを使用してサンプルをさらに操作したりできます。
操作 | 説明 |
---|---|
Copy | コールスタックとツールチップの内容全体をクリップボードにコピーします。 |
Show | このドロップダウンを選択すると、以下のオプションが選択できます。 |
Hierarchy | Hierarchy ビューでこのサンプルに切り替えます。 |
Raw Hierarchy | Raw Hierarchy ビューでこのサンプルに切り替えます。 |
Inverted Hierarchy | Switch to this sample in Inverted Hierarchy view |
Full Details for Call Stacks | Unity はコールスタックをメソッドポインターアドレスのリストとして記録し、これを使用してスタックのメソッド名、ファイルパス、行番号を表示します。ポインターアドレスだけが存在する場合、Unity はそれを無視して、さらなる情報が得られるアクション可能なアイテムのためのスクリーンスペースを確保します。このプロパティを有効にすると、コールスタックのメソッドポインターアドレスの完全なリストが表示されます。 |
Selected Sample Stack | サンプルスタックの詳細を表示します。Unity はこの情報を別ウィンドウで開きます。そして、サンプルスタック情報をクリップボードにコピーすることができます。 サンプルスタックはメソッドのコールスタックとは異なり、Unityはすべてのサンプルを特定のメソッドに結びつけず、すべてのコールをサンプルとして記録しないためです。別のフレームでサンプルを選択し、表示されているフレームに同じサンプルスタックを持つサンプルがない場合、このウィンドウには元の選択のサンプルスタックと、このフレームでのおおよその選択の両方が表示されます。 |
GC.Allocのサンプルは赤マゼンタの色で表示され、割り当てのサイズを表示します。
マネージコールスタックをツールチップに表示するには、Profiler ウィンドウのツールバーに移動し、Call Stacks ボタンを選択します。フレームのコールスタックを表示するには、フレームをプロファイルする前にこのプロパティを有効にする必要があります。詳細については、コールスタック を参照してください。
Unity がスレッド間でどのようにジョブをスケジュールするかを視覚化するために、Flow Events の設定を使用できます。この設定では、システム、ジョブ、スレッドの関係が表示されます。この設定を有効にするには、タイムライン表示ペインの右上にある More メニュー (⋮) を選択し、Show Flow Events を選択します。
この設定を有効にすると、ジョブをスケジュールしたり、スケジュールされたジョブが完了するのを待ったりする Profiler サンプルに、白いイベントマーカーが追加されます。また、関係ないサンプルを暗くすることで、選択したサンプルをよりわかりやすく可視化することができます。
プロファイラーがサンプルに加える矢印の種類は 3 つあります。
サンプルを選択すると、プロファイラーは関連するフローイベントマーカーを線でつなぎます。太い線は、選択した特定のフローラインを強調します。例えば、begin
のサンプルが他の 2 つの next
のサンプルを指している場合、next
のサンプルの 1 つをクリックすると、Profiler はそのサンプルに向かって太い線を引きます。
このビューは、コードの実行のフローを検索したり、どの作業が完了を待機しているかを見つけたり、コードの依存関係を視覚的に明らかにするのに役立ちます。
When you switch to the Hierarchy, Raw Hierarchy or Inverted Hierarchy view, your selection carries over, as long as the sample is on the main thread. If you cannot immediately find your selection, press the F key to focus it.
The Hierarchy view lists all samples you have profiled and groups them together by their shared call stack and the hierarchy of ProfilerMarkers. The Raw Hierarchy view does not group samples together, which makes it ideal for looking into samples on a granular level.
The Inverted Hierarchy view groups samples by profiler marker and displays them with inverted sample stacks. The first level of the hierarchy shows an item for each profiler marker. Expand an item in the tree to show the markers that contain this one in their sample stack. This option helps to reveal larger performance issues caused by lots of instances of small performance impacts. These kinds of issues can be harder to spot in the Timeline or non-inverted hierarchy views. As with the other hierarchy views, click on column headers to order items.
In all of the hierarchy views, you can use the Thread dropdown to select a specific thread, like the Main Thread or Render Thread to inspect in these views.
By default, all EditorOnly samples are collapsed in these views. EditorOnly samples are samples in the Player Loop that only happen because of Editor-only safety checks. When the samples are collapsed, their GC.Alloc value does not contribute to the GC.Alloc value of their enclosing sample. To display these samples, select the More Items menu (⋮) in the top right of the details pane, and then disable the Collapse EditorOnly Samples setting. For more information, see Editor only samples.
The hierarchy views display the following detailed information for each item in the Hierarchy, next to each row:
プロパティ | 機能 |
---|---|
Total | The total amount of time Unity spent in a particular sample, as a percentage of the total frame time. |
Self | The total amount of time Unity spent in a particular sample as a percentage of the total frame time, excluding the time from sub-samples. For example, in the screenshot, 16.7% of time is spent in the Camera.Render function. This is because it calls a lot of drawing and culling functions. However, when you exclude the samples for the functions it calls, only 0.2% of time is spent on the Camera.Render function itself. |
Calls | The number of calls made to this sample in this frame. In the Raw Hierarchy view the values in this column are always 1 because the Profiler does not merge the hierarchy of samples. |
GC Alloc | Unity が現在のフレームに割り当てたスクリプティングのヒープメモリの量。スクリプティングのヒープメモリは、ガベージコレクタ によって管理されます。 Unity が GC.Collect() を呼び出すか、ヒープの現在のサイズに収まらないスクリプティングヒープの割り当てがある場合は常に、ガベージコレクターが起動します。参照がなくなったすべての割り当てにマークを付けて収集します。このプロセスは、プロファイラーで GC.Collect サンプルとして表示されます。Unity は、アプリケーションがヒープにより多くを割り当てると、ガベージコレクターをより頻繁に実行します。 マネージヒープが増加すると、Unity がメモリにマークして回収するのに時間がかかります。そのため、アプリケーションの実行中は GC Alloc 値をゼロに保ち、ガベージコレクターがアプリケーションのフレームレートに影響を与えないようにし、全体的なヒープサイズを小さく保つ必要があります。 マネージヒープの詳細については、マネージメモリ のドキュメントを参照してください。 |
Time ms | The total amount of time Unity spent in a particular sample, in milliseconds. If your application uses the Job System or multithreaded rendering, this information might be misleading, because it only contains the time Unity spent on the currently selected thread. To change the thread, select the Thread dropdown at the top of the Hierarchy pane. |
Self ms | The total amount of time Unity spent in a particular sample, in milliseconds, excluding the time Unity spends calling sub-functions. |
Warning | Indicated by a warning icon, this displays how many times the application has triggered a warning during the current frame. For more information, see Performance warnings. |
In the Inverted Hierarchy view, each child item displays information relative to its parent item. Each child item in the tree represents part of an inverted sample stack and its data shows how much time or heap memory is contributed via this sample stack to the aggregated parent item. The following scenario illustrates this process.
Bullet.Update()
, Alien.Update()
and Ship.Update()
all call a method named LogMessageFormatter.ProcessLogMsg
, which executes in a different amount of time on each occasion. In the Inverted Hierarchy view, the LogMessageFormatter.ProcessLogMsg
samples are combined into a single root item which shows the total time spent inside all instances of the sample during the frame. The tree expands to show each of the three sample stacks that led to this sample and the time that each stack contributes to the overall time.
To keep this example short, LogMessageFormatter.ProcessLogMsg
is only called three times and has a relatively long execution time. However, if this method executed much faster and was called many times in a frame, its total execution time could still contribute significantly to the overall frame time. In such situations, the Inverted Hierarchy view makes the relevant markers much easier to identify.
アプリケーションがプロファイルされた関数をどこで呼び出し、使用するかに関する詳細情報を取得するには、モジュールの詳細ペインの右上にある Details ドロップダウンを選択し、Related Data か Calls ビューのいずれかを選択します。
Related Data ビューは、Begin() オーバーロードを使用し、プロファイラーサンプルに関連付けられている UnityEngine.Objects
のリストを表示します。Unity が報告する一部のサンプルには、レンダリングを行う Camera ゲームオブジェクトにリンクされているCamera.Render サンプルなど、組み込まれたアソシエーションが含まれます。エディターでプロファイルすると、Unity はインスタンス ID を使ってこれらのオブジェクトを報告し、Profiler ウィンドウで名前に解決します。ビルドしたプレイヤーをプロファイルするとき、またはディスクからキャプチャをロードするとき、これらの名前は表示されず、プロファイラーは N/A
と表示します。
これらのオブジェクトの 1 つをクリックすると、Unity はシーンの Hierarchy を使ってオブジェクトを検索し、ping しようとします。アソシエーションはインスタンス ID を使用するため、ping はアプリケーションがエディターでプロファイルされている場合と、 オブジェクトがまだ存在している場合にのみ機能します。
For GC.Alloc
samples, this view displays a list of N/A
items, one for each allocation that happened at this hierarchy level, with the size of the allocation listed in the GC.Alloc column. If you profile your application with the Call Stacks setting enabled, when you select a GC.Alloc
sample in this view, the Profiler window displays the call stack for the allocated scripting object you select, even if you did not enable the Deep Profiling setting. For more information, see the Allocation call stacks section of this documentation.
Calls ビューには、選択されたサンプルが何によって呼び出されているのか、また、そのサンプルが呼び出す他の関数も表示されます。
ProfilerMarkers は、プロファイラーがプロファイリング情報を時系列や階層別に表示整理するために使用する一揃いのサンプルを出力します。そのため、Profiler ウィンドウに表示されるサンプルは、すべてサンプルスタックの一部です。
サンプルスタックがメソッドのコールスタックと異なるのは、Unity がすべてのサンプルを特定のメソッドに結びつけず、すべての呼び出しをサンプルとして記録するわけではないからです。ディーププロファイリング はすべての関数コールに ProfilerMarker
を加えますが、ネイティブコードには追加しません。また、これらのサンプルをすべて記録すると、オーバーヘッドが高くなる可能性があります。
GC.Alloc、UnsafeUtility.Malloc、JobHandle.Complete が出力するサンプルのすべてのコールスタックを有効にすることができます。これは、ディーププロファイリングを有効にして高いオーバーヘッドを発生させることなく、これらのサンプルがどこで発生したかを追跡したい場合に便利です。これらのマーカーの詳細については、よく使われるプロファイラーマーカー のドキュメントを参照してください。
これらのサンプルの完全な呼び出しスタックを有効にするには、Profiler ウィンドウのツールバーに移動し、Call Stacks ボタンを有効にします。デフォルトでは、これにより GC.Alloc サンプルのコールスタックが有効になります。 他のコールスタックを有効にするには、ドロップダウンを選択し、コールスタックを表示したい他のマーカーを有効にします。
この機能は、エディターでプロファイルする場合でも、実行中のプレイヤーでプロファイルする場合でも使用できます。この機能は、これをオンにしたときのみフレームに対し有効です。
例えば、すべてのスクリプトのヒープ割り当ては、Hierarchy ビューと Timeline ビューの両方で GC.Alloc サンプルとして表示されます。Timeline ビューでは。これは明るいマゼンタ色です。コールスタックを表示するには、CPU Profiler モジュールを選択し、Timeline ビューで GC.Alloc サンプルを選択します。 コールスタックは選択部分の強調表示にTo copy the call stack表示されます。
コールスタックをコピーするには、ツールチップの Copy ボタンを選択します。ファイルパスが青色のリンクとして強調表示されている場合は、このビューから関連するコードファイルを開くこともできます。リンクをクリックすると、デフォルトの IDE でファイルが開きます。ノート: コールスタック情報には、そのメソッド内の正確な行番号は含まれず、そのメソッドの先頭の行だけが含まれます。
また、 Show ドロップダウンで GC.Alloc のサンプルスタックやその全詳細を見たり、 Hierarchy または Raw Hierarchy のビューに切り替えて表示することができます。
完全なコールスタックの詳細を見るには、Hierarchy または Raw Hierarchy ビューで、 Details ビューを Related Data に設定します。このビューでは、このサンプルに関連するメタデータが一覧表示されます。このメタデータには、関連する UnityEngine.Object が含まれる場合があります。UnityEngine.Object に関連付けられていないメタデータエントリーについては、このパネルに N/A と表示されます。N/A エントリーを選択すると、プロファイラーは詳細ビューの下半分にコールスタックを含むメタデータを表示します。
マネージ割り当ての詳細については、マネージメモリ を参照してください。
Unity のコードには数多くのプロファイラーマーカーが用意されており、アプリケーションで何に時間がかかっているかを知ることができます。プロファイリングデータに表示される可能性のある最も一般的なマーカーの完全なリストについては、よく使われるプロファイラーマーカー のドキュメントを参照してください。