projects
/
babeltrace.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
ir: freeze event on bt_ctf_stream_append_event()
[babeltrace.git]
/
formats
/
ctf
/
ir
/
clock.c
diff --git
a/formats/ctf/ir/clock.c
b/formats/ctf/ir/clock.c
index fa073073f17095462baddde1f65d5e9ae5de3bac..0bf7f3518cd5026450703001190699bd031be717 100644
(file)
--- a/
formats/ctf/ir/clock.c
+++ b/
formats/ctf/ir/clock.c
@@
-27,12
+27,15
@@
*/
#include <babeltrace/ctf-ir/clock-internal.h>
*/
#include <babeltrace/ctf-ir/clock-internal.h>
+#include <babeltrace/ctf-ir/utils.h>
+#include <babeltrace/ref.h>
#include <babeltrace/ctf-writer/writer-internal.h>
#include <babeltrace/ctf-writer/writer-internal.h>
+#include <babeltrace/object-internal.h>
#include <babeltrace/compiler.h>
#include <inttypes.h>
static
#include <babeltrace/compiler.h>
#include <inttypes.h>
static
-void bt_ctf_clock_destroy(struct bt_
ctf_ref *ref
);
+void bt_ctf_clock_destroy(struct bt_
object *obj
);
BT_HIDDEN
struct bt_ctf_clock *_bt_ctf_clock_create(void)
BT_HIDDEN
struct bt_ctf_clock *_bt_ctf_clock_create(void)
@@
-46,7
+49,7
@@
struct bt_ctf_clock *_bt_ctf_clock_create(void)
clock->precision = 1;
clock->frequency = 1000000000;
clock->precision = 1;
clock->frequency = 1000000000;
- bt_
ctf_ref_init(&clock->ref_count
);
+ bt_
object_init(clock, bt_ctf_clock_destroy
);
end:
return clock;
}
end:
return clock;
}
@@
-57,7
+60,7
@@
int bt_ctf_clock_set_name(struct bt_ctf_clock *clock,
{
int ret = 0;
{
int ret = 0;
- if (validate_identifier(name)) {
+ if (
bt_ctf_
validate_identifier(name)) {
ret = -1;
goto end;
}
ret = -1;
goto end;
}
@@
-88,20
+91,19
@@
struct bt_ctf_clock *bt_ctf_clock_create(const char *name)
ret = bt_ctf_clock_set_name(clock, name);
if (ret) {
ret = bt_ctf_clock_set_name(clock, name);
if (ret) {
- goto error
_destroy
;
+ goto error;
}
}
- ret = b
abeltrace
_uuid_generate(clock->uuid);
+ ret = b
t
_uuid_generate(clock->uuid);
if (ret) {
if (ret) {
- goto error
_destroy
;
+ goto error;
}
clock->uuid_set = 1;
return clock;
}
clock->uuid_set = 1;
return clock;
-error_destroy:
- bt_ctf_clock_destroy(&clock->ref_count);
error:
error:
- return NULL;
+ BT_PUT(clock);
+ return clock;
}
const char *bt_ctf_clock_get_name(struct bt_ctf_clock *clock)
}
const char *bt_ctf_clock_get_name(struct bt_ctf_clock *clock)
@@
-204,20
+206,21
@@
end:
return ret;
}
return ret;
}
-
uint64_t bt_ctf_clock_get_offset_s(struct bt_ctf_clock *clock
)
+
int bt_ctf_clock_get_offset_s(struct bt_ctf_clock *clock, int64_t *offset_s
)
{
{
-
uint64_t ret = -1ULL
;
+
int ret = 0
;
- if (!clock) {
+ if (!clock || !offset_s) {
+ ret = -1;
goto end;
}
goto end;
}
-
ret
= clock->offset_s;
+
*offset_s
= clock->offset_s;
end:
return ret;
}
end:
return ret;
}
-int bt_ctf_clock_set_offset_s(struct bt_ctf_clock *clock,
u
int64_t offset_s)
+int bt_ctf_clock_set_offset_s(struct bt_ctf_clock *clock, int64_t offset_s)
{
int ret = 0;
{
int ret = 0;
@@
-231,20
+234,21
@@
end:
return ret;
}
return ret;
}
-
uint64_t bt_ctf_clock_get_offset(struct bt_ctf_clock *clock
)
+
int bt_ctf_clock_get_offset(struct bt_ctf_clock *clock, int64_t *offset
)
{
{
-
uint64_t ret = -1ULL
;
+
int ret = 0
;
- if (!clock) {
+ if (!clock || !offset) {
+ ret = -1;
goto end;
}
goto end;
}
-
r
et = clock->offset;
+
*offs
et = clock->offset;
end:
return ret;
}
end:
return ret;
}
-int bt_ctf_clock_set_offset(struct bt_ctf_clock *clock,
u
int64_t offset)
+int bt_ctf_clock_set_offset(struct bt_ctf_clock *clock, int64_t offset)
{
int ret = 0;
{
int ret = 0;
@@
-314,50
+318,86
@@
end:
return ret;
}
return ret;
}
-
uint64_t bt_ctf_clock_get_time(struct bt_ctf_clock *clock
)
+
int bt_ctf_clock_get_time(struct bt_ctf_clock *clock, int64_t *time
)
{
{
-
uint64_t ret = -1ULL
;
+
int ret = 0
;
- if (!clock) {
+ if (!clock || !time) {
+ ret = -1;
goto end;
}
goto end;
}
- ret = clock->time;
+ /* 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);
+ }
+
end:
return ret;
}
end:
return ret;
}
-int bt_ctf_clock_set_time(struct bt_ctf_clock *clock,
u
int64_t time)
+int bt_ctf_clock_set_time(struct bt_ctf_clock *clock, int64_t time)
{
int ret = 0;
/* Timestamps are strictly monotonic */
{
int ret = 0;
/* Timestamps are strictly monotonic */
- if (!clock
|| time < clock->time
) {
+ if (!clock) {
ret = -1;
goto end;
}
ret = -1;
goto end;
}
- clock->time = time;
+ /* Common case where cycles are actually nanoseconds */
+ if (clock->frequency == 1000000000) {
+ clock->value = time;
+ goto end;
+ }
+
+ ret = bt_ctf_clock_set_value(clock,
+ (uint64_t) (((double) time * (double) clock->frequency) / 1e9));
+
end:
return ret;
}
end:
return ret;
}
-
void bt_ctf_clock_get
(struct bt_ctf_clock *clock)
+
uint64_t bt_ctf_clock_get_value
(struct bt_ctf_clock *clock)
{
{
+ uint64_t ret = -1ULL;
+
if (!clock) {
if (!clock) {
-
return
;
+
goto end
;
}
}
- bt_ctf_ref_get(&clock->ref_count);
+ ret = clock->value;
+end:
+ return ret;
}
}
-
void bt_ctf_clock_put(struct bt_ctf_clock *clock
)
+
int bt_ctf_clock_set_value(struct bt_ctf_clock *clock, uint64_t value
)
{
{
- if (!clock) {
- return;
+ int ret = 0;
+
+ /* Timestamps are strictly monotonic */
+ if (!clock || value < clock->value) {
+ ret = -1;
+ goto end;
}
}
- bt_ctf_ref_put(&clock->ref_count, bt_ctf_clock_destroy);
+ clock->value = value;
+end:
+ return ret;
+}
+
+void bt_ctf_clock_get(struct bt_ctf_clock *clock)
+{
+ bt_get(clock);
+}
+
+void bt_ctf_clock_put(struct bt_ctf_clock *clock)
+{
+ bt_put(clock);
}
BT_HIDDEN
}
BT_HIDDEN
@@
-409,15
+449,11
@@
void bt_ctf_clock_serialize(struct bt_ctf_clock *clock,
}
static
}
static
-void bt_ctf_clock_destroy(struct bt_
ctf_ref *ref
)
+void bt_ctf_clock_destroy(struct bt_
object *obj
)
{
struct bt_ctf_clock *clock;
{
struct bt_ctf_clock *clock;
- if (!ref) {
- return;
- }
-
- clock = container_of(ref, struct bt_ctf_clock, ref_count);
+ clock = container_of(obj, struct bt_ctf_clock, base);
if (clock->name) {
g_string_free(clock->name, TRUE);
}
if (clock->name) {
g_string_free(clock->name, TRUE);
}
This page took
0.029183 seconds
and
4
git commands to generate.