X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=lib%2Fgraph%2Fclock-class-priority-map.c;h=e8f9654b2eaef61f73e16d28b9a5b9816353fba7;hb=3fea54f69edd1780566230255da196cb6e82df62;hp=7e6543b4701d0739904be17fdbf1ba890dfdcec3;hpb=a03dd9f33d85b2b150b2d482a05d78f80d24c8f8;p=babeltrace.git diff --git a/lib/graph/clock-class-priority-map.c b/lib/graph/clock-class-priority-map.c index 7e6543b4..e8f9654b 100644 --- a/lib/graph/clock-class-priority-map.c +++ b/lib/graph/clock-class-priority-map.c @@ -22,6 +22,9 @@ * SOFTWARE. */ +#define BT_LOG_TAG "CC-PRIO-MAP" +#include + #include #include #include @@ -29,6 +32,10 @@ #include #include #include +#include +#include +#include +#include #include static @@ -36,11 +43,11 @@ void bt_clock_class_priority_map_destroy(struct bt_object *obj) { struct bt_clock_class_priority_map *cc_prio_map = (void *) obj; - if (!cc_prio_map) { - return; - } + BT_LOGD("Destroying component class priority map object: addr=%p", + cc_prio_map); if (cc_prio_map->entries) { + BT_LOGD("Putting clock classes."); g_ptr_array_free(cc_prio_map->entries, TRUE); } @@ -55,24 +62,32 @@ struct bt_clock_class_priority_map *bt_clock_class_priority_map_create() { struct bt_clock_class_priority_map *cc_prio_map = NULL; + BT_LOGD_STR("Creating clock class priority map object."); + cc_prio_map = g_new0(struct bt_clock_class_priority_map, 1); if (!cc_prio_map) { + BT_LOGE_STR("Failed to allocate one clock class priority map."); goto error; } - bt_object_init(cc_prio_map, bt_clock_class_priority_map_destroy); + bt_object_init_shared(&cc_prio_map->base, + bt_clock_class_priority_map_destroy); cc_prio_map->entries = g_ptr_array_new_with_free_func( (GDestroyNotify) bt_put); if (!cc_prio_map->entries) { + BT_LOGE_STR("Failed to allocate a GPtrArray."); goto error; } cc_prio_map->prios = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, (GDestroyNotify) g_free); if (!cc_prio_map->entries) { + BT_LOGE_STR("Failed to allocate a GHashTable."); goto error; } + BT_LOGD("Created clock class priority map object: addr=%p", + cc_prio_map); goto end; error: @@ -82,62 +97,44 @@ end: return cc_prio_map; } -int bt_clock_class_priority_map_get_clock_class_count( +int64_t bt_clock_class_priority_map_get_clock_class_count( struct bt_clock_class_priority_map *cc_prio_map) { - int ret = -1; - - if (!cc_prio_map) { - goto end; - } - - ret = (int) cc_prio_map->entries->len; - -end: - return ret; + BT_ASSERT_PRE_NON_NULL(cc_prio_map, "Clock class priority map"); + return (int64_t) cc_prio_map->entries->len; } -struct bt_ctf_clock_class *bt_clock_class_priority_map_get_clock_class( +struct bt_clock_class *bt_clock_class_priority_map_borrow_clock_class_by_index( struct bt_clock_class_priority_map *cc_prio_map, - unsigned int index) + uint64_t index) { - struct bt_ctf_clock_class *clock_class = NULL; - - if (!cc_prio_map || index >= cc_prio_map->entries->len) { - goto end; - } - - clock_class = g_ptr_array_index(cc_prio_map->entries, index); - bt_get(clock_class); - -end: - return clock_class; + BT_ASSERT_PRE_NON_NULL(cc_prio_map, "Clock class priority map"); + BT_ASSERT_PRE(index < cc_prio_map->entries->len, + "Index is out of bounds: index=%" PRIu64 ", count=%" PRIu64, + index, cc_prio_map->entries->len); + return g_ptr_array_index(cc_prio_map->entries, index); } -struct bt_ctf_clock_class *bt_clock_class_priority_map_get_clock_class_by_name( +struct bt_clock_class *bt_clock_class_priority_map_borrow_clock_class_by_name( struct bt_clock_class_priority_map *cc_prio_map, const char *name) { size_t i; - struct bt_ctf_clock_class *clock_class = NULL; + struct bt_clock_class *clock_class = NULL; - if (!cc_prio_map || !name) { - goto end; - } + BT_ASSERT_PRE_NON_NULL(cc_prio_map, "Clock class priority map"); + BT_ASSERT_PRE_NON_NULL(name, "Name"); for (i = 0; i < cc_prio_map->entries->len; i++) { - struct bt_ctf_clock_class *cur_cc = + struct bt_clock_class *cur_cc = g_ptr_array_index(cc_prio_map->entries, i); - // FIXME when available: use bt_ctf_clock_class_get_name() const char *cur_cc_name = - cur_cc->name ? cur_cc->name->str : NULL; + bt_clock_class_get_name(cur_cc); - if (!cur_cc_name) { - goto end; - } + BT_ASSERT(cur_cc_name); if (strcmp(cur_cc_name, name) == 0) { - clock_class = bt_get(cur_cc); + clock_class = cur_cc; goto end; } } @@ -149,7 +146,7 @@ end: struct clock_class_prio { uint64_t prio; - struct bt_ctf_clock_class *clock_class; + struct bt_clock_class *clock_class; }; static @@ -166,7 +163,7 @@ void current_highest_prio_gh_func(gpointer key, gpointer value, } static -struct clock_class_prio bt_ctf_clock_class_priority_map_current_highest_prio( +struct clock_class_prio bt_clock_class_priority_map_current_highest_prio( struct bt_clock_class_priority_map *cc_prio_map) { struct clock_class_prio func_data = { @@ -179,36 +176,31 @@ struct clock_class_prio bt_ctf_clock_class_priority_map_current_highest_prio( return func_data; } -struct bt_ctf_clock_class * -bt_clock_class_priority_map_get_highest_priority_clock_class( +struct bt_clock_class * +bt_clock_class_priority_map_borrow_highest_priority_clock_class( struct bt_clock_class_priority_map *cc_prio_map) { - struct bt_ctf_clock_class *clock_class = NULL; - - if (!cc_prio_map) { - goto end; - } - - clock_class = bt_get(cc_prio_map->highest_prio_cc); - -end: - return clock_class; + BT_ASSERT_PRE_NON_NULL(cc_prio_map, "Clock class priority map"); + return cc_prio_map->highest_prio_cc; } int bt_clock_class_priority_map_get_clock_class_priority( struct bt_clock_class_priority_map *cc_prio_map, - struct bt_ctf_clock_class *clock_class, uint64_t *priority) + struct bt_clock_class *clock_class, uint64_t *priority) { int ret = 0; uint64_t *prio; - if (!cc_prio_map || !clock_class || !priority) { - ret = -1; - goto end; - } - + BT_ASSERT_PRE_NON_NULL(cc_prio_map, "Clock class priority map"); + BT_ASSERT_PRE_NON_NULL(clock_class, "Clock class"); + BT_ASSERT_PRE_NON_NULL(priority, "Priority"); prio = g_hash_table_lookup(cc_prio_map->prios, clock_class); if (!prio) { + BT_LOGV("Clock class does not exist in clock class priority map: " + "cc-prio-map-addr=%p, clock-class-addr=%p, " + "clock-class-name=\"%s\"", + cc_prio_map, clock_class, + bt_clock_class_get_name(clock_class)); ret = -1; goto end; } @@ -221,18 +213,17 @@ end: int bt_clock_class_priority_map_add_clock_class( struct bt_clock_class_priority_map *cc_prio_map, - struct bt_ctf_clock_class *clock_class, uint64_t priority) + struct bt_clock_class *clock_class, uint64_t priority) { int ret = 0; uint64_t *prio_ptr = NULL; struct clock_class_prio cc_prio; // FIXME when available: check - // bt_ctf_clock_class_is_valid(clock_class) - if (!cc_prio_map || !clock_class || cc_prio_map->frozen) { - ret = -1; - goto end; - } + // bt_clock_class_is_valid(clock_class) + BT_ASSERT_PRE_NON_NULL(cc_prio_map, "Clock class priority map"); + BT_ASSERT_PRE_NON_NULL(clock_class, "Clock class"); + BT_ASSERT_PRE_HOT(cc_prio_map, "Clock class priority map", ""); /* Check for existing clock class */ prio_ptr = g_hash_table_lookup(cc_prio_map->prios, clock_class); @@ -244,6 +235,7 @@ int bt_clock_class_priority_map_add_clock_class( prio_ptr = g_new(uint64_t, 1); if (!prio_ptr) { + BT_LOGE_STR("Failed to allocate a uint64_t."); ret = -1; goto end; } @@ -255,15 +247,22 @@ int bt_clock_class_priority_map_add_clock_class( prio_ptr = NULL; set_highest_prio: - cc_prio = bt_ctf_clock_class_priority_map_current_highest_prio( + cc_prio = bt_clock_class_priority_map_current_highest_prio( cc_prio_map); - assert(cc_prio.clock_class); + BT_ASSERT(cc_prio.clock_class); cc_prio_map->highest_prio_cc = cc_prio.clock_class; + BT_LOGV("Added clock class to clock class priority map: " + "cc-prio-map-addr=%p, added-clock-class-addr=%p, " + "added-clock-class-name=\"%s\", " + "highest-prio-clock-class-addr=%p, " + "highest-prio-clock-class-name=\"%s\"", + cc_prio_map, clock_class, + bt_clock_class_get_name(clock_class), + cc_prio.clock_class, + bt_clock_class_get_name(cc_prio.clock_class)); end: - if (prio_ptr) { - g_free(prio_ptr); - } + g_free(prio_ptr); return ret; } @@ -276,11 +275,12 @@ struct bt_clock_class_priority_map *bt_clock_class_priority_map_copy( cc_prio_map = bt_clock_class_priority_map_create(); if (!cc_prio_map) { + BT_LOGE_STR("Cannot create empty clock class priority map."); goto error; } for (i = 0; i < orig_cc_prio_map->entries->len; i++) { - struct bt_ctf_clock_class *clock_class = + struct bt_clock_class *clock_class = g_ptr_array_index(orig_cc_prio_map->entries, i); uint64_t *prio = g_hash_table_lookup(orig_cc_prio_map->prios, clock_class); @@ -288,11 +288,19 @@ struct bt_clock_class_priority_map *bt_clock_class_priority_map_copy( cc_prio_map, clock_class, *prio); if (ret) { + BT_LOGE("Cannot add clock class to clock class priority map copy: " + "cc-prio-map-copy-addr=%p, clock-class-addr=%p, " + "clock-class-name=\"%s\"", + cc_prio_map, clock_class, + bt_clock_class_get_name(clock_class)); goto error; } } cc_prio_map->highest_prio_cc = orig_cc_prio_map->highest_prio_cc; + BT_LOGD("Copied clock class priority map: " + "original-addr=%p, copy-addr=%p", + orig_cc_prio_map, cc_prio_map); goto end; error: