2 * SPDX-License-Identifier: MIT
4 * Copyright 2017-2018 Philippe Proulx <pproulx@efficios.com>
5 * Copyright 2013, 2014 Jérémie Galarneau <jeremie.galarneau@efficios.com>
8 #define BT_LOG_TAG "LIB/EVENT"
9 #include "lib/logging.h"
11 #include "lib/assert-cond.h"
12 #include <babeltrace2/trace-ir/event.h>
13 #include <babeltrace2/trace-ir/event-class.h>
14 #include <babeltrace2/trace-ir/stream-class.h>
15 #include <babeltrace2/trace-ir/packet.h>
16 #include <babeltrace2/trace-ir/trace.h>
17 #include "common/assert.h"
18 #include "compat/compiler.h"
23 #include "field-class.h"
25 #include "stream-class.h"
30 #include "attributes.h"
31 #include "event-class.h"
33 void _bt_event_set_is_frozen(const struct bt_event
*event
, bool is_frozen
)
36 BT_LIB_LOGD("Setting event's frozen state: %!+e, is-frozen=%d",
39 if (event
->common_context_field
) {
40 BT_LOGD_STR("Setting event's common context field's frozen state.");
41 bt_field_set_is_frozen(
42 event
->common_context_field
, is_frozen
);
45 if (event
->specific_context_field
) {
46 BT_LOGD_STR("Setting event's specific context field's frozen state.");
47 bt_field_set_is_frozen(event
->specific_context_field
,
51 if (event
->payload_field
) {
52 BT_LOGD_STR("Setting event's payload field's frozen state.");
53 bt_field_set_is_frozen(event
->payload_field
,
57 ((struct bt_event
*) event
)->frozen
= is_frozen
;
60 BT_LOGD_STR("Setting event's packet's frozen state.");
61 bt_packet_set_is_frozen(event
->packet
, is_frozen
);
65 struct bt_event
*bt_event_new(struct bt_event_class
*event_class
)
67 struct bt_event
*event
= NULL
;
68 struct bt_stream_class
*stream_class
;
69 struct bt_field_class
*fc
;
71 BT_ASSERT(event_class
);
72 event
= g_new0(struct bt_event
, 1);
74 BT_LIB_LOGE_APPEND_CAUSE("Failed to allocate one event.");
78 bt_object_init_unique(&event
->base
);
79 stream_class
= bt_event_class_borrow_stream_class(event_class
);
80 BT_ASSERT(stream_class
);
81 fc
= stream_class
->event_common_context_fc
;
83 event
->common_context_field
= bt_field_create(fc
);
84 if (!event
->common_context_field
) {
85 /* bt_field_create() logs errors */
90 fc
= event_class
->specific_context_fc
;
92 event
->specific_context_field
= bt_field_create(fc
);
93 if (!event
->specific_context_field
) {
94 /* bt_field_create() logs errors */
99 fc
= event_class
->payload_fc
;
101 event
->payload_field
= bt_field_create(fc
);
102 if (!event
->payload_field
) {
103 /* bt_field_create() logs errors */
112 bt_event_destroy(event
);
121 struct bt_event_class
*bt_event_borrow_class(struct bt_event
*event
)
123 BT_ASSERT_PRE_DEV_EVENT_NON_NULL(event
);
128 const struct bt_event_class
*bt_event_borrow_class_const(
129 const struct bt_event
*event
)
131 return bt_event_borrow_class((void *) event
);
135 struct bt_stream
*bt_event_borrow_stream(struct bt_event
*event
)
137 BT_ASSERT_PRE_DEV_EVENT_NON_NULL(event
);
138 return event
->stream
;
142 const struct bt_stream
*bt_event_borrow_stream_const(
143 const struct bt_event
*event
)
145 return bt_event_borrow_stream((void *) event
);
149 struct bt_field
*bt_event_borrow_common_context_field(struct bt_event
*event
)
151 BT_ASSERT_PRE_DEV_EVENT_NON_NULL(event
);
152 return event
->common_context_field
;
156 const struct bt_field
*bt_event_borrow_common_context_field_const(
157 const struct bt_event
*event
)
159 BT_ASSERT_PRE_DEV_EVENT_NON_NULL(event
);
160 return event
->common_context_field
;
164 struct bt_field
*bt_event_borrow_specific_context_field(struct bt_event
*event
)
166 BT_ASSERT_PRE_DEV_EVENT_NON_NULL(event
);
167 return event
->specific_context_field
;
171 const struct bt_field
*bt_event_borrow_specific_context_field_const(
172 const struct bt_event
*event
)
174 BT_ASSERT_PRE_DEV_EVENT_NON_NULL(event
);
175 return event
->specific_context_field
;
179 struct bt_field
*bt_event_borrow_payload_field(struct bt_event
*event
)
181 BT_ASSERT_PRE_DEV_EVENT_NON_NULL(event
);
182 return event
->payload_field
;
186 const struct bt_field
*bt_event_borrow_payload_field_const(
187 const struct bt_event
*event
)
189 BT_ASSERT_PRE_DEV_EVENT_NON_NULL(event
);
190 return event
->payload_field
;
193 void bt_event_destroy(struct bt_event
*event
)
196 BT_LIB_LOGD("Destroying event: %!+e", event
);
198 if (event
->common_context_field
) {
199 BT_LOGD_STR("Destroying event's stream event context field.");
200 bt_field_destroy(event
->common_context_field
);
201 event
->common_context_field
= NULL
;
204 if (event
->specific_context_field
) {
205 BT_LOGD_STR("Destroying event's context field.");
206 bt_field_destroy(event
->specific_context_field
);
207 event
->specific_context_field
= NULL
;
210 if (event
->payload_field
) {
211 BT_LOGD_STR("Destroying event's payload field.");
212 bt_field_destroy(event
->payload_field
);
213 event
->payload_field
= NULL
;
216 BT_LOGD_STR("Putting event's class.");
217 bt_object_put_ref(event
->class);
218 BT_LOGD_STR("Putting event's packet.");
219 BT_OBJECT_PUT_REF_AND_RESET(event
->packet
);
220 BT_LOGD_STR("Putting event's stream.");
221 BT_OBJECT_PUT_REF_AND_RESET(event
->stream
);
226 struct bt_packet
*bt_event_borrow_packet(struct bt_event
*event
)
228 BT_ASSERT_PRE_DEV_EVENT_NON_NULL(event
);
229 return event
->packet
;
233 const struct bt_packet
*bt_event_borrow_packet_const(
234 const struct bt_event
*event
)
236 return bt_event_borrow_packet((void *) event
);
This page took 0.0341 seconds and 4 git commands to generate.