FIFO 封包

如要進一步瞭解 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

這個封包會從追蹤記錄管理員傳送至串流模式的追蹤提供者。通知追蹤提供者已儲存要求的緩衝區。data32data64 欄位的值必須與來源 TRACE_PROVIDER_SAVE_BUFFER 要求相同。