X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=blobdiff_plain;f=include%2Fbabeltrace%2Fctf%2Fmetadata.h;h=1b78762b2a9e1da9a12dc793c10a92507b6b1558;hp=56b0aa22e6f913466de2422a6e65ba45db35caef;hb=c462e188f3e7819c7bc74f671038cdbf36e8c3c0;hpb=e28d4618a97ed5c6da7cda25af9d1121808664cf diff --git a/include/babeltrace/ctf/metadata.h b/include/babeltrace/ctf/metadata.h index 56b0aa22..1b78762b 100644 --- a/include/babeltrace/ctf/metadata.h +++ b/include/babeltrace/ctf/metadata.h @@ -17,172 +17,35 @@ * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. */ #include #include #include +#include +#include +#include #include #include -#include #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 { - 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_definition parent; struct ctf_stream_pos pos; /* current stream position */ }; -#define CTF_TRACE_SET_FIELD(ctf_trace, field) \ - do { \ - (ctf_trace)->field_mask |= CTF_TRACE_ ## field; \ - } while (0) - -#define CTF_TRACE_FIELD_IS_SET(ctf_trace, field) \ - ((ctf_trace)->field_mask & CTF_TRACE_ ## field) - -#define CTF_TRACE_GET_FIELD(ctf_trace, field) \ - ({ \ - assert(CTF_TRACE_FIELD_IS_SET(ctf_trace, field)); \ - (ctf_trace)->(field); \ - }) - - -struct ctf_trace { - struct trace_descriptor parent; - /* root scope */ - struct declaration_scope *root_declaration_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_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; /* 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_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) \ - do { \ - (ctf_stream)->field_mask |= CTF_STREAM_ ## field; \ - } while (0) - -#define CTF_STREAM_FIELD_IS_SET(ctf_stream, field) \ - ((ctf_stream)->field_mask & CTF_STREAM_ ## field) - -#define CTF_STREAM_GET_FIELD(ctf_stream, field) \ - ({ \ - assert(CTF_STREAM_FIELD_IS_SET(ctf_stream, field)); \ - (ctf_stream)->(field); \ - }) - -struct ctf_stream_class { - 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 */ - GHashTable *event_quark_to_id; /* GQuark to numeric id */ - - /* Declarations only used when parsing */ - struct declaration_struct *packet_context_decl; - struct declaration_struct *event_header_decl; - struct declaration_struct *event_context_decl; - - uint64_t stream_id; - - enum { /* Fields populated mask */ - CTF_STREAM_stream_id = (1 << 0), - } field_mask; - - GPtrArray *files; /* Array of struct ctf_file_stream pointers */ -}; - -#define CTF_EVENT_SET_FIELD(ctf_event, field) \ - do { \ - (ctf_event)->field_mask |= CTF_EVENT_ ## field; \ - } while (0) - -#define CTF_EVENT_FIELD_IS_SET(ctf_event, field) \ - ((ctf_event)->field_mask & CTF_EVENT_ ## field) - -#define CTF_EVENT_GET_FIELD(ctf_event, field) \ - ({ \ - assert(CTF_EVENT_FIELD_IS_SET(ctf_event, field)); \ - (ctf_event)->(field); \ - }) - -struct ctf_event { - /* stream mapped by stream_id */ - struct ctf_stream_class *stream; - /* parent is lexical scope conaining the event scope */ - struct declaration_scope *declaration_scope; - - /* Declarations only used when parsing */ - struct declaration_struct *context_decl; - struct declaration_struct *fields_decl; - - GQuark name; - uint64_t id; /* Numeric identifier within the stream */ - uint64_t stream_id; - - enum { /* Fields populated mask */ - CTF_EVENT_name = (1 << 0), - CTF_EVENT_id = (1 << 1), - CTF_EVENT_stream_id = (1 << 2), - } field_mask; -}; - #define HEADER_END char end_field #define header_sizeof(type) offsetof(typeof(type), end_field) @@ -195,6 +58,8 @@ struct metadata_packet_header { uint8_t compression_scheme; /* 0 if unused */ uint8_t encryption_scheme; /* 0 if unused */ uint8_t checksum_scheme; /* 0 if unused */ + uint8_t major; /* CTF spec major version number */ + uint8_t minor; /* CTF spec minor version number */ HEADER_END; };