X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=blobdiff_plain;f=include%2Fbabeltrace%2Fctf%2Fmetadata.h;h=56b0aa22e6f913466de2422a6e65ba45db35caef;hp=d833a56d771dad990d5bf566160254f86f7107f8;hb=e28d4618a97ed5c6da7cda25af9d1121808664cf;hpb=65102a8c8f70b08a27887c89b23f6d0b543ea67e diff --git a/include/babeltrace/ctf/metadata.h b/include/babeltrace/ctf/metadata.h index d833a56d..56b0aa22 100644 --- a/include/babeltrace/ctf/metadata.h +++ b/include/babeltrace/ctf/metadata.h @@ -20,6 +20,7 @@ */ #include +#include #include #include #include @@ -27,15 +28,36 @@ #include #include +#define CTF_MAGIC 0xC1FC1FC1 +#define TSDL_MAGIC 0x75D11D57 + struct ctf_trace; +struct ctf_stream_class; struct ctf_stream; struct ctf_event; -struct ctf_stream_file { - /* Information about stream backing file */ - int fd; - char *mmap; /* current stream mmap */ - struct stream_pos pos; /* current stream position */ +struct ctf_stream { + struct ctf_stream_class *stream_class; + uint64_t timestamp; /* Current timestamp, in ns */ + + 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_file_event pointers indexed by id */ + struct definition_scope *parent_def_scope; /* for initialization */ + int stream_definitions_created; +}; + +struct ctf_file_event { + struct definition_struct *event_context; + struct definition_struct *event_fields; +}; + +struct ctf_file_stream { + uint64_t stream_id; + struct ctf_stream stream; + struct ctf_stream_pos pos; /* current stream position */ }; #define CTF_TRACE_SET_FIELD(ctf_trace, field) \ @@ -54,28 +76,39 @@ struct ctf_stream_file { struct ctf_trace { + struct trace_descriptor parent; /* root scope */ struct declaration_scope *root_declaration_scope; struct declaration_scope *declaration_scope; - GPtrArray *streams; /* Array of struct ctf_stream pointers*/ - struct ctf_stream_file metadata; + /* 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_file_stream metadata; + + /* Declarations only used when parsing */ + struct declaration_struct *packet_header_decl; uint64_t major; uint64_t minor; uuid_t uuid; - int byte_order; + int byte_order; /* trace BYTE_ORDER. 0 if unset. */ enum { /* Fields populated mask */ - CTF_TRACE_major = (1U << 0), - CTF_TRACE_minor = (1U << 1), - CTF_TRACE_uuid = (1U << 2), + CTF_TRACE_major = (1U << 0), + CTF_TRACE_minor = (1U << 1), + CTF_TRACE_uuid = (1U << 2), + CTF_TRACE_byte_order = (1U << 3), + CTF_TRACE_packet_header = (1U << 4), } field_mask; /* Information about trace backing directory and files */ DIR *dir; int dirfd; int flags; /* open flags */ + + /* Heap of streams, ordered to always get the lowest timestam */ + struct ptr_heap *stream_heap; }; #define CTF_STREAM_SET_FIELD(ctf_stream, field) \ @@ -92,7 +125,7 @@ struct ctf_trace { (ctf_stream)->(field); \ }) -struct ctf_stream { +struct ctf_stream_class { struct ctf_trace *trace; /* parent is lexical scope conaining the stream scope */ struct declaration_scope *declaration_scope; @@ -106,18 +139,13 @@ struct ctf_stream { struct declaration_struct *event_header_decl; struct declaration_struct *event_context_decl; - /* Definitions used afterward */ - struct definition_struct *packet_context; - struct definition_struct *event_header; - struct definition_struct *event_context; - uint64_t stream_id; enum { /* Fields populated mask */ CTF_STREAM_stream_id = (1 << 0), } field_mask; - struct ctf_stream_file file; /* Backing file */ + GPtrArray *files; /* Array of struct ctf_file_stream pointers */ }; #define CTF_EVENT_SET_FIELD(ctf_event, field) \ @@ -136,7 +164,7 @@ struct ctf_stream { struct ctf_event { /* stream mapped by stream_id */ - struct ctf_stream *stream; + struct ctf_stream_class *stream; /* parent is lexical scope conaining the event scope */ struct declaration_scope *declaration_scope; @@ -144,10 +172,6 @@ struct ctf_event { struct declaration_struct *context_decl; struct declaration_struct *fields_decl; - /* Definitions used afterward */ - struct definition_struct *context; - struct definition_struct *fields; - GQuark name; uint64_t id; /* Numeric identifier within the stream */ uint64_t stream_id; @@ -159,4 +183,19 @@ struct ctf_event { } field_mask; }; +#define HEADER_END char end_field +#define header_sizeof(type) offsetof(typeof(type), end_field) + +struct metadata_packet_header { + uint32_t magic; /* 0x75D11D57 */ + uint8_t uuid[16]; /* Unique Universal Identifier */ + uint32_t checksum; /* 0 if unused */ + uint32_t content_size; /* in bits */ + uint32_t packet_size; /* in bits */ + uint8_t compression_scheme; /* 0 if unused */ + uint8_t encryption_scheme; /* 0 if unused */ + uint8_t checksum_scheme; /* 0 if unused */ + HEADER_END; +}; + #endif /* _BABELTRACE_CTF_METADATA_H */