blob: 80c54a70a0159fc202a425c20072fa94cd8477b6 [file] [log] [blame] [view]
# FIFO packets
For more information on how FIFO packets work in the Fuchsia tracing system,
see [Fuchsia tracing system](/docs/concepts/tracing/README.md).
## Format
FIFO packets are fixed size with the following format:
```cpp
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;
```
## Defined packets {#defined-packets}
The following FIFO packets are defined for the Fuchsia tracing system:
### TRACE_PROVIDER_STARTED
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`](/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.
### TRACE_PROVIDER_SAVE_BUFFER
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.
### TRACE_PROVIDER_BUFFER_SAVED
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.