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 的版本号 提供商使用的协议该值由 TRACE_PROVIDER_FIFO_PROTOCOL_VERSION 英寸 //zircon/system/ulib/trace-provider/include/lib/trace-provider/provider.h。 如果跟踪管理器看到其无法理解的协议,则会关闭 并忽略来自提供程序的所有轨迹数据。

TRACE_PROVIDER_SAVE_BUFFER

此数据包从跟踪记录提供程序以流式传输形式发送到跟踪记录管理器 模式。通知跟踪管理器缓冲区已满且需要保存。 data32 字段包含封装次数, 写入从一个缓冲区切换到了下一个缓冲区。需要保存的缓冲区 为 (data32 & 1)data64 字段包含 写入到持久性缓冲区的数据

一次只能发送一个缓冲区保存请求。下一个不能是另一个 直到收到 TRACE_PROVIDER_BUFFER_SAVED 确认 上一个请求。

TRACE_PROVIDER_BUFFER_SAVED

此数据包从跟踪管理器发送到跟踪记录提供程序 在流处理模式下通知跟踪提供程序 缓冲区。data32data64 字段必须包含 与原始 TRACE_PROVIDER_SAVE_BUFFER 请求中的值相同。