For more information on how FIFO packets work in the Fuchsia tracing system, see Fuchsia tracing system.
FIFO packets are fixed size with the following format:
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;
The following FIFO packets are defined for the Fuchsia tracing system:
This packet is sent from trace providers to the trace manager.
Notifies the trace manager that the provider has received the "start tracing"
request and is starting to collect trace data.
The data32
field of the packet contains the version number of the FIFO
protocol that the provider is using. The value is specified by
TRACE_PROVIDER_FIFO_PROTOCOL_VERSION
in
//zircon/system/ulib/trace-provider/include/lib/trace-provider/provider.h
.
If the trace manager sees a protocol it doesn't understand, it closes
its side of the FIFO and ignores all trace data from the provider.
Note: This request is only used in streaming mode.
This packet is sent from trace providers to the trace manager in streaming
mode. Notifies the trace manager that a buffer is full and needs saving.
The data32
field contains the wrap count, which is the number of times
writing has switched from one buffer to the next. The buffer that needs saving
is (data32 & 1)
. The data64
field contains the offset of the end of
data written to the durable buffer.
Only one buffer save request may be sent at a time. The next one cannot be
sent until TRACE_PROVIDER_BUFFER_SAVED
is received acknowledging the
previous request.
This packet is sent from the trace manager to trace providers
in streaming mode. Notifies the trace provider that the requested
buffer has been saved. The data32
and data64
fields must have
the same values from the originating TRACE_PROVIDER_SAVE_BUFFER
request.