X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=plugins%2Fctf%2Fcommon%2Fmetadata%2Fctf-meta.h;h=33e41090724ef761c06d0b352713621ee9245de4;hb=83ebb7f1751a20c7ba771442487f863331c754ef;hp=4c9aacf4c48e267b2dccdb8cf5509dccadbfb224;hpb=40f4ba76dd6f9508ca51b6220eaed57632281a07;p=babeltrace.git diff --git a/plugins/ctf/common/metadata/ctf-meta.h b/plugins/ctf/common/metadata/ctf-meta.h index 4c9aacf4..33e41090 100644 --- a/plugins/ctf/common/metadata/ctf-meta.h +++ b/plugins/ctf/common/metadata/ctf-meta.h @@ -59,6 +59,30 @@ enum ctf_encoding { CTF_ENCODING_UTF8, }; +enum ctf_scope { + CTF_SCOPE_PACKET_HEADER, + CTF_SCOPE_PACKET_CONTEXT, + CTF_SCOPE_EVENT_HEADER, + CTF_SCOPE_EVENT_COMMON_CONTEXT, + CTF_SCOPE_EVENT_SPECIFIC_CONTEXT, + CTF_SCOPE_EVENT_PAYLOAD, +}; + +struct ctf_clock_class { + GString *name; + GString *description; + uint64_t frequency; + uint64_t precision; + int64_t offset_seconds; + uint64_t offset_cycles; + uint8_t uuid[16]; + bool has_uuid; + bool is_absolute; + + /* Weak, set during translation */ + bt_clock_class *ir_cc; +}; + struct ctf_field_class { enum ctf_field_class_type type; unsigned int alignment; @@ -66,7 +90,7 @@ struct ctf_field_class { bool in_ir; /* Weak, set during translation. NULL if `in_ir` is false below. */ - struct bt_field_class *ir_fc; + bt_field_class *ir_fc; }; struct ctf_field_class_bit_array { @@ -79,12 +103,12 @@ struct ctf_field_class_int { struct ctf_field_class_bit_array base; enum ctf_field_class_meaning meaning; bool is_signed; - enum bt_field_class_integer_preferred_display_base disp_base; + bt_field_class_integer_preferred_display_base disp_base; enum ctf_encoding encoding; int64_t storing_index; - /* Owned by this */ - struct bt_clock_class *mapped_clock_class; + /* Weak */ + struct ctf_clock_class *mapped_clock_class; }; struct ctf_range { @@ -135,7 +159,7 @@ struct ctf_field_class_struct { }; struct ctf_field_path { - enum bt_scope root; + enum ctf_scope root; /* Array of `int64_t` */ GArray *path; @@ -188,7 +212,7 @@ struct ctf_event_class { GString *name; uint64_t id; GString *emf_uri; - enum bt_event_class_log_level log_level; + bt_event_class_log_level log_level; bool is_translated; /* Owned by this */ @@ -198,7 +222,7 @@ struct ctf_event_class { struct ctf_field_class *payload_fc; /* Weak, set during translation */ - struct bt_event_class *ir_ec; + bt_event_class *ir_ec; }; struct ctf_stream_class { @@ -223,11 +247,11 @@ struct ctf_stream_class { */ GHashTable *event_classes_by_id; - /* Owned by this */ - struct bt_clock_class *default_clock_class; + /* Weak */ + struct ctf_clock_class *default_clock_class; /* Weak, set during translation */ - struct bt_stream_class *ir_sc; + bt_stream_class *ir_sc; }; enum ctf_trace_class_env_entry_type { @@ -246,7 +270,6 @@ struct ctf_trace_class_env_entry { }; struct ctf_trace_class { - GString *name; unsigned int major; unsigned int minor; uint8_t uuid[16]; @@ -258,7 +281,7 @@ struct ctf_trace_class { uint64_t stored_value_count; - /* Array of `struct bt_clock_class *` (owned by this) */ + /* Array of `struct ctf_clock_class *` (owned by this) */ GPtrArray *clock_classes; /* Array of `struct ctf_stream_class *` */ @@ -270,7 +293,7 @@ struct ctf_trace_class { bool is_translated; /* Weak, set during translation */ - struct bt_trace *ir_tc; + bt_trace_class *ir_tc; }; static inline @@ -472,7 +495,6 @@ static inline void _ctf_field_class_int_destroy(struct ctf_field_class_int *fc) { BT_ASSERT(fc); - bt_object_put_ref(fc->mapped_clock_class); g_free(fc); } @@ -480,7 +502,6 @@ static inline void _ctf_field_class_enum_destroy(struct ctf_field_class_enum *fc) { BT_ASSERT(fc); - bt_object_put_ref(fc->base.mapped_clock_class); if (fc->mappings) { uint64_t i; @@ -1009,6 +1030,27 @@ void ctf_field_path_clear(struct ctf_field_path *fp) g_array_set_size(fp->path, 0); } +static inline +const char *ctf_scope_string(enum ctf_scope scope) +{ + switch (scope) { + case CTF_SCOPE_PACKET_HEADER: + return "CTF_SCOPE_PACKET_HEADER"; + case CTF_SCOPE_PACKET_CONTEXT: + return "CTF_SCOPE_PACKET_CONTEXT"; + case CTF_SCOPE_EVENT_HEADER: + return "CTF_SCOPE_EVENT_HEADER"; + case CTF_SCOPE_EVENT_COMMON_CONTEXT: + return "CTF_SCOPE_EVENT_COMMON_CONTEXT"; + case CTF_SCOPE_EVENT_SPECIFIC_CONTEXT: + return "CTF_SCOPE_EVENT_SPECIFIC_CONTEXT"; + case CTF_SCOPE_EVENT_PAYLOAD: + return "CTF_SCOPE_EVENT_PAYLOAD"; + default: + abort(); + } +} + static inline GString *ctf_field_path_string(struct ctf_field_path *path) { @@ -1021,8 +1063,7 @@ GString *ctf_field_path_string(struct ctf_field_path *path) goto end; } - g_string_append_printf(str, "[%s", bt_common_scope_string( - path->root)); + g_string_append_printf(str, "[%s", ctf_scope_string(path->root)); for (i = 0; i < path->path->len; i++) { g_string_append_printf(str, ", %" PRId64, @@ -1046,22 +1087,22 @@ struct ctf_field_class *ctf_field_path_borrow_field_class( struct ctf_field_class *fc; switch (field_path->root) { - case BT_SCOPE_PACKET_HEADER: + case CTF_SCOPE_PACKET_HEADER: fc = tc->packet_header_fc; break; - case BT_SCOPE_PACKET_CONTEXT: + case CTF_SCOPE_PACKET_CONTEXT: fc = sc->packet_context_fc; break; - case BT_SCOPE_EVENT_HEADER: + case CTF_SCOPE_EVENT_HEADER: fc = sc->event_header_fc; break; - case BT_SCOPE_EVENT_COMMON_CONTEXT: + case CTF_SCOPE_EVENT_COMMON_CONTEXT: fc = sc->event_common_context_fc; break; - case BT_SCOPE_EVENT_SPECIFIC_CONTEXT: + case CTF_SCOPE_EVENT_SPECIFIC_CONTEXT: fc = ec->spec_context_fc; break; - case BT_SCOPE_EVENT_PAYLOAD: + case CTF_SCOPE_EVENT_PAYLOAD: fc = ec->payload_fc; break; default: @@ -1109,7 +1150,6 @@ void ctf_field_class_int_copy_content( dst_fc->disp_base = src_fc->disp_base; dst_fc->encoding = src_fc->encoding; dst_fc->mapped_clock_class = src_fc->mapped_clock_class; - bt_object_get_ref(dst_fc->mapped_clock_class); dst_fc->storing_index = src_fc->storing_index; } @@ -1398,7 +1438,6 @@ void ctf_stream_class_destroy(struct ctf_stream_class *sc) ctf_field_class_destroy(sc->packet_context_fc); ctf_field_class_destroy(sc->event_header_fc); ctf_field_class_destroy(sc->event_common_context_fc); - bt_object_put_ref(sc->default_clock_class); g_free(sc); } @@ -1444,17 +1483,47 @@ void _ctf_trace_class_env_entry_fini(struct ctf_trace_class_env_entry *entry) } } +static inline +struct ctf_clock_class *ctf_clock_class_create(void) +{ + struct ctf_clock_class *cc = g_new0(struct ctf_clock_class, 1); + + BT_ASSERT(cc); + cc->name = g_string_new(NULL); + BT_ASSERT(cc->name); + cc->description = g_string_new(NULL); + BT_ASSERT(cc->description); + return cc; +} + +static inline +void ctf_clock_class_destroy(struct ctf_clock_class *cc) +{ + if (!cc) { + return; + } + + if (cc->name) { + g_string_free(cc->name, TRUE); + } + + if (cc->description) { + g_string_free(cc->description, TRUE); + } + + bt_clock_class_put_ref(cc->ir_cc); + g_free(cc); +} + static inline struct ctf_trace_class *ctf_trace_class_create(void) { struct ctf_trace_class *tc = g_new0(struct ctf_trace_class, 1); BT_ASSERT(tc); - tc->name = g_string_new(NULL); tc->default_byte_order = -1; - BT_ASSERT(tc->name); tc->clock_classes = g_ptr_array_new_with_free_func( - (GDestroyNotify) bt_object_put_ref); + (GDestroyNotify) ctf_clock_class_destroy); BT_ASSERT(tc->clock_classes); tc->stream_classes = g_ptr_array_new_with_free_func( (GDestroyNotify) ctf_stream_class_destroy); @@ -1471,10 +1540,6 @@ void ctf_trace_class_destroy(struct ctf_trace_class *tc) return; } - if (tc->name) { - g_string_free(tc->name, TRUE); - } - ctf_field_class_destroy(tc->packet_header_fc); if (tc->clock_classes) { @@ -1549,21 +1614,20 @@ end: } static inline -struct bt_clock_class *ctf_trace_class_borrow_clock_class_by_name( +struct ctf_clock_class *ctf_trace_class_borrow_clock_class_by_name( struct ctf_trace_class *tc, const char *name) { uint64_t i; - struct bt_clock_class *ret_cc = NULL; + struct ctf_clock_class *ret_cc = NULL; BT_ASSERT(tc); BT_ASSERT(name); for (i = 0; i < tc->clock_classes->len; i++) { - struct bt_clock_class *cc = tc->clock_classes->pdata[i]; - const char *cc_name = bt_clock_class_get_name(cc); + struct ctf_clock_class *cc = tc->clock_classes->pdata[i]; - BT_ASSERT(cc_name); - if (strcmp(cc_name, name) == 0) { + BT_ASSERT(cc->name); + if (strcmp(cc->name->str, name) == 0) { ret_cc = cc; goto end; }