struct ctf_stream {
struct ctf_stream_class *stream_class;
uint64_t timestamp; /* Current timestamp, in ns */
+ uint64_t prev_timestamp;
uint64_t event_id; /* Current event ID */
int has_timestamp;
uint64_t stream_id;
GPtrArray *events_by_id; /* Array of struct ctf_stream_event pointers indexed by id */
struct definition_scope *parent_def_scope; /* for initialization */
int stream_definitions_created;
+
+ /* Event discarded information */
+ uint32_t events_discarded;
+
};
struct ctf_stream_event {
struct definition_struct *event_fields;
};
+#define CTF_CLOCK_SET_FIELD(ctf_clock, field) \
+ do { \
+ (ctf_clock)->field_mask |= CTF_CLOCK_ ## field; \
+ } while (0)
+
+#define CTF_CLOCK_FIELD_IS_SET(ctf_clock, field) \
+ ((ctf_clock)->field_mask & CTF_CLOCK_ ## field)
+
+#define CTF_CLOCK_GET_FIELD(ctf_clock, field) \
+ ({ \
+ assert(CTF_CLOCK_FIELD_IS_SET(ctf_clock, field)); \
+ (ctf_clock)->(field); \
+ })
+
+struct ctf_clock {
+ GQuark name;
+ GQuark uuid;
+ char *description;
+ uint64_t freq; /* frequency, in HZ */
+ /* precision in seconds is: precision * (1/freq) */
+ uint64_t precision;
+ /*
+ * The offset from Epoch is: offset_s + (offset * (1/freq))
+ * Coarse clock offset from Epoch (in seconds).
+ */
+ uint64_t offset_s;
+ /* Fine clock offset from Epoch, in (1/freq) units. */
+ uint64_t offset;
+ int absolute;
+
+ enum { /* Fields populated mask */
+ CTF_CLOCK_name = (1U << 0),
+ } field_mask;
+};
+
#define CTF_TRACE_SET_FIELD(ctf_trace, field) \
do { \
(ctf_trace)->field_mask |= CTF_TRACE_ ## field; \
(ctf_trace)->(field); \
})
-
struct ctf_trace {
struct trace_descriptor parent;
/* root scope */
struct definition_scope *definition_scope;
GPtrArray *streams; /* Array of struct ctf_stream_class pointers */
struct ctf_stream *metadata;
+ GHashTable *clocks;
+ struct trace_collection *collection; /* Container of this trace */
struct declaration_struct *packet_header_decl;