2 * SPDX-License-Identifier: MIT
4 * Copyright (C) 2019 Philippe Proulx <pproulx@efficios.com>
8 #include <babeltrace2-ctf-writer/writer.h>
9 #include <babeltrace2-ctf-writer/clock.h>
10 #include <babeltrace2-ctf-writer/clock-class.h>
11 #include <babeltrace2-ctf-writer/stream.h>
12 #include <babeltrace2-ctf-writer/event.h>
13 #include <babeltrace2-ctf-writer/event-types.h>
14 #include <babeltrace2-ctf-writer/event-fields.h>
15 #include <babeltrace2-ctf-writer/stream-class.h>
16 #include <babeltrace2-ctf-writer/trace.h>
18 #include "common/assert.h"
21 struct bt_ctf_writer
*writer
;
22 struct bt_ctf_trace
*trace
;
23 struct bt_ctf_clock
*clock
;
24 struct bt_ctf_stream_class
*sc
;
25 struct bt_ctf_stream
*stream
;
26 struct bt_ctf_event_class
*ec
;
30 void fini_config(struct config
*cfg
)
32 bt_ctf_object_put_ref(cfg
->stream
);
33 bt_ctf_object_put_ref(cfg
->sc
);
34 bt_ctf_object_put_ref(cfg
->ec
);
35 bt_ctf_object_put_ref(cfg
->clock
);
36 bt_ctf_object_put_ref(cfg
->trace
);
37 bt_ctf_object_put_ref(cfg
->writer
);
41 void configure_writer(struct config
*cfg
, const char *path
)
43 struct bt_ctf_field_type
*ft
;
46 cfg
->writer
= bt_ctf_writer_create(path
);
47 BT_ASSERT(cfg
->writer
);
48 cfg
->trace
= bt_ctf_writer_get_trace(cfg
->writer
);
49 BT_ASSERT(cfg
->trace
);
50 cfg
->clock
= bt_ctf_clock_create("default");
51 BT_ASSERT(cfg
->clock
);
52 ret
= bt_ctf_writer_add_clock(cfg
->writer
, cfg
->clock
);
54 ret
= bt_ctf_writer_set_byte_order(cfg
->writer
,
55 BT_CTF_BYTE_ORDER_BIG_ENDIAN
);
57 cfg
->sc
= bt_ctf_stream_class_create("hello");
59 ret
= bt_ctf_stream_class_set_clock(cfg
->sc
, cfg
->clock
);
61 cfg
->ec
= bt_ctf_event_class_create("ev");
63 ft
= bt_ctf_field_type_integer_create(8);
65 ret
= bt_ctf_field_type_integer_set_is_signed(ft
, BT_CTF_TRUE
);
67 ret
= bt_ctf_event_class_add_field(cfg
->ec
, ft
, "first");
69 bt_ctf_object_put_ref(ft
);
70 ft
= bt_ctf_field_type_string_create();
72 ret
= bt_ctf_event_class_add_field(cfg
->ec
, ft
, "second");
74 bt_ctf_object_put_ref(ft
);
75 ret
= bt_ctf_stream_class_add_event_class(cfg
->sc
, cfg
->ec
);
77 cfg
->stream
= bt_ctf_writer_create_stream(cfg
->writer
, cfg
->sc
);
78 BT_ASSERT(cfg
->stream
);
82 void write_stream(struct config
*cfg
)
84 struct bt_ctf_event
*ev
;
85 struct bt_ctf_field
*field
;
89 for (i
= 0; i
< 25; i
++) {
90 ev
= bt_ctf_event_create(cfg
->ec
);
92 field
= bt_ctf_event_get_payload(ev
, "first");
94 ret
= bt_ctf_field_integer_signed_set_value(field
, -23 + i
);
96 bt_ctf_object_put_ref(field
);
97 field
= bt_ctf_event_get_payload(ev
, "second");
99 ret
= bt_ctf_field_string_set_value(field
, "saluuuut");
101 bt_ctf_object_put_ref(field
);
102 ret
= bt_ctf_clock_set_time(cfg
->clock
, 3600 + i
* 5000);
104 ret
= bt_ctf_stream_append_event(cfg
->stream
, ev
);
106 bt_ctf_object_put_ref(ev
);
109 ret
= bt_ctf_stream_flush(cfg
->stream
);
113 int main(int argc
, char **argv
)
115 struct config cfg
= {0};
117 BT_ASSERT(argc
>= 2);
118 configure_writer(&cfg
, argv
[1]);