Meta Quest開発者ハブでPerfettoトレースを取る方法 更新日時: 2025/09/03
Perfetto は、エンジンに依存しない強力なパフォーマンストレーシングツールであり、ビルトインのエンジンプロファイラーに比べていくつもの優れた点があります。Perfettoは、スケジューリングアクティビティなどのシステムイベントに関する情報を提供するほか、PerfettoのTrackEvent計測やATraceと統合するアプリの計測を行います。
Perfettoは
Systrace に代わるもので、より広範囲なイベント、より長いトレースをサポートしており、カウンターのサポートもあります。
Perfettoはスタンドアローンツールとして使用できますが、
Meta Quest開発者ハブ(MQDH) から直接使用することもできます。これは右上の
パフォーマンスアナライザー 上にあり、
[Trace Analysis by Perfetto (Perfettoによるトレース分析)] と表示されています。
デバイスマネージャ の
[Device Actions (デバイスアクション)] からもアクセスできます。
開発中は、複雑なワークロードの実行にかかる時間を知る必要がある場合、パフォーマンスのホットスポットを見つける場合、またはコールスタックを調べる必要がある場合、いつでもPerfettoを使うことをおすすめします。例えば、グラフィックエンジンの内部アップデート内の多くのイベントをトラッキングするPerfettoタイムラインを作成し、そのすべてをフレームごとに1つのタイムラインに集約することができます。Perfettoを利用すれば、フレームグラフを描画してサンプリングされたスタックトレースを可視化するために、コールスタックサンプリングを実行することもできます。
Perfettoを利用すると、アプリのパフォーマンスプロフィールと同じタイムライン上で、システムプロセスやほかの指標を幅広く確認できます。また、OVRPluginの関数呼び出しを直接OSにマッピングしたり、さまざまなGPUカウンターや指標に関するインサイトを確認したり、パフォーマンス問題が発生しやすい箇所をより的確に関連付けることができます。
PerfettoのMQDH統合により、一般およびカスタムのPerfettoトレースを設定してキャプチャすることができます。キャプチャしたトレースは、新しいブラウザーウィンドウの
Perfettoサイト で開くことができます。トレースはヘッドセットにも保存され、ダウンロードすることができます。
ご使用の開発パスによっては、Perfettoにいくつかの設定が必要な場合があります。UnityやUnreal Engineなどの商用ゲームエンジンはATrace計測のみを出力するため、[ATrace Categories (ATraceカテゴリ)] と[ATrace Apps (ATraceアプリ)] の設定を行ってください。設定するには、[Trace Analysis by Perfetto (Perfettoによるトレース分析)] の横にある... をクリックし、[Perfetto settings (Perfettoの設定)] を選択します。
ATrace Categories (ATraceカテゴリ) - トラッキングするATraceカテゴリのリスト。これらは多くのアプリに含まれると思われるイベントです。ATrace Apps (ATraceアプリ) - トラッキングするATraceアプリのリスト。これらはイベントがオンになっているアプリです。ATRACE APPS FIELD
UnityとUnreal Engineを使う開発者や、ATraceイベントを使うそれ以外の開発者は、ATraceアプリフィールドにそれぞれのパッケージ名を入力して、Perfettoから詳細情報を取得する必要があります。通常、すべての開発者がこのフィールドに入力するよう推奨されています。 その他の必要な設定は、... > [Perfetto settings (Perfettoの設定)] にある、Perfettoの設定ページに含まれています。
設定には以下が含まれます。
Perfetto Settings Preference (Perfettoの設定) - これを[Custom (カスタム)] に設定すると、カスタムのPerfetto TraceConfigをJSON形式で指定できます。残りの設定は[General (一般)] に適用されます。Auto open trace (トレースを自動で開く) - 記録が完了したトレースを、新しいブラウザーで自動的に開きます。Trace duration (トレース期間) - 無制限の長さを指定することも、期間をミリ秒(ms)単位で指定することもできます。Trace buffer size (トレースバッファサイズ) - トレースバッファのサイズを指定できます。GPU Trace buffer size (GPUトレースバッファのサイズ) - GPUトレースバッファのサイズを指定できます。CPU Scheduling (CPUスケジュール) - CPUスケジュールイベントの詳細なトラッキングを有効にします。ATrace Categories (ATraceカテゴリ) - トラッキングするATraceカテゴリのコンマ区切りリスト。これらは多くのアプリに含まれると思われるイベントです。ATrace Apps (ATraceアプリ) - トラッキングするATraceアプリのリスト。これらはイベントがオンになっているアプリです。すべてのATraceアプリをトラッキングすることも、トラック対象のアプリをコンマ区切りリストで指定することもできます。TrackEvent - 実行中のアプリケーションのTrackEventデータを記録します。TrackEventデータの詳細については、Perfettoトラックイベントのドキュメント をご覧ください。XR Runtime Metrics (XRランタイム指標) - XRランタイム指標の記録を有効にします。GPU Metrics (GPU指標) - GPU指標を提供します。GPU Render Stage Trace (GPUレンダリングステージトレース) - GPUレンダリングステージトレースをトラッキングします。
Enable high precision GPU render stage tracing (高精度GPUレンダリングステージトレースを有効にする) - すべてのサーフェスレンダリング作業についての追加の詳細情報を指定します。TrackEvent Config (TrackEvent設定) - 記録するTrackEventデータ。すべてのフィールドはコンマで区切ります。TrackEvent設定の詳細については、Perfettoトラックイベントのドキュメント をご覧ください。
Process Name Filter (プロセス名フィルター) - この名前と一致するプロセスからのトラックイベントのみをフィルタリングします。Process Name Filter Regex (プロセス名フィルター正規表現) - この正規表現と一致するプロセスからのトラックイベントのみをフィルタリングします。Disabled Categories (無効なカテゴリ) - トラッキングが無効になっているイベントカテゴリ。Enabled Categories (有効なカテゴリ) - トラッキングが有効になっているイベントカテゴリ。空の場合はすべてのカテゴリが有効になります。Disabled Tags (無効なタグ) - トラッキングが無効になっているタグ。Enabled Tags (有効なタグ) - トラッキングが有効になっているタグ。空の場合はすべてのタグが有効になります。Callstack Sampling Config (コールスタックサンプリング設定) - どのアプリをサンプリングするか、サンプリングをいつどんな頻度で起動するかを制御します。詳しくは、コールスタックサンプリング をご覧ください。Potential data loss during trace recording
トレース記録中に、データが失われる場合があります。これは、設定されたトレースバッファサイズが、記録期間中のイベントを記録するのに不十分な場合に発生します。予想される作業負荷を処理するのに十分なバッファサイズを選択し、潜在的なデータ損失を最小限に抑えるようトレース期間を制限してください。 この説明では、Unityのサンプルアプリが使われていますが、Unrealエンジンアプリも実質的に同じ動作をします。ここで使われているプロジェクトは
こちらアセットストリーミングサンプル です。これは、プレイヤーの位置情報など考えられるあらゆる要素に応じてジオメトリとオブジェクトの入出力をストリーミングすることにより、メモリーの圧迫度を常にチェックしながら、構築する世界をさらに広げていく方法について示します。
Perfettoトレースには、UnityとUnrealの両エンジン用のビルトインのプロファイリングマーカーが含まれていますが、カスタム関数も組み込める、
Unity と
Unrealエンジン それぞれの市販の計測APIも提供されています。例えば、ストリーミングサンプルの場合、
LODManager.csスクリプトで
LODManagerのアップデートブロックがどのように公開されていたかを示す以下のスクリーンショットをご覧ください。
これは、最終的なPerfettoトレースには以下のように表示されます。
このスクリーンショットでは、カスタムマーカー文字列IDが検索語として使われ、一致したスレッドがハイライトされています(左側に黄色で示されています)。また、トレースの先頭でインスタンスごとのマーカーがタイムラインに追加されているため、トレースの中で計測対象のブロックを容易に見つけることができます。
すべてのホットループ周辺のマーカーやその他の気になる箇所を含めた後、開発ビルド 設定を使ってプロジェクトをビルドすれば、実行時に計測が実施されるようになります。
ビルドを実行し、ヘッドセットをUSB経由でホストマシンに接続すると、ヘッドセットがMQDHの
[Performance Analyzer (パフォーマンスアナライザー)] のセクションにリスト表示されます。そうなれば、トレースを開始できます。
トレースを開始する前に実行すべき重要な最終ステップとして、設定を確認し、アプリからのATraceイベントが考慮されるようにします。デフォルトの場合、Perfettoが監視対象とする独自のイベントタイプである
TrackEvent が、
トレースSDK に含まれます。利用可能な多くのエンジンには、このタイプの計測が含まれておらず、含まれるのは
ATrace (Androidトレース形式)という別の計測タイプです。システム規模であらゆる計測を有効にするとオーバーヘッドがかなり大きくなってしまうため、マーカーをトレースに含める場合にのみ有効にするようにしてください。ATraceを含めるには、MQDHで
[Perfetto Settings (Perfetto設定)] に移動し、
[ATrace Apps (ATraceアプリ)] セクションを見つけ、バンドルIDを含めるだけです。
例えば、ストリーミングサンプルの場合、Unityの
[Project Settings (プロジェクト設定)] >
[Player (プレイヤー)] のIDは
com.DefaultCompany.AssetStreamingになります。
UnityのバンドルIDを入手したら、それをMQDHの
[Perfetto Settings (Perfetto設定)] >
[ATrace Apps (ATraceアプリ)] に追加します。
保存した後、[Record (録画)] をクリックすると、トレースが開始されます。対象となるイベントを含めるために必要なだけの長さを記録してから、[Stop (停止)] ボタンをクリックします。完了したら、デフォルトのブラウザーにトレースが自動的に表示されます。
アプリのGPUレンダリングステージトレースを記録するには、以下の手順に従います。
[Perfetto Settings (Perfetto設定)] で、[GPU Render Stage Trace (GPUレンダリングステージトレース)] と[Enable high precision GPU render stage tracing (高精度GPUレンダリングステージトレースを有効にする)] を有効にします。
メニューから、[GPU traces (GPUトレース)] > [Enable (有効にする)] の順に選択します。
アプリを実行します。
[Record (記録)] をクリックするとトレースが開始されます。
結果には、アプリのGPUトレースが表示されます。
トレースを記録してそれのトレースを表示したら、少し時間を取ってナビゲーションコントロールについて確認してください。最初は難しそうに思えるかもしれませんが、すぐに慣れるでしょう。忘れてはならない主な入力手段は、WASDとスクロールホイールです。基本的なコントロールのマッピングは、以下のようになっています。
W - ズームイン(スクラブウィンドウのフォーカスを狭める) A - 左にスクラブ S - ズームアウト(スクラブウィンドウのフォーカスを広げる) D - 右にスクラブ マウスのスクロールホイールを上下に動かす - トレースを上下にスクロールする 以下のスクリーンショットは、前に説明したPerfettoの主なメリットの1つを示しています。つまり、同じ1つのタイムライン上で多くの異なるデータソースを得ることができるということです。それには、CPU / GPUの使用率、気になるシステム指標、アプリ内マーカーなど、あらゆる情報が含まれます。このようにして、ボトルネックやパフォーマンス上の問題について相関関係や因果関係を幅広く把握できるようになります。トレースにより、CPUやGPU上で欠落フレームがある場合にそれを簡単に確認できるようになり、さらにどこに問題があるのかを調べたり、考えられる原因を大まかに把握して、SimpleperfやRenderDoc Meta Forkなどのほかのツールでさらに詳しく調べたりすることができます。
MQDHでPerfettoを使うと、すべてのトレースは
[Settings (設定)] >
[Recorded Traces (記録されたトレース)] セクションに自動的に保存されますが、それらすべてはデフォルトのファイル名でラベルが付けられます。トレースのデフォルトのファイル名は、適切なコンテキストで見直すことができるような名前にできるだけ早く変更してください。
または、ブラウザーウィンドウのダウンロードボタンをクリックして、同様に名前を変更することもできます。
過去のキャプチャ結果を再び読み込むには、ダウンロードしたファイルを開くか、MQDHの[Recorded Traces (記録されたトレース)] でトレースを選択してデフォルトブラウザーで開いてください。Perfettoのウェブサイトでトレースを開くこともできます。
v51以降のPerfettoには、コールスタックサンプリングツールtraced_perfのサポートが追加されています。traced_perfは、アプリのコールスタックを定期的にサンプリングし、Perfettoトレースに記録します。コールスタックサンプルを使うことにより、最も多くのcpu時間を消費している関数を特定できます。
LinuxのPerfやAndroidのSimplePerfなど、ほかのサンプリングプロファイラーによるコールスタックサンプリングとよく似ているPerfettoのコールスタックサンプリングですが、Perfettoのタイムラインで各サンプルを見ることができるという利点があります。これを基に特定の期間のフレームグラフを生成することができ、各サンプルに関する情報を個別に表示することができます。
Perfettoトレースは、Meta Quest開発者ハブからのコールスタックサンプリングとともに記録することができます。コールスタックサンプリングを有効にするには、[Performance Analyzer (パフォーマンスアナライザー)]タブの[Perfetto settings (Perfettoの設定)]ダイアログに移動します。[...] ボタンを選択して、[Perfetto Settings (Perfettoの設定)] にアクセスします。
下端までスクロールし、[Callstack Sampling (コールスタックサンプリング)] セクションを見つけます。適切に設定します。
Enabled App(s) (有効なアプリ) - アプリのパッケージ名。Folder(s) that contains symbols files (シンボルファイルを含むフォルダー) - PC上にあるシンボルファイルを含むフォルダーの名前のコンマ区切りリスト。この設定は、シンボルが組み込まれていない配布アプリをトレースする場合に便利です。この場合、自分のPCでシンボルファイルを用意し、そのフォルダーの名前をここに指定します。Choose upon what event to trigger callstack sampling (コールスタックサンプリングをトリガーするイベントを選択) - これで、コールスタックサンプリングのタイミングをコントロールします。PerfEvents.CounterかPerfEvents.Tracepointのどちらかを選ぶことができます。PerfettoのPerfEventConfig のドキュメントをご覧ください。Choose how often to do a callstack sampling and set proper value (コールスタックサンプリングの頻度の選択と適切な値の設定) - これで、コールスタックサンプリングの頻度をコントロールします。[Frequency (頻度)]または[Period (期間)]のどちらかを選びます。設定完了してアプリが起動したら、Perfettoトレースを実行し[Record (記録)] ボタンを押すことによって、サンプルを取得できます。
記録されたサンプルは、プロセス名の下の[Callstacks (コールスタック)] トラックにあります。
各サンプルは、トラック上でダイヤモンドによって表されています。サンプルを個別に選択するか、またはドラッグして選択することにより、フレームグラフを生成することができます。
フレームグラフは、SimplePerfのようなサンプリングプロファイラーで使われるものとよく似ています。
Unityアプリのサンプリングをする場合は、コールスタックサンプルでPerfettoトレースを取る際に[Development (開発)] ビルド設定を使用して、シンボルがビルドから削除されないようにしてください。
ビルドからシンボルが削除されるその他のビルド設定では、ビルド出力からシンボルファイルが収集され、[Perfetto Settings (Perfetto設定)] で表示されます。
以下は、Unityアプリの5秒間のトレースの例です。
グラフ内のPlayerLoop 呼び出しが選択されているため、各フレームで実行されているコードを確認できます。PhysicsManagerやBehaviorManagerなどのサブシステムでは、1フレームで時間がどのように費やされているかを確認できます。
Perfettoユーザーは以下のツールも使用できます。
GPUプロファイリングにRenderDoc Meta Forkを使用する - RenderDocグラフィックデバッグツールのフォーク。Meta QuestのSnapdragon 835チップ、Meta Quest 2のSnapdragon XR2チップ、Meta Quest ProのSnapdragon XR2+チップからの低レベルGPUプロファイリングデータ、特にそのタイルレンダラーからの情報にアクセスできるようになりました。