如需详细了解 FIFO 数据包在 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
请求中的值相同。