如要進一步瞭解 FIFO 封包在 Fuchsia 追蹤系統中的運作方式,請參閱「Fuchsia 追蹤系統」。
格式
FIFO 封包的大小固定不變,格式如下:
typedef struct trace_provider_packet {
// One of TRACE_PROVIDER_*.
uint16_t request;
// For alignment and future concerns, must be zero.
uint16_t reserved;
// Optional data for the request.
// The contents depend on the request.
// If unused they must be passed as zero.
uint32_t data32;
uint64_t data64;
} trace_provider_packet_t;
已定義的封包
下列為 Fuchsia 追蹤系統定義的 FIFO 封包:
TRACE_provider_STARTED
這個封包會從追蹤記錄供應商傳送至追蹤記錄管理工具。通知追蹤記錄管理員已收到「開始追蹤」要求,並開始收集追蹤記錄資料。封包的 data32
欄位包含供應商所用 FIFO 通訊協定的版本編號。這個值由 //zircon/system/ulib/trace-provider/include/lib/trace-provider/provider.h
中的 TRACE_PROVIDER_FIFO_PROTOCOL_VERSION
指定。如果追蹤管理員看到無法辨識的通訊協定,則會關閉 FIFO 的一側,並忽略供應器的所有追蹤資料。
TRACE_provider_SAVE_BUFFER
這個封包會以串流模式從追蹤記錄供應商傳送至追蹤記錄管理工具。通知追蹤記錄管理員,說明緩衝區已滿,需要儲存。data32
欄位包含截斷計數,也就是寫入作業從一個緩衝區切換至下一個緩衝區的次數。需要儲存的緩衝區為 (data32 & 1)
。data64
欄位包含寫入持久緩衝區的資料結尾偏移。
一次只能傳送一個緩衝區儲存要求。收到 TRACE_PROVIDER_BUFFER_SAVED
並確認上一個要求後,才能傳送下一個要求。
TRACE_provider_BUFFER_SAVED
這個封包會從追蹤記錄管理員傳送至串流模式的追蹤提供者。通知追蹤提供者已儲存要求的緩衝區。data32
和 data64
欄位的值必須與來源 TRACE_PROVIDER_SAVE_BUFFER
要求相同。