#include <babeltrace/ctf/types.h>
#include <sys/types.h>
#include <dirent.h>
-#include <uuid/uuid.h>
+#include <babeltrace/uuid.h>
#include <assert.h>
#include <glib.h>
struct ctf_trace;
-struct ctf_stream_class;
-struct ctf_stream;
-struct ctf_event;
+struct ctf_stream_declaration;
+struct ctf_event_declaration;
+struct ctf_clock;
-struct ctf_stream {
- struct ctf_stream_class *stream_class;
+struct ctf_stream_definition {
+ struct ctf_stream_declaration *stream_class;
uint64_t timestamp; /* Current timestamp, in ns */
uint64_t event_id; /* Current event ID */
int has_timestamp;
uint64_t stream_id;
+ int consumed; /* Last packet used by caller */
struct definition_struct *trace_packet_header;
struct definition_struct *stream_packet_context;
struct definition_struct *stream_event_header;
struct definition_struct *stream_event_context;
- GPtrArray *events_by_id; /* Array of struct ctf_stream_event pointers indexed by id */
+ GPtrArray *events_by_id; /* Array of struct ctf_event_definition pointers indexed by id */
struct definition_scope *parent_def_scope; /* for initialization */
int stream_definitions_created;
+ struct ctf_clock *current_clock;
+
/* Event discarded information */
- uint32_t events_discarded;
- uint64_t prev_timestamp; /* Last event */
- uint64_t prev_timestamp_end; /* End-of-packet timestamp */
-
+ uint64_t events_discarded;
+ uint64_t prev_timestamp; /* Start-of-last-packet timestamp */
+ uint64_t prev_timestamp_end; /* End-of-last-packet timestamp */
};
-struct ctf_stream_event {
+struct ctf_event_definition {
+ struct ctf_stream_definition *stream;
struct definition_struct *event_context;
struct definition_struct *event_fields;
};
enum { /* Fields populated mask */
CTF_CLOCK_name = (1U << 0),
+ CTF_CLOCK_freq = (1U << 1),
} field_mask;
};
(ctf_trace)->(field); \
})
+#define TRACER_ENV_LEN 128
+
+/* tracer-specific environment */
+struct ctf_tracer_env {
+ int vpid; /* negative if unset */
+
+ /* All strings below: "" if unset. */
+ char procname[TRACER_ENV_LEN];
+ char domain[TRACER_ENV_LEN];
+ char sysname[TRACER_ENV_LEN];
+ char release[TRACER_ENV_LEN];
+ char version[TRACER_ENV_LEN];
+};
+
struct ctf_trace {
struct trace_descriptor parent;
/* root scope */
struct declaration_scope *declaration_scope;
/* innermost definition scope. to be used as parent of stream. */
struct definition_scope *definition_scope;
- GPtrArray *streams; /* Array of struct ctf_stream_class pointers */
- struct ctf_stream *metadata;
+ GPtrArray *streams; /* Array of struct ctf_stream_declaration pointers */
+ struct ctf_stream_definition *metadata;
GHashTable *clocks;
+ struct ctf_clock *single_clock; /* currently supports only one clock */
struct trace_collection *collection; /* Container of this trace */
+ GPtrArray *event_declarations; /* Array of all the struct bt_ctf_event_decl */
struct declaration_struct *packet_header_decl;
uint64_t major;
uint64_t minor;
- uuid_t uuid;
+ unsigned char uuid[BABELTRACE_UUID_LEN];
int byte_order; /* trace BYTE_ORDER. 0 if unset. */
+ struct ctf_tracer_env env;
enum { /* Fields populated mask */
CTF_TRACE_major = (1U << 0),
/* Heap of streams, ordered to always get the lowest timestam */
struct ptr_heap *stream_heap;
- char collection_path[PATH_MAX];
char path[PATH_MAX];
- char domain[PATH_MAX];
- char procname[PATH_MAX];
- char vpid[PATH_MAX];
+
+ struct bt_context *ctx;
+ struct bt_trace_handle *handle;
};
#define CTF_STREAM_SET_FIELD(ctf_stream, field) \
(ctf_stream)->(field); \
})
-struct ctf_stream_class {
+struct ctf_stream_declaration {
struct ctf_trace *trace;
/* parent is lexical scope conaining the stream scope */
struct declaration_scope *declaration_scope;
/* innermost definition scope. to be used as parent of event. */
struct definition_scope *definition_scope;
- GPtrArray *events_by_id; /* Array of struct ctf_event pointers indexed by id */
+ GPtrArray *events_by_id; /* Array of struct ctf_event_declaration pointers indexed by id */
GHashTable *event_quark_to_id; /* GQuark to numeric id */
struct declaration_struct *packet_context_decl;
CTF_STREAM_stream_id = (1 << 0),
} field_mask;
- GPtrArray *streams; /* Array of struct ctf_stream pointers */
+ GPtrArray *streams; /* Array of struct ctf_stream_definition pointers */
};
#define CTF_EVENT_SET_FIELD(ctf_event, field) \
(ctf_event)->(field); \
})
-struct ctf_event {
+struct ctf_event_declaration {
/* stream mapped by stream_id */
- struct ctf_stream_class *stream;
+ struct ctf_stream_declaration *stream;
/* parent is lexical scope conaining the event scope */
struct declaration_scope *declaration_scope;
GQuark name;
uint64_t id; /* Numeric identifier within the stream */
uint64_t stream_id;
- GQuark loglevel_identifier;
- int64_t loglevel_value;
+ int loglevel;
enum { /* Fields populated mask */
CTF_EVENT_name = (1 << 0),
CTF_EVENT_id = (1 << 1),
CTF_EVENT_stream_id = (1 << 2),
- CTF_EVENT_loglevel_identifier = (1 << 3),
- CTF_EVENT_loglevel_value = (1 << 4),
+ CTF_EVENT_loglevel = (1 << 4),
} field_mask;
};