#include <babeltrace/babeltrace-internal.h>
#include <babeltrace/object-internal.h>
+#include <babeltrace/ctf-ir/clock-class-internal.h>
+#include <babeltrace/ctf-ir/utils-internal.h>
#include <stdbool.h>
#include <stdint.h>
struct bt_clock_value {
struct bt_object base;
struct bt_clock_class *clock_class;
- uint64_t value;
- bool ns_from_epoch_overflows;
- int64_t ns_from_epoch;
+ uint64_t value_cycles;
+ bool ns_from_origin_overflows;
+ int64_t ns_from_origin;
bool is_set;
- bool frozen;
};
static inline
clock_value->is_set = false;
}
-BT_UNUSED
static inline
-void _bt_clock_value_set_is_frozen(struct bt_clock_value *clock_value,
- bool is_frozen)
+void set_ns_from_origin(struct bt_clock_value *clock_value)
+{
+ if (bt_util_ns_from_origin(clock_value->clock_class, clock_value->value_cycles,
+ &clock_value->ns_from_origin)) {
+ clock_value->ns_from_origin_overflows = true;
+ }
+
+}
+
+static inline
+void bt_clock_value_set_raw_value(struct bt_clock_value *clock_value,
+ uint64_t cycles)
{
BT_ASSERT(clock_value);
- clock_value->frozen = is_frozen;
+ clock_value->value_cycles = cycles;
+ set_ns_from_origin(clock_value);
+ bt_clock_value_set(clock_value);
}
-#ifdef BT_DEV_MODE
-# define bt_clock_value_set_is_frozen _bt_clock_value_set_is_frozen
-#else
-# define bt_clock_value_set_is_frozen(_x, _f)
-#endif /* BT_DEV_MODE */
+static inline
+void bt_clock_value_set_value_inline(struct bt_clock_value *clock_value,
+ uint64_t raw_value)
+{
+ bt_clock_value_set_raw_value(clock_value, raw_value);
+}
+
+BT_HIDDEN
+void bt_clock_value_destroy(struct bt_clock_value *clock_value);
+
+BT_HIDDEN
+struct bt_clock_value *bt_clock_value_new(struct bt_clock_class *clock_class);
BT_HIDDEN
struct bt_clock_value *bt_clock_value_create(