X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=lib%2Ftrace-ir%2Fclock-class.c;h=515cdb4fd872be0e02c2a7f3f4f64f31659735be;hb=68b66a256a54d32992dfefeaad11eea88b7df234;hp=fd82342ff9d689de3034e21c7c0333cc29ef8a92;hpb=e2f7325d1e58710ee928373592adcee466f93d06;p=babeltrace.git diff --git a/lib/trace-ir/clock-class.c b/lib/trace-ir/clock-class.c index fd82342f..515cdb4f 100644 --- a/lib/trace-ir/clock-class.c +++ b/lib/trace-ir/clock-class.c @@ -22,20 +22,21 @@ */ #define BT_LOG_TAG "CLOCK-CLASS" -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include -#include -#include +#include +#include #define BT_ASSERT_PRE_CLOCK_CLASS_HOT(_cc) \ BT_ASSERT_PRE_HOT((_cc), "Clock class", ": %!+K", (_cc)) @@ -59,57 +60,31 @@ void destroy_clock_class(struct bt_object *obj) clock_class->description.value = NULL; } - bt_object_pool_finalize(&clock_class->cv_pool); + bt_object_pool_finalize(&clock_class->cs_pool); g_free(clock_class); } static -void free_clock_value(struct bt_clock_value *clock_value, +void free_clock_snapshot(struct bt_clock_snapshot *clock_snapshot, struct bt_clock_class *clock_class) { - bt_clock_value_destroy(clock_value); + bt_clock_snapshot_destroy(clock_snapshot); } static inline void set_base_offset(struct bt_clock_class *clock_class) { - uint64_t offset_cycles_ns; - - /* Initialize nanosecond timestamp to clock's offset in seconds */ - if (clock_class->offset_seconds <= (INT64_MIN / INT64_C(1000000000) - 1) || - clock_class->offset_seconds >= (INT64_MAX / INT64_C(1000000000)) - 1) { - /* - * Overflow: offset in seconds converted to nanoseconds - * is outside the int64_t range. We also subtract 1 here - * to leave "space" for the offset in cycles converted - * to nanoseconds (which is always less than 1 second by - * contract). - */ - clock_class->base_offset.overflows = true; - goto end; - } - - /* Offset (seconds) to nanoseconds */ - clock_class->base_offset.value_ns = clock_class->offset_seconds * - INT64_C(1000000000); - - /* Add offset in cycles */ - BT_ASSERT(clock_class->offset_cycles < clock_class->frequency); - offset_cycles_ns = bt_util_ns_from_value(clock_class->frequency, - clock_class->offset_cycles); - BT_ASSERT(offset_cycles_ns < 1000000000); - clock_class->base_offset.value_ns += (int64_t) offset_cycles_ns; - clock_class->base_offset.overflows = false; - -end: - return; + clock_class->base_offset.overflows = bt_util_get_base_offset_ns( + clock_class->offset_seconds, clock_class->offset_cycles, + clock_class->frequency, &clock_class->base_offset.value_ns); } -struct bt_clock_class *bt_clock_class_create(void) +struct bt_clock_class *bt_clock_class_create(bt_self_component *self_comp) { int ret; struct bt_clock_class *clock_class = NULL; + BT_ASSERT_PRE_NON_NULL(self_comp, "Self component"); BT_LOGD_STR("Creating default clock class object"); clock_class = g_new0(struct bt_clock_class, 1); @@ -132,15 +107,15 @@ struct bt_clock_class *bt_clock_class_create(void) } clock_class->frequency = UINT64_C(1000000000); - clock_class->is_absolute = BT_TRUE; + clock_class->origin_is_unix_epoch = BT_TRUE; set_base_offset(clock_class); - ret = bt_object_pool_initialize(&clock_class->cv_pool, - (bt_object_pool_new_object_func) bt_clock_value_new, + ret = bt_object_pool_initialize(&clock_class->cs_pool, + (bt_object_pool_new_object_func) bt_clock_snapshot_new, (bt_object_pool_destroy_object_func) - free_clock_value, + free_clock_snapshot, clock_class); if (ret) { - BT_LOGE("Failed to initialize clock value pool: ret=%d", + BT_LOGE("Failed to initialize clock snapshot pool: ret=%d", ret); goto error; } @@ -161,8 +136,8 @@ const char *bt_clock_class_get_name(const struct bt_clock_class *clock_class) return clock_class->name.value; } -int bt_clock_class_set_name(struct bt_clock_class *clock_class, - const char *name) +enum bt_clock_class_status bt_clock_class_set_name( + struct bt_clock_class *clock_class, const char *name) { BT_ASSERT_PRE_NON_NULL(clock_class, "Clock class"); BT_ASSERT_PRE_NON_NULL(name, "Name"); @@ -170,7 +145,7 @@ int bt_clock_class_set_name(struct bt_clock_class *clock_class, g_string_assign(clock_class->name.str, name); clock_class->name.value = clock_class->name.str->str; BT_LIB_LOGV("Set clock class's name: %!+K", clock_class); - return 0; + return BT_CLOCK_CLASS_STATUS_OK; } const char *bt_clock_class_get_description( @@ -180,8 +155,8 @@ const char *bt_clock_class_get_description( return clock_class->description.value; } -int bt_clock_class_set_description(struct bt_clock_class *clock_class, - const char *descr) +enum bt_clock_class_status bt_clock_class_set_description( + struct bt_clock_class *clock_class, const char *descr) { BT_ASSERT_PRE_NON_NULL(clock_class, "Clock class"); BT_ASSERT_PRE_NON_NULL(descr, "Description"); @@ -190,7 +165,7 @@ int bt_clock_class_set_description(struct bt_clock_class *clock_class, clock_class->description.value = clock_class->description.str->str; BT_LIB_LOGV("Set clock class's description: %!+K", clock_class); - return 0; + return BT_CLOCK_CLASS_STATUS_OK; } uint64_t bt_clock_class_get_frequency(const struct bt_clock_class *clock_class) @@ -257,19 +232,19 @@ void bt_clock_class_set_offset(struct bt_clock_class *clock_class, BT_LIB_LOGV("Set clock class's offset: %!+K", clock_class); } -bt_bool bt_clock_class_is_absolute(const struct bt_clock_class *clock_class) +bt_bool bt_clock_class_origin_is_unix_epoch(const struct bt_clock_class *clock_class) { BT_ASSERT_PRE_NON_NULL(clock_class, "Clock class"); - return (bool) clock_class->is_absolute; + return (bool) clock_class->origin_is_unix_epoch; } -void bt_clock_class_set_is_absolute(struct bt_clock_class *clock_class, - bt_bool is_absolute) +void bt_clock_class_set_origin_is_unix_epoch(struct bt_clock_class *clock_class, + bt_bool origin_is_unix_epoch) { BT_ASSERT_PRE_NON_NULL(clock_class, "Clock class"); BT_ASSERT_PRE_CLOCK_CLASS_HOT(clock_class); - clock_class->is_absolute = (bool) is_absolute; - BT_LIB_LOGV("Set clock class's absolute property: %!+K", + clock_class->origin_is_unix_epoch = (bool) origin_is_unix_epoch; + BT_LIB_LOGV("Set clock class's origin is Unix epoch property: %!+K", clock_class); } @@ -303,7 +278,7 @@ void _bt_clock_class_freeze(const struct bt_clock_class *clock_class) ((struct bt_clock_class *) clock_class)->frozen = 1; } -int bt_clock_class_cycles_to_ns_from_origin( +enum bt_clock_class_status bt_clock_class_cycles_to_ns_from_origin( const struct bt_clock_class *clock_class, uint64_t cycles, int64_t *ns) { @@ -311,8 +286,9 @@ int bt_clock_class_cycles_to_ns_from_origin( BT_ASSERT_PRE_NON_NULL(clock_class, "Clock class"); BT_ASSERT_PRE_NON_NULL(ns, "Nanoseconds (output)"); - ret = bt_util_ns_from_origin(clock_class, cycles, ns); + ret = bt_util_ns_from_origin_clock_class(clock_class, cycles, ns); if (ret) { + ret = BT_CLOCK_CLASS_STATUS_OVERFLOW; BT_LIB_LOGW("Cannot convert cycles to nanoseconds " "from origin for given clock class: " "value overflows the signed 64-bit integer range: " @@ -322,3 +298,13 @@ int bt_clock_class_cycles_to_ns_from_origin( return ret; } + +void bt_clock_class_get_ref(const struct bt_clock_class *clock_class) +{ + bt_object_get_ref(clock_class); +} + +void bt_clock_class_put_ref(const struct bt_clock_class *clock_class) +{ + bt_object_put_ref(clock_class); +}