如需详细了解 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
此数据包从跟踪管理器发送到跟踪记录提供程序
在流处理模式下通知跟踪提供程序
缓冲区。data32
和 data64
字段必须包含
与原始 TRACE_PROVIDER_SAVE_BUFFER
请求中的值相同。