-Common Trace Format (CTF) Specification (pre-v1.8)
+Common Trace Format (CTF) Specification (v1.8.1)
Mathieu Desnoyers, EfficiOS Inc.
3. Event stream
An event stream can be divided into contiguous event packets of variable
-size. These subdivisions have a variable size. An event packet can
-contain a certain amount of padding at the end. The stream header is
-repeated at the beginning of each event packet. The rationale for the
-event stream design choices is explained in Appendix B. Stream Header
-Rationale.
+size. An event packet can contain a certain amount of padding at the
+end. The stream header is repeated at the beginning of each event
+packet. The rationale for the event stream design choices is explained
+in Appendix B. Stream Header Rationale.
The event stream header will therefore be referred to as the "event packet
header" throughout the rest of this document.
4.1.3 Byte order
-By default, the native endianness of the source architecture the trace is used.
+By default, the native endianness of the source architecture is used.
Byte order can be overridden for a basic type by specifying a "byte_order"
attribute. Typical use-case is to specify the network byte order (big endian:
"be") to save data captured from the network into the trace without conversion.
};
If the values are omitted, the enumeration starts at 0 and increment of 1 for
-each entry:
+each entry. An entry with omitted value that follows a range entry takes
+as value the end_value of the previous range + 1:
enum name : unsigned int {
ZERO,
include all event timestamps assigned to events contained within the packet.
- Events discarded count
- Snapshot of a per-stream free-running counter, counting the number of
- events discarded that were supposed to be written in the stream prior to
- the first event in the event packet.
- * Note: producer-consumer buffer full condition should fill the current
+ events discarded that were supposed to be written in the stream after
+ the last event in the event packet.
+ * Note: producer-consumer buffer full condition can fill the current
event packet with padding so we know exactly where events have been
- discarded.
+ discarded. However, if the buffer full condition chooses not
+ to fill the current event packet with padding, all we know
+ about the timestamp range in which the events have been
+ discarded is that it is somewhere between the beginning and
+ the end of the packet.
- Lossless compression scheme used for the event packet content. Applied
directly to raw data. New types of compression can be added in following
versions of the format.
};
The packet-based meta-data can be converted to a text-only meta-data by
-concatenating all the strings in contains.
+concatenating all the strings it contains.
In the textual representation of the meta-data, the text contained
within "/*" and "*/", as well as within "//" and end of line, are
in a stream.
trace {
- major = value; /* Trace format version */
- minor = value;
+ major = value; /* CTF spec version major number */
+ minor = value; /* CTF spec version minor number */
uuid = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"; /* Trace UUID */
byte_order = be OR le; /* Endianness (required) */
packet.header := struct {
2.3) CTF-specific declarations
ctf-specifier:
+ clock { ctf-assignment-expression-list-opt }
event { ctf-assignment-expression-list-opt }
stream { ctf-assignment-expression-list-opt }
env { ctf-assignment-expression-list-opt }