[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 形式でどのように表現するかを詳細に説明したものです。