From: Philippe Proulx Date: Fri, 19 Feb 2016 02:34:12 +0000 (-0500) Subject: ir: add bt_ctf_clock_ns_from_value() utility X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=commitdiff_plain;h=4ef18cab9e8958617b5dd7c39105d4602c5535c2 ir: add bt_ctf_clock_ns_from_value() utility Signed-off-by: Philippe Proulx Signed-off-by: Jérémie Galarneau --- diff --git a/formats/ctf/ir/clock.c b/formats/ctf/ir/clock.c index 2e765430..253b033d 100644 --- a/formats/ctf/ir/clock.c +++ b/formats/ctf/ir/clock.c @@ -325,6 +325,19 @@ end: return ret; } +uint64_t ns_from_value(uint64_t frequency, uint64_t value) +{ + uint64_t ns; + + if (frequency == 1000000000) { + ns = value; + } else { + ns = (uint64_t) ((1e9 * (double) value) / (double) frequency); + } + + return ns; +} + int bt_ctf_clock_get_time(struct bt_ctf_clock *clock, int64_t *time) { int ret = 0; @@ -343,13 +356,7 @@ int bt_ctf_clock_get_time(struct bt_ctf_clock *clock, int64_t *time) goto end; } - /* Common case where cycles are actually nanoseconds */ - if (clock->frequency == 1000000000) { - *time = (int64_t) clock->value; - } else { - *time = (int64_t) ((1e9 * (double) clock->value) / - (double) clock->frequency); - } + *time = (int64_t) ns_from_value(clock->frequency, clock->value); end: return ret; @@ -512,3 +519,24 @@ void bt_ctf_clock_destroy(struct bt_object *obj) g_free(clock); } + +int64_t bt_ctf_clock_ns_from_value(struct bt_ctf_clock *clock, uint64_t value) +{ + int64_t ns = -1ULL; + + if (!clock) { + goto end; + } + + /* Initialize nanosecond timestamp to clock's offset in seconds */ + ns = clock->offset_s * 1000000000; + + /* Add offset in cycles, converted to nanoseconds */ + ns += ns_from_value(clock->frequency, clock->offset); + + /* Add given value, converter to nanoseconds */ + ns += ns_from_value(clock->frequency, value); + +end: + return ns; +} diff --git a/include/babeltrace/ctf-ir/clock.h b/include/babeltrace/ctf-ir/clock.h index ec08810b..e35882e0 100644 --- a/include/babeltrace/ctf-ir/clock.h +++ b/include/babeltrace/ctf-ir/clock.h @@ -237,6 +237,9 @@ extern const unsigned char *bt_ctf_clock_get_uuid(struct bt_ctf_clock *clock); extern int bt_ctf_clock_set_uuid(struct bt_ctf_clock *clock, const unsigned char *uuid); +extern int64_t bt_ctf_clock_ns_from_value(struct bt_ctf_clock *clock, + uint64_t value); + #ifdef __cplusplus } #endif