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