Commit | Line | Data |
---|---|---|
c057dea0 | 1 | /* |
0235b0db | 2 | * SPDX-License-Identifier: MIT |
c057dea0 | 3 | * |
0235b0db | 4 | * Copyright 2017-2018 Philippe Proulx <pproulx@efficios.com> |
c057dea0 PP |
5 | */ |
6 | ||
0235b0db MJ |
7 | #ifndef BABELTRACE_TRACE_IR_CLOCK_SNAPSHOT_INTERNAL_H |
8 | #define BABELTRACE_TRACE_IR_CLOCK_SNAPSHOT_INTERNAL_H | |
9 | ||
91d81473 | 10 | #include "common/macros.h" |
578e048b | 11 | #include "lib/object.h" |
c057dea0 PP |
12 | #include <stdbool.h> |
13 | #include <stdint.h> | |
14 | ||
578e048b MJ |
15 | #include "clock-class.h" |
16 | #include "utils.h" | |
17 | ||
50842bdc | 18 | struct bt_clock_class; |
c057dea0 | 19 | |
605e1019 | 20 | struct bt_clock_snapshot { |
c057dea0 | 21 | struct bt_object base; |
50842bdc | 22 | struct bt_clock_class *clock_class; |
44c440bc PP |
23 | uint64_t value_cycles; |
24 | bool ns_from_origin_overflows; | |
25 | int64_t ns_from_origin; | |
312c056a | 26 | bool is_set; |
c057dea0 PP |
27 | }; |
28 | ||
312c056a | 29 | static inline |
605e1019 | 30 | void bt_clock_snapshot_set(struct bt_clock_snapshot *clock_snapshot) |
312c056a | 31 | { |
98b15851 | 32 | BT_ASSERT_DBG(clock_snapshot); |
605e1019 | 33 | clock_snapshot->is_set = true; |
312c056a PP |
34 | } |
35 | ||
36 | static inline | |
605e1019 | 37 | void bt_clock_snapshot_reset(struct bt_clock_snapshot *clock_snapshot) |
312c056a | 38 | { |
98b15851 | 39 | BT_ASSERT_DBG(clock_snapshot); |
605e1019 | 40 | clock_snapshot->is_set = false; |
312c056a PP |
41 | } |
42 | ||
312c056a | 43 | static inline |
605e1019 | 44 | void set_ns_from_origin(struct bt_clock_snapshot *clock_snapshot) |
312c056a | 45 | { |
0f2d58c9 PP |
46 | if (bt_util_ns_from_origin_clock_class(clock_snapshot->clock_class, |
47 | clock_snapshot->value_cycles, | |
605e1019 PP |
48 | &clock_snapshot->ns_from_origin)) { |
49 | clock_snapshot->ns_from_origin_overflows = true; | |
e22b45d0 | 50 | } |
e22b45d0 PP |
51 | } |
52 | ||
53 | static inline | |
605e1019 | 54 | void bt_clock_snapshot_set_raw_value(struct bt_clock_snapshot *clock_snapshot, |
e22b45d0 PP |
55 | uint64_t cycles) |
56 | { | |
98b15851 | 57 | BT_ASSERT_DBG(clock_snapshot); |
605e1019 PP |
58 | clock_snapshot->value_cycles = cycles; |
59 | set_ns_from_origin(clock_snapshot); | |
60 | bt_clock_snapshot_set(clock_snapshot); | |
e22b45d0 PP |
61 | } |
62 | ||
605e1019 | 63 | void bt_clock_snapshot_destroy(struct bt_clock_snapshot *clock_snapshot); |
44c440bc | 64 | |
605e1019 | 65 | struct bt_clock_snapshot *bt_clock_snapshot_new(struct bt_clock_class *clock_class); |
312c056a | 66 | |
605e1019 | 67 | struct bt_clock_snapshot *bt_clock_snapshot_create( |
312c056a PP |
68 | struct bt_clock_class *clock_class); |
69 | ||
605e1019 | 70 | void bt_clock_snapshot_recycle(struct bt_clock_snapshot *clock_snapshot); |
312c056a | 71 | |
605e1019 | 72 | #endif /* BABELTRACE_TRACE_IR_CLOCK_SNAPSHOT_INTERNAL_H */ |