[Trace Event Format - Google ドキュメント](https://docs.google.com/document/d/1CvAClvFfyA5R-PhYUmn5OOQtYMH4h6I0nSsKchNAySU/preview?tab=t.0#heading=h.yr4qxyxotyw)o 「Trace Event Format」に関する文書の要約は以下の通りです。 この文書は、Trace Viewer アプリケーションが処理するトレースデータ表現である Trace Event Format を定義しています。主に JSON フォーマットについて説明しており、以下の2つの形式があります。 1. **JSON Array Format**: イベントオブジェクトの配列形式。イベントの順序は問われません。 ```json [ {...}, {...} ] ``` 2. **JSON Object Format**: イベントオブジェクトの配列 (`traceEvents`) を含む JSON オブジェクト形式。追加のメタデータ(表示単位、システムトレースデータ、スタックフレーム辞書など)を含めることができます。 ```json { "traceEvents": [ {...}, {...} ], "displayTimeUnit": "ns", ... } ``` 各イベントは、以下の共通フィールドを持つのが一般的です。 - `name`: イベント名 - `cat`: カテゴリ(複数指定可) - `ph`: イベントタイプを示すフェーズ(一文字) - `ts`: タイムスタンプ (マイクロ秒単位) - `pid`: プロセスID - `tid`: スレッドID - `args`: イベントの引数(JSONオブジェクト) 文書では、様々なイベントタイプとそのフェーズ、用途について詳細に説明しています。主なイベントタイプは以下の通りです。 * **Duration Events (ph: B/E)**: あるスレッド上の期間を表します。ネスト可能です。 * **Complete Events (ph: X)**: Duration イベントのペアを単一イベントで表現し、トレースサイズを削減します。`dur` フィールドで期間を指定します。 * **Instant Events (ph: i)**: duration がない瞬間的なイベントです。`s` フィールドでスコープ (global, process, thread) を指定できます。 * **Counter Events (ph: C)**: 時間経過に伴う数値の変化を追跡します。`args` で複数のデータ系列を指定できます。 * **Async Events (ph: b/n/e)**: 非同期操作の期間や時点を表します。同じ `cat` と `id` を持つイベントが関連付けられます。ネスト可能です。 * **Flow Events (ph: s/t/f)**: スレッドやプロセスを跨ぐ関連付け(フロー)を表し、イベント間を矢印で結びます。特定のスライスに紐付けられます。 * **Sample Events (ph: P)**: サンプリングプロファイラの結果を表します(非推奨)。 * **Object Events (ph: N/O/D)**: オブジェクトの生成 (N)、スナップショット (O)、破棄 (D) を追跡します。`id` でオブジェクトを識別します。 * **Snapshots (ph: O)**: オブジェクトの特定時点の状態を `args.snapshot` に記録します。 * **Metadata Events (ph: M)**: プロセス名、スレッド名、ソート順などの付加情報を提供します。 * **Memory Dump Events (ph: V/v)**: メモリダンプ情報 (V: グローバル、v: プロセス) を含みます。 * **Mark Events (ph: R)**: ナビゲーションタイミングAPIなどのマークを表します。 * **Clock Sync Events (ph: c)**: 異なるトレースログ間のクロック同期に使用されます。 * **Context Events (ph: (/) )**: イベントシーケンスを特定のコンテキストに関連付けます。 * **Linking IDs (ph: =)**: 複数の ID を同じものとして関連付けます。 また、文書は以下の内容にも触れています。 - `id` や `id2` フィールドを使ったイベントの関連付け。`id2` では process-local か global かを明示できます。 - **StackFrames Dictionary**: スタックトレースを効率的に表現するための辞書形式。 - **Global Samples**: OSレベルのサンプリングデータを格納するための形式。 - **Linux Debug Format**: Linux ftrace や Android systrace HTML ダンプ形式も Trace Viewer で処理できること。 文書の最終更新は2016年10月ですが、付録で2020年9月時点でのスレッド命令カウントなどの追加情報や関連ツールへのリンクが示されています。 要するに、この文書は Trace Viewer で利用されるトレースデータの構造と、様々な種類のイベント(期間、瞬間、カウンター、非同期、オブジェクトなど)の定義、そしてそれらを JSON 形式でどのように表現するかを詳細に説明したものです。