Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
+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;
int bt_ctf_clock_get_time(struct bt_ctf_clock *clock, int64_t *time)
{
int ret = 0;
- /* 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);
+
+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;
+}
extern int bt_ctf_clock_set_uuid(struct bt_ctf_clock *clock,
const unsigned char *uuid);
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
#ifdef __cplusplus
}
#endif