X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Flib%2Ftrace-ir%2Ftrace-class.c;h=d968ddfe236689d1e92e312e52451d19e5347acf;hb=5084732e40a7925d22f741e4ed08f19d36078fbe;hp=42c5bfed4f79c4ace7cca666b26ef8050480c1bc;hpb=3f7d4d90b0456de9d34fac337350818ef06163bd;p=babeltrace.git diff --git a/src/lib/trace-ir/trace-class.c b/src/lib/trace-ir/trace-class.c index 42c5bfed..d968ddfe 100644 --- a/src/lib/trace-ir/trace-class.c +++ b/src/lib/trace-ir/trace-class.c @@ -21,8 +21,8 @@ * SOFTWARE. */ -#define BT_LOG_TAG "TRACE" -#include "lib/lib-logging.h" +#define BT_LOG_TAG "LIB/TRACE" +#include "lib/logging.h" #include "lib/assert-pre.h" #include @@ -43,7 +43,6 @@ #include #include -#include "attributes.h" #include "clock-class.h" #include "event-class.h" #include "event.h" @@ -54,14 +53,15 @@ #include "stream.h" #include "trace.h" #include "utils.h" +#include "lib/func-status.h" struct bt_trace_class_destruction_listener_elem { bt_trace_class_destruction_listener_func func; void *data; }; -#define BT_ASSERT_PRE_TRACE_CLASS_HOT(_tc) \ - BT_ASSERT_PRE_HOT((_tc), "Trace class", ": %!+T", (_tc)) +#define BT_ASSERT_PRE_DEV_TRACE_CLASS_HOT(_tc) \ + BT_ASSERT_PRE_DEV_HOT((_tc), "Trace class", ": %!+T", (_tc)) static void destroy_trace_class(struct bt_object *obj) @@ -109,18 +109,6 @@ void destroy_trace_class(struct bt_object *obj) tc->destruction_listeners = NULL; } - if (tc->environment) { - BT_LOGD_STR("Destroying environment attributes."); - bt_attributes_destroy(tc->environment); - tc->environment = NULL; - } - - if (tc->name.str) { - g_string_free(tc->name.str, TRUE); - tc->name.str = NULL; - tc->name.value = NULL; - } - if (tc->stream_classes) { BT_LOGD_STR("Destroying stream classes."); g_ptr_array_free(tc->stream_classes, TRUE); @@ -138,7 +126,7 @@ struct bt_trace_class *bt_trace_class_create(bt_self_component *self_comp) BT_LOGD_STR("Creating default trace class object."); tc = g_new0(struct bt_trace_class, 1); if (!tc) { - BT_LOGE_STR("Failed to allocate one trace class."); + BT_LIB_LOGE_APPEND_CAUSE("Failed to allocate one trace class."); goto error; } @@ -147,26 +135,14 @@ struct bt_trace_class *bt_trace_class_create(bt_self_component *self_comp) tc->stream_classes = g_ptr_array_new_with_free_func( (GDestroyNotify) bt_object_try_spec_release); if (!tc->stream_classes) { - BT_LOGE_STR("Failed to allocate one GPtrArray."); - goto error; - } - - tc->name.str = g_string_new(NULL); - if (!tc->name.str) { - BT_LOGE_STR("Failed to allocate one GString."); - goto error; - } - - tc->environment = bt_attributes_create(); - if (!tc->environment) { - BT_LOGE_STR("Cannot create empty attributes object."); + BT_LIB_LOGE_APPEND_CAUSE("Failed to allocate one GPtrArray."); goto error; } tc->destruction_listeners = g_array_new(FALSE, TRUE, sizeof(struct bt_trace_class_destruction_listener_elem)); if (!tc->destruction_listeners) { - BT_LOGE_STR("Failed to allocate one GArray."); + BT_LIB_LOGE_APPEND_CAUSE("Failed to allocate one GArray."); goto error; } @@ -181,41 +157,7 @@ end: return tc; } -const char *bt_trace_class_get_name(const struct bt_trace_class *tc) -{ - BT_ASSERT_PRE_NON_NULL(tc, "Trace class"); - return tc->name.value; -} - -enum bt_trace_class_status bt_trace_class_set_name( - struct bt_trace_class *tc, const char *name) -{ - BT_ASSERT_PRE_NON_NULL(tc, "Trace class"); - BT_ASSERT_PRE_NON_NULL(name, "Name"); - BT_ASSERT_PRE_TRACE_CLASS_HOT(tc); - g_string_assign(tc->name.str, name); - tc->name.value = tc->name.str->str; - BT_LIB_LOGD("Set trace class's name: %!+T", tc); - return BT_TRACE_CLASS_STATUS_OK; -} - -bt_uuid bt_trace_class_get_uuid(const struct bt_trace_class *tc) -{ - BT_ASSERT_PRE_NON_NULL(tc, "Trace class"); - return tc->uuid.value; -} - -void bt_trace_class_set_uuid(struct bt_trace_class *tc, bt_uuid uuid) -{ - BT_ASSERT_PRE_NON_NULL(tc, "Trace class"); - BT_ASSERT_PRE_NON_NULL(uuid, "UUID"); - BT_ASSERT_PRE_TRACE_CLASS_HOT(tc); - memcpy(tc->uuid.uuid, uuid, BABELTRACE_UUID_LEN); - tc->uuid.value = tc->uuid.uuid; - BT_LIB_LOGD("Set trace class's UUID: %!+T", tc); -} - -enum bt_trace_class_status bt_trace_class_add_destruction_listener( +enum bt_trace_class_add_listener_status bt_trace_class_add_destruction_listener( const struct bt_trace_class *_tc, bt_trace_class_destruction_listener_func listener, void *data, uint64_t *listener_id) @@ -253,20 +195,19 @@ enum bt_trace_class_status bt_trace_class_add_destruction_listener( BT_LIB_LOGD("Added trace class destruction listener: %![tc-]+T, " "listener-id=%" PRIu64, tc, i); - return BT_TRACE_CLASS_STATUS_OK; + return BT_FUNC_STATUS_OK; } -BT_ASSERT_PRE_FUNC static bool has_listener_id(const struct bt_trace_class *tc, uint64_t listener_id) { BT_ASSERT(listener_id < tc->destruction_listeners->len); return (&g_array_index(tc->destruction_listeners, struct bt_trace_class_destruction_listener_elem, - listener_id))->func != NULL; + listener_id))->func; } -enum bt_trace_class_status bt_trace_class_remove_destruction_listener( +enum bt_trace_class_remove_listener_status bt_trace_class_remove_destruction_listener( const struct bt_trace_class *_tc, uint64_t listener_id) { struct bt_trace_class *tc = (void *) _tc; @@ -286,137 +227,20 @@ enum bt_trace_class_status bt_trace_class_remove_destruction_listener( BT_LIB_LOGD("Removed trace class destruction listener: " "%![tc-]+T, listener-id=%" PRIu64, tc, listener_id); - return BT_TRACE_CLASS_STATUS_OK; -} - -BT_ASSERT_FUNC -static -bool trace_has_environment_entry(const struct bt_trace_class *tc, const char *name) -{ - BT_ASSERT(tc); - - return bt_attributes_borrow_field_value_by_name( - tc->environment, name) != NULL; -} - -static -enum bt_trace_class_status set_environment_entry(struct bt_trace_class *tc, - const char *name, struct bt_value *value) -{ - int ret; - - BT_ASSERT(tc); - BT_ASSERT(name); - BT_ASSERT(value); - BT_ASSERT_PRE(!tc->frozen || - !trace_has_environment_entry(tc, name), - "Trace class is frozen: cannot replace environment entry: " - "%![tc-]+T, entry-name=\"%s\"", tc, name); - ret = bt_attributes_set_field_value(tc->environment, name, - value); - if (ret) { - ret = BT_TRACE_CLASS_STATUS_NOMEM; - BT_LIB_LOGE("Cannot set trace class's environment entry: " - "%![tc-]+T, entry-name=\"%s\"", tc, name); - } else { - bt_value_freeze(value); - BT_LIB_LOGD("Set trace class's environment entry: " - "%![tc-]+T, entry-name=\"%s\"", tc, name); - } - - return ret; -} - -enum bt_trace_class_status bt_trace_class_set_environment_entry_string( - struct bt_trace_class *tc, const char *name, const char *value) -{ - int ret; - struct bt_value *value_obj; - BT_ASSERT_PRE_NON_NULL(tc, "Trace class"); - BT_ASSERT_PRE_NON_NULL(name, "Name"); - BT_ASSERT_PRE_NON_NULL(value, "Value"); - value_obj = bt_value_string_create_init(value); - if (!value_obj) { - BT_LOGE_STR("Cannot create a string value object."); - ret = -1; - goto end; - } - - /* set_environment_entry() logs errors */ - ret = set_environment_entry(tc, name, value_obj); - -end: - bt_object_put_ref(value_obj); - return ret; -} - -enum bt_trace_class_status bt_trace_class_set_environment_entry_integer( - struct bt_trace_class *tc, const char *name, int64_t value) -{ - int ret; - struct bt_value *value_obj; - BT_ASSERT_PRE_NON_NULL(tc, "Trace class"); - BT_ASSERT_PRE_NON_NULL(name, "Name"); - value_obj = bt_value_signed_integer_create_init(value); - if (!value_obj) { - BT_LOGE_STR("Cannot create an integer value object."); - ret = BT_TRACE_CLASS_STATUS_NOMEM; - goto end; - } - - /* set_environment_entry() logs errors */ - ret = set_environment_entry(tc, name, value_obj); - -end: - bt_object_put_ref(value_obj); - return ret; -} - -uint64_t bt_trace_class_get_environment_entry_count(const struct bt_trace_class *tc) -{ - int64_t ret; - - BT_ASSERT_PRE_NON_NULL(tc, "Trace class"); - ret = bt_attributes_get_count(tc->environment); - BT_ASSERT(ret >= 0); - return (uint64_t) ret; -} - -void bt_trace_class_borrow_environment_entry_by_index_const( - const struct bt_trace_class *tc, uint64_t index, - const char **name, const struct bt_value **value) -{ - BT_ASSERT_PRE_NON_NULL(tc, "Trace class"); - BT_ASSERT_PRE_NON_NULL(name, "Name"); - BT_ASSERT_PRE_NON_NULL(value, "Value"); - BT_ASSERT_PRE_VALID_INDEX(index, - bt_attributes_get_count(tc->environment)); - *value = bt_attributes_borrow_field_value(tc->environment, index); - BT_ASSERT(*value); - *name = bt_attributes_get_field_name(tc->environment, index); - BT_ASSERT(*name); -} - -const struct bt_value *bt_trace_class_borrow_environment_entry_value_by_name_const( - const struct bt_trace_class *tc, const char *name) -{ - BT_ASSERT_PRE_NON_NULL(tc, "Trace class"); - BT_ASSERT_PRE_NON_NULL(name, "Name"); - return bt_attributes_borrow_field_value_by_name(tc->environment, - name); + return BT_FUNC_STATUS_OK; } uint64_t bt_trace_class_get_stream_class_count(const struct bt_trace_class *tc) { - BT_ASSERT_PRE_NON_NULL(tc, "Trace class"); + BT_ASSERT_PRE_DEV_NON_NULL(tc, "Trace class"); return (uint64_t) tc->stream_classes->len; } struct bt_stream_class *bt_trace_class_borrow_stream_class_by_index( struct bt_trace_class *tc, uint64_t index) { - BT_ASSERT_PRE_NON_NULL(tc, "Trace class"); - BT_ASSERT_PRE_VALID_INDEX(index, tc->stream_classes->len); + BT_ASSERT_PRE_DEV_NON_NULL(tc, "Trace class"); + BT_ASSERT_PRE_DEV_VALID_INDEX(index, tc->stream_classes->len); return g_ptr_array_index(tc->stream_classes, index); } @@ -434,7 +258,7 @@ struct bt_stream_class *bt_trace_class_borrow_stream_class_by_id( struct bt_stream_class *stream_class = NULL; uint64_t i; - BT_ASSERT_PRE_NON_NULL(tc, "Trace class"); + BT_ASSERT_PRE_DEV_NON_NULL(tc, "Trace class"); for (i = 0; i < tc->stream_classes->len; i++) { struct bt_stream_class *stream_class_candidate = @@ -467,7 +291,7 @@ void _bt_trace_class_freeze(const struct bt_trace_class *tc) bt_bool bt_trace_class_assigns_automatic_stream_class_id(const struct bt_trace_class *tc) { - BT_ASSERT_PRE_NON_NULL(tc, "Trace class"); + BT_ASSERT_PRE_DEV_NON_NULL(tc, "Trace class"); return (bt_bool) tc->assigns_automatic_stream_class_id; } @@ -475,7 +299,7 @@ void bt_trace_class_set_assigns_automatic_stream_class_id(struct bt_trace_class bt_bool value) { BT_ASSERT_PRE_NON_NULL(tc, "Trace class"); - BT_ASSERT_PRE_TRACE_CLASS_HOT(tc); + BT_ASSERT_PRE_DEV_TRACE_CLASS_HOT(tc); tc->assigns_automatic_stream_class_id = (bool) value; BT_LIB_LOGD("Set trace class's automatic stream class ID " "assignment property: %!+T", tc);