1 #ifndef BABELTRACE_PLUGIN_DEBUG_INFO_TRACE_IR_MAPPING_H
2 #define BABELTRACE_PLUGIN_DEBUG_INFO_TRACE_IR_MAPPING_H
4 * Copyright 2019 Francis Deslauriers francis.deslauriers@efficios.com>
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to deal
8 * in the Software without restriction, including without limitation the rights
9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 * copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
13 * The above copyright notice and this permission notice shall be included in
14 * all copies or substantial portions of the Software.
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
27 #include "common/assert.h"
28 #include "common/macros.h"
29 #include <babeltrace2/babeltrace.h>
31 #include "debug-info.h"
33 /* Used to resolve field paths for dynamic arrays and variant field classes. */
34 struct field_class_resolving_context
{
35 /* Weak reference. Owned by input stream class. */
36 const bt_field_class
*packet_context
;
37 /* Weak reference. Owned by input stream class. */
38 const bt_field_class
*event_common_context
;
39 /* Weak reference. Owned by input event class. */
40 const bt_field_class
*event_specific_context
;
41 /* Weak reference. Owned by input event class. */
42 const bt_field_class
*event_payload
;
45 struct trace_ir_metadata_maps
{
46 bt_logging_level log_level
;
47 bt_self_component
*self_comp
;
48 const bt_trace_class
*input_trace_class
;
49 bt_trace_class
*output_trace_class
;
52 * Map between input stream class and its corresponding output stream
54 * input stream class: weak reference. Owned by an upstream
56 * output stream class: owned by this structure.
58 GHashTable
*stream_class_map
;
61 * Map between input event class and its corresponding output event
63 * input event class: weak reference. Owned by an upstream component.
64 * output event class: owned by this structure.
66 GHashTable
*event_class_map
;
69 * Map between input field class and its corresponding output field
71 * input field class: weak reference. Owned by an upstream component.
72 * output field class: owned by this structure.
74 GHashTable
*field_class_map
;
77 * Map between input clock class and its corresponding output clock
79 * input clock class: weak reference. Owned by an upstream component.
80 * output clock class: owned by this structure.
82 GHashTable
*clock_class_map
;
84 struct field_class_resolving_context
*fc_resolving_ctx
;
86 uint64_t destruction_listener_id
;
89 struct trace_ir_data_maps
{
90 bt_logging_level log_level
;
91 bt_self_component
*self_comp
;
92 const bt_trace
*input_trace
;
93 bt_trace
*output_trace
;
96 * Map between input stream its corresponding output stream.
97 * input stream: weak reference. Owned by an upstream component.
98 * output stream: owned by this structure.
100 GHashTable
*stream_map
;
103 * Map between input packet its corresponding output packet.
104 * input packet: weak reference. Owned by an upstream packet component.
105 * output packet: owned by this structure.
107 GHashTable
*packet_map
;
109 uint64_t destruction_listener_id
;
112 struct trace_ir_maps
{
113 bt_logging_level log_level
;
116 * input trace -> trace_ir_data_maps.
117 * input trace: weak reference. Owned by an upstream component.
118 * trace_ir_data_maps: Owned by this structure.
120 GHashTable
*data_maps
;
123 * input trace class -> trace_ir_metadata_maps.
124 * input trace class: weak reference. Owned by an upstream component.
125 * trace_ir_metadata_maps: Owned by this structure.
127 GHashTable
*metadata_maps
;
129 char *debug_info_field_class_name
;
131 bt_self_component
*self_comp
;
135 struct trace_ir_maps
*trace_ir_maps_create(bt_self_component
*self_comp
,
136 const char *debug_info_field_name
, bt_logging_level log_level
);
139 void trace_ir_maps_clear(struct trace_ir_maps
*maps
);
142 void trace_ir_maps_destroy(struct trace_ir_maps
*maps
);
145 struct trace_ir_data_maps
*trace_ir_data_maps_create(
146 struct trace_ir_maps
*ir_maps
,
147 const bt_trace
*in_trace
);
150 void trace_ir_data_maps_destroy(struct trace_ir_data_maps
*d_maps
);
153 struct trace_ir_metadata_maps
*trace_ir_metadata_maps_create(
154 struct trace_ir_maps
*ir_maps
,
155 const bt_trace_class
*in_trace_class
);
158 void trace_ir_metadata_maps_destroy(struct trace_ir_metadata_maps
*md_maps
);
161 bt_stream
*trace_ir_mapping_create_new_mapped_stream(
162 struct trace_ir_maps
*ir_maps
,
163 const bt_stream
*in_stream
);
166 bt_stream
*trace_ir_mapping_borrow_mapped_stream(
167 struct trace_ir_maps
*ir_maps
,
168 const bt_stream
*in_stream
);
171 void trace_ir_mapping_remove_mapped_stream(
172 struct trace_ir_maps
*ir_maps
,
173 const bt_stream
*in_stream
);
176 bt_event_class
*trace_ir_mapping_create_new_mapped_event_class(
177 struct trace_ir_maps
*ir_maps
,
178 const bt_event_class
*in_event_class
);
181 bt_event_class
*trace_ir_mapping_borrow_mapped_event_class(
182 struct trace_ir_maps
*ir_maps
,
183 const bt_event_class
*in_event_class
);
186 bt_packet
*trace_ir_mapping_create_new_mapped_packet(
187 struct trace_ir_maps
*ir_maps
,
188 const bt_packet
*in_packet
);
191 bt_packet
*trace_ir_mapping_borrow_mapped_packet(
192 struct trace_ir_maps
*ir_maps
,
193 const bt_packet
*in_packet
);
196 void trace_ir_mapping_remove_mapped_packet(
197 struct trace_ir_maps
*ir_maps
,
198 const bt_packet
*in_packet
);
201 struct trace_ir_data_maps
*borrow_data_maps_from_input_trace(
202 struct trace_ir_maps
*ir_maps
, const bt_trace
*in_trace
)
207 struct trace_ir_data_maps
*d_maps
=
208 g_hash_table_lookup(ir_maps
->data_maps
, (gpointer
) in_trace
);
210 d_maps
= trace_ir_data_maps_create(ir_maps
, in_trace
);
211 g_hash_table_insert(ir_maps
->data_maps
, (gpointer
) in_trace
, d_maps
);
218 struct trace_ir_data_maps
*borrow_data_maps_from_input_stream(
219 struct trace_ir_maps
*ir_maps
, const bt_stream
*in_stream
)
222 BT_ASSERT(in_stream
);
224 return borrow_data_maps_from_input_trace(ir_maps
,
225 bt_stream_borrow_trace_const(in_stream
));
229 struct trace_ir_data_maps
*borrow_data_maps_from_input_packet(
230 struct trace_ir_maps
*ir_maps
, const bt_packet
*in_packet
)
233 BT_ASSERT(in_packet
);
235 return borrow_data_maps_from_input_stream(ir_maps
,
236 bt_packet_borrow_stream_const(in_packet
));
240 struct trace_ir_metadata_maps
*borrow_metadata_maps_from_input_trace_class(
241 struct trace_ir_maps
*ir_maps
,
242 const bt_trace_class
*in_trace_class
)
245 BT_ASSERT(in_trace_class
);
247 struct trace_ir_metadata_maps
*md_maps
=
248 g_hash_table_lookup(ir_maps
->metadata_maps
,
249 (gpointer
) in_trace_class
);
251 md_maps
= trace_ir_metadata_maps_create(ir_maps
, in_trace_class
);
252 g_hash_table_insert(ir_maps
->metadata_maps
,
253 (gpointer
) in_trace_class
, md_maps
);
260 struct trace_ir_metadata_maps
*borrow_metadata_maps_from_input_stream_class(
261 struct trace_ir_maps
*ir_maps
,
262 const bt_stream_class
*in_stream_class
) {
264 BT_ASSERT(in_stream_class
);
266 return borrow_metadata_maps_from_input_trace_class(ir_maps
,
267 bt_stream_class_borrow_trace_class_const(in_stream_class
));
271 struct trace_ir_metadata_maps
*borrow_metadata_maps_from_input_event_class(
272 struct trace_ir_maps
*ir_maps
,
273 const bt_event_class
*in_event_class
) {
275 BT_ASSERT(in_event_class
);
277 return borrow_metadata_maps_from_input_stream_class(ir_maps
,
278 bt_event_class_borrow_stream_class_const(in_event_class
));
281 #endif /* BABELTRACE_PLUGIN_DEBUG_INFO_TRACE_IR_MAPPING_H */