Version: 2023.1
言語: 日本語
Audio Profiler モジュール
File Access Profiler モジュール

CPU Usage Profiler モジュール

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

チャートのカテゴリ

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

CPU Usage Profiler モジュール
CPU Usage Profiler モジュール
カテゴリ 説明 
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 ビューのように各コールスタックをマージせずに、このモードでは個別にリストします。

Live 設定

Live (ライブ) 設定は各ビューで使用可能で、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 Profiler モジュール
Timeline ビューの CPU Usage Profiler モジュール

Timeline ビューは CPU Usage Profiler モジュールのデフォルトビューです。このビューは、アプリケーションで時間を使う場所と、タイミングが互いにどのように関連しているかについての概要を表示します。

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 モジュール

上の画像では、選択したアイテムのツールチップに、インスタンス数やすべてのスレッドにわたるこのサンプルの合計時間などの詳細が表示されます。ツールチップ内のテキストを選択してコピーしたり、ボタンを使用してサンプルをさらに操作したりできます。

操作 説明 
Copy コールスタックとツールチップの内容全体をクリップボードにコピーします。
Show このドロップダウンを選択すると、以下のオプションが選択できます。
Hierarchy Hierarchy ビューでこのサンプルに切り替えます。
Raw Hierarchy Raw Hierarchy ビューでこのサンプルに切り替えます。
Full Details for Call Stacks Unity はコールスタックをメソッドポインターアドレスのリストとして記録し、これを使用してスタックのメソッド名、ファイルパス、行番号を表示します。ポインターアドレスだけが存在する場合、Unity はそれを無視して、さらなる情報が得られるアクション可能なアイテムのためのスクリーンスペースを確保します。このプロパティを有効にすると、コールスタックのメソッドポインターアドレスの完全なリストが表示されます。
Selected Sample Stack サンプルスタックの詳細を表示します。Unity はこの情報を別ウィンドウで開きます。そして、サンプルスタック情報をクリップボードにコピーすることができます。

サンプルスタックはメソッドのコールスタックとは異なり、Unityはすべてのサンプルを特定のメソッドに結びつけず、すべてのコールをサンプルとして記録しないためです。別のフレームでサンプルを選択し、表示されているフレームに同じサンプルスタックを持つサンプルがない場合、このウィンドウには元の選択のサンプルスタックと、このフレームでのおおよその選択の両方が表示されます。

GC.Allocのサンプルは赤マゼンタの色で表示され、割り当てのサイズを表示します。

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

Flow Events

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

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

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

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

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

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

Flow Events を有効にしてサンプルを選択した Timeline CPU Profiler ビュー
Flow Events を有効にしてサンプルを選択した Timeline CPU Profiler ビュー

Hierarchy と Raw Hierarchy ビュー

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

Hierarchy ビューの CPU Usage Profiler モジュール
Hierarchy ビューの CPU Usage Profiler モジュール

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

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.

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

プロパティ 機能
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 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.

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

Related Data パネル
Related Data パネル

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.

Show Calls パネル
Show Calls パネル

Calls ビューには、選択されたサンプルが何によって呼び出されているのか、また、そのサンプルが呼び出す他の関数も表示されます。

コールスタック

ProfilerMarkers は、プロファイラーがプロファイリング情報を時系列や階層別に表示整理するために使用する一揃いのサンプルを出力します。そのため、Profiler ウィンドウに表示されるサンプルは、すべてサンプルスタックの一部です。

サンプルスタックがメソッドのコールスタックと異なるのは、Unity がすべてのサンプルを特定のメソッドに結びつけず、すべての呼び出しをサンプルとして記録するわけではないからです。ディーププロファイリング はすべての関数コールに ProfilerMarker を加えますが、ネイティブコードには追加しません。また、これらのサンプルをすべて記録すると、オーバーヘッドが高くなる可能性があります。

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

これらのサンプルの完全な呼び出しスタックを有効にするには、Profiler ウィンドウのツールバーに移動し、Call Stacks ボタンを有効にします。デフォルトでは、これにより GC.Alloc サンプルのコールスタックが有効になります。 他のコールスタックを有効にするには、ドロップダウンを選択し、コールスタックを表示したい他のマーカーを有効にします。

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

例えば、すべてのスクリプトのヒープ割り当ては、Hierarchy ビューと Timeline ビューの両方で GC.Alloc サンプルとして表示されます。Timeline ビューでは。これは明るいマゼンタ色です。コールスタックを表示するには、CPU Profiler モジュールを選択し、Timeline ビューで GC.Alloc サンプルを選択します。 コールスタックは選択部分の強調表示にTo copy the call stack表示されます。

コールスタックをコピーするには、ツールチップの Copy ボタンを選択します。ファイルパスが青色のリンクとして強調表示されている場合は、このビューから関連するコードファイルを開くこともできます。リンクをクリックすると、デフォルトの IDE でファイルが開きます。ノート: コールスタック情報には、そのメソッド内の正確な行番号は含まれず、そのメソッドの先頭の行だけが含まれます。

GC.Alloc サンプルを選択したタイムライン ビューのプロファイラ ウィンドウ (上) と、同じサンプルを選択した Hierarchy ビューの Profiler ウィンドウ (下)。
GC.Alloc サンプルを選択したタイムライン ビューのプロファイラ ウィンドウ (上) と、同じサンプルを選択した Hierarchy ビューの Profiler ウィンドウ (下)。

また、 Show ドロップダウンで GC.Alloc のサンプルスタックやその全詳細を見たり、 Hierarchy または Raw Hierarchy のビューに切り替えて表示することができます。

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

マネージ割り当ての詳細については、マネージメモリ を参照してください。

一般的なマーカー

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

Audio Profiler モジュール
File Access Profiler モジュール