1 // SPDX-License-Identifier: MIT
3 * Copyright 2022 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 #include <side/trace.h>
14 /* User code example */
16 static side_define_event(my_provider_event
, "myprovider", "myevent", SIDE_LOGLEVEL_DEBUG
,
18 side_field(SIDE_TYPE_U32
, "abc"),
19 side_field(SIDE_TYPE_S64
, "def"),
20 side_field(SIDE_TYPE_DYNAMIC
, "dynamic"),
25 void test_fields(void)
30 my_provider_event
.enabled
= 1;
31 side_event(&my_provider_event
, side_arg_list(side_arg_u32(uw
), side_arg_s64(sdw
),
32 side_arg_dynamic(side_arg_dynamic_string("zzz"))));
35 static side_define_event(my_provider_event2
, "myprovider", "myevent2", SIDE_LOGLEVEL_DEBUG
,
37 side_field_struct("structfield",
39 side_field(SIDE_TYPE_U32
, "x"),
40 side_field(SIDE_TYPE_S64
, "y"),
43 side_field(SIDE_TYPE_U8
, "z"),
48 void test_struct(void)
50 my_provider_event2
.enabled
= 1;
51 side_event_cond(&my_provider_event2
) {
52 side_arg_define_vec(mystruct
, side_arg_list(side_arg_u32(21), side_arg_s64(22)));
53 side_event_call(&my_provider_event2
, side_arg_list(side_arg_struct(&mystruct
), side_arg_u8(55)));
57 static side_define_event(my_provider_event_array
, "myprovider", "myarray", SIDE_LOGLEVEL_DEBUG
,
59 side_field_array("arr", side_elem_type(SIDE_TYPE_U32
), 3),
60 side_field(SIDE_TYPE_S64
, "v"),
67 my_provider_event_array
.enabled
= 1;
68 side_event_cond(&my_provider_event_array
) {
69 side_arg_define_vec(myarray
, side_arg_list(side_arg_u32(1), side_arg_u32(2), side_arg_u32(3)));
70 side_event_call(&my_provider_event_array
, side_arg_list(side_arg_array(&myarray
), side_arg_s64(42)));
74 static side_define_event(my_provider_event_vla
, "myprovider", "myvla", SIDE_LOGLEVEL_DEBUG
,
76 side_field_vla("vla", side_elem_type(SIDE_TYPE_U32
)),
77 side_field(SIDE_TYPE_S64
, "v"),
84 my_provider_event_vla
.enabled
= 1;
85 side_event_cond(&my_provider_event_vla
) {
86 side_arg_define_vec(myvla
, side_arg_list(side_arg_u32(1), side_arg_u32(2), side_arg_u32(3)));
87 side_event_call(&my_provider_event_vla
, side_arg_list(side_arg_vla(&myvla
), side_arg_s64(42)));
91 /* 1D array visitor */
93 struct app_visitor_ctx
{
99 enum side_visitor_status
test_visitor(const struct side_tracer_visitor_ctx
*tracer_ctx
, void *_ctx
)
101 struct app_visitor_ctx
*ctx
= (struct app_visitor_ctx
*) _ctx
;
102 uint32_t length
= ctx
->length
, i
;
104 for (i
= 0; i
< length
; i
++) {
105 const struct side_arg_vec elem
= {
106 .type
= SIDE_TYPE_U32
,
108 .side_u32
= ctx
->ptr
[i
],
111 if (tracer_ctx
->write_elem(tracer_ctx
, &elem
) != SIDE_VISITOR_STATUS_OK
)
112 return SIDE_VISITOR_STATUS_ERROR
;
114 return SIDE_VISITOR_STATUS_OK
;
117 static uint32_t testarray
[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
119 static side_define_event(my_provider_event_vla_visitor
, "myprovider", "myvlavisit", SIDE_LOGLEVEL_DEBUG
,
121 side_field_vla_visitor("vlavisit", side_elem_type(SIDE_TYPE_U32
), test_visitor
),
122 side_field(SIDE_TYPE_S64
, "v"),
127 void test_vla_visitor(void)
129 my_provider_event_vla_visitor
.enabled
= 1;
130 side_event_cond(&my_provider_event_vla_visitor
) {
131 struct app_visitor_ctx ctx
= {
133 .length
= SIDE_ARRAY_SIZE(testarray
),
135 side_event_call(&my_provider_event_vla_visitor
, side_arg_list(side_arg_vla_visitor(&ctx
), side_arg_s64(42)));
139 /* 2D array visitor */
141 struct app_visitor_2d_inner_ctx
{
147 enum side_visitor_status
test_inner_visitor(const struct side_tracer_visitor_ctx
*tracer_ctx
, void *_ctx
)
149 struct app_visitor_2d_inner_ctx
*ctx
= (struct app_visitor_2d_inner_ctx
*) _ctx
;
150 uint32_t length
= ctx
->length
, i
;
152 for (i
= 0; i
< length
; i
++) {
153 const struct side_arg_vec elem
= {
154 .type
= SIDE_TYPE_U32
,
156 .side_u32
= ctx
->ptr
[i
],
159 if (tracer_ctx
->write_elem(tracer_ctx
, &elem
) != SIDE_VISITOR_STATUS_OK
)
160 return SIDE_VISITOR_STATUS_ERROR
;
162 return SIDE_VISITOR_STATUS_OK
;
165 struct app_visitor_2d_outer_ctx
{
166 const uint32_t (*ptr
)[2];
171 enum side_visitor_status
test_outer_visitor(const struct side_tracer_visitor_ctx
*tracer_ctx
, void *_ctx
)
173 struct app_visitor_2d_outer_ctx
*ctx
= (struct app_visitor_2d_outer_ctx
*) _ctx
;
174 uint32_t length
= ctx
->length
, i
;
176 for (i
= 0; i
< length
; i
++) {
177 struct app_visitor_2d_inner_ctx inner_ctx
= {
181 const struct side_arg_vec elem
= side_arg_vla_visitor(&inner_ctx
);
182 if (tracer_ctx
->write_elem(tracer_ctx
, &elem
) != SIDE_VISITOR_STATUS_OK
)
183 return SIDE_VISITOR_STATUS_ERROR
;
185 return SIDE_VISITOR_STATUS_OK
;
188 static uint32_t testarray2d
[][2] = {
194 static side_define_event(my_provider_event_vla_visitor2d
, "myprovider", "myvlavisit2d", SIDE_LOGLEVEL_DEBUG
,
196 side_field_vla_visitor("vlavisit2d",
197 side_elem(side_type_vla_visitor_decl(side_elem_type(SIDE_TYPE_U32
), test_inner_visitor
)), test_outer_visitor
),
198 side_field(SIDE_TYPE_S64
, "v"),
203 void test_vla_visitor_2d(void)
205 my_provider_event_vla_visitor2d
.enabled
= 1;
206 side_event_cond(&my_provider_event_vla_visitor2d
) {
207 struct app_visitor_2d_outer_ctx ctx
= {
209 .length
= SIDE_ARRAY_SIZE(testarray2d
),
211 side_event_call(&my_provider_event_vla_visitor2d
, side_arg_list(side_arg_vla_visitor(&ctx
), side_arg_s64(42)));
215 static int64_t array_fixint
[] = { -444, 555, 123, 2897432587 };
217 static side_define_event(my_provider_event_array_fixint
, "myprovider", "myarrayfixint", SIDE_LOGLEVEL_DEBUG
,
219 side_field_array("arrfixint", side_elem_type(SIDE_TYPE_S64
), SIDE_ARRAY_SIZE(array_fixint
)),
220 side_field(SIDE_TYPE_S64
, "v"),
225 void test_array_fixint(void)
227 my_provider_event_array_fixint
.enabled
= 1;
228 side_event(&my_provider_event_array_fixint
,
229 side_arg_list(side_arg_array_s64(array_fixint
), side_arg_s64(42)));
232 static int64_t vla_fixint
[] = { -444, 555, 123, 2897432587 };
234 static side_define_event(my_provider_event_vla_fixint
, "myprovider", "myvlafixint", SIDE_LOGLEVEL_DEBUG
,
236 side_field_vla("vlafixint", side_elem_type(SIDE_TYPE_S64
)),
237 side_field(SIDE_TYPE_S64
, "v"),
242 void test_vla_fixint(void)
244 my_provider_event_vla_fixint
.enabled
= 1;
245 side_event(&my_provider_event_vla_fixint
,
246 side_arg_list(side_arg_vla_s64(vla_fixint
, SIDE_ARRAY_SIZE(vla_fixint
)), side_arg_s64(42)));
249 static side_define_event(my_provider_event_dynamic_basic
,
250 "myprovider", "mydynamicbasic", SIDE_LOGLEVEL_DEBUG
,
252 side_field(SIDE_TYPE_DYNAMIC
, "dynamic"),
257 void test_dynamic_basic_type(void)
259 my_provider_event_dynamic_basic
.enabled
= 1;
260 side_event(&my_provider_event_dynamic_basic
,
261 side_arg_list(side_arg_dynamic(side_arg_dynamic_s16(-33))));
264 static side_define_event(my_provider_event_dynamic_vla
,
265 "myprovider", "mydynamicvla", SIDE_LOGLEVEL_DEBUG
,
267 side_field(SIDE_TYPE_DYNAMIC
, "dynamic"),
272 void test_dynamic_vla(void)
274 side_arg_dynamic_define_vec(myvla
,
276 side_arg_dynamic_u32(1), side_arg_dynamic_u32(2), side_arg_dynamic_u32(3))
278 my_provider_event_dynamic_vla
.enabled
= 1;
279 side_event(&my_provider_event_dynamic_vla
,
280 side_arg_list(side_arg_dynamic(side_arg_dynamic_vla(&myvla
))));
283 static side_define_event(my_provider_event_dynamic_null
,
284 "myprovider", "mydynamicnull", SIDE_LOGLEVEL_DEBUG
,
286 side_field(SIDE_TYPE_DYNAMIC
, "dynamic"),
291 void test_dynamic_null(void)
293 my_provider_event_dynamic_null
.enabled
= 1;
294 side_event(&my_provider_event_dynamic_null
,
295 side_arg_list(side_arg_dynamic(side_arg_dynamic_null())));
298 static side_define_event(my_provider_event_dynamic_map
,
299 "myprovider", "mydynamicmap", SIDE_LOGLEVEL_DEBUG
,
301 side_field(SIDE_TYPE_DYNAMIC
, "dynamic"),
306 void test_dynamic_map(void)
308 side_arg_dynamic_define_map(mymap
,
310 side_arg_dynamic_field("a", side_arg_dynamic_u32(43)),
311 side_arg_dynamic_field("b", side_arg_dynamic_string("zzz")),
312 side_arg_dynamic_field("c", side_arg_dynamic_null())
316 my_provider_event_dynamic_map
.enabled
= 1;
317 side_event(&my_provider_event_dynamic_map
,
318 side_arg_list(side_arg_dynamic(side_arg_dynamic_map(&mymap
))));
321 static side_define_event(my_provider_event_dynamic_nested_map
,
322 "myprovider", "mydynamicnestedmap", SIDE_LOGLEVEL_DEBUG
,
324 side_field(SIDE_TYPE_DYNAMIC
, "dynamic"),
329 void test_dynamic_nested_map(void)
331 side_arg_dynamic_define_map(nested
,
333 side_arg_dynamic_field("a", side_arg_dynamic_u32(43)),
334 side_arg_dynamic_field("b", side_arg_dynamic_u8(55)),
337 side_arg_dynamic_define_map(nested2
,
339 side_arg_dynamic_field("aa", side_arg_dynamic_u64(128)),
340 side_arg_dynamic_field("bb", side_arg_dynamic_u16(1)),
343 side_arg_dynamic_define_map(mymap
,
345 side_arg_dynamic_field("nested", side_arg_dynamic_map(&nested
)),
346 side_arg_dynamic_field("nested2", side_arg_dynamic_map(&nested2
)),
349 my_provider_event_dynamic_nested_map
.enabled
= 1;
350 side_event(&my_provider_event_dynamic_nested_map
,
351 side_arg_list(side_arg_dynamic(side_arg_dynamic_map(&mymap
))));
354 static side_define_event(my_provider_event_dynamic_vla_map
,
355 "myprovider", "mydynamicvlamap", SIDE_LOGLEVEL_DEBUG
,
357 side_field(SIDE_TYPE_DYNAMIC
, "dynamic"),
362 void test_dynamic_vla_map(void)
364 side_arg_dynamic_define_map(nested
,
366 side_arg_dynamic_field("a", side_arg_dynamic_u32(43)),
367 side_arg_dynamic_field("b", side_arg_dynamic_u8(55)),
370 side_arg_dynamic_define_vec(myvla
,
372 side_arg_dynamic_map(&nested
),
373 side_arg_dynamic_map(&nested
),
374 side_arg_dynamic_map(&nested
),
375 side_arg_dynamic_map(&nested
),
378 my_provider_event_dynamic_vla_map
.enabled
= 1;
379 side_event(&my_provider_event_dynamic_vla_map
,
380 side_arg_list(side_arg_dynamic(side_arg_dynamic_vla(&myvla
))));
383 static side_define_event(my_provider_event_dynamic_map_vla
,
384 "myprovider", "mydynamicmapvla", SIDE_LOGLEVEL_DEBUG
,
386 side_field(SIDE_TYPE_DYNAMIC
, "dynamic"),
391 void test_dynamic_map_vla(void)
393 side_arg_dynamic_define_vec(myvla
,
395 side_arg_dynamic_u32(1), side_arg_dynamic_u32(2), side_arg_dynamic_u32(3))
397 side_arg_dynamic_define_vec(myvla2
,
399 side_arg_dynamic_u32(4), side_arg_dynamic_u64(5), side_arg_dynamic_u32(6))
401 side_arg_dynamic_define_map(mymap
,
403 side_arg_dynamic_field("a", side_arg_dynamic_vla(&myvla
)),
404 side_arg_dynamic_field("b", side_arg_dynamic_vla(&myvla2
)),
407 my_provider_event_dynamic_map_vla
.enabled
= 1;
408 side_event(&my_provider_event_dynamic_map_vla
,
409 side_arg_list(side_arg_dynamic(side_arg_dynamic_map(&mymap
))));
412 static side_define_event(my_provider_event_dynamic_nested_vla
,
413 "myprovider", "mydynamicnestedvla", SIDE_LOGLEVEL_DEBUG
,
415 side_field(SIDE_TYPE_DYNAMIC
, "dynamic"),
420 void test_dynamic_nested_vla(void)
422 side_arg_dynamic_define_vec(nestedvla
,
424 side_arg_dynamic_u32(1), side_arg_dynamic_u16(2), side_arg_dynamic_u32(3),
427 side_arg_dynamic_define_vec(nestedvla2
,
429 side_arg_dynamic_u8(4), side_arg_dynamic_u32(5), side_arg_dynamic_u32(6),
432 side_arg_dynamic_define_vec(myvla
,
434 side_arg_dynamic_vla(&nestedvla
),
435 side_arg_dynamic_vla(&nestedvla2
),
438 my_provider_event_dynamic_nested_vla
.enabled
= 1;
439 side_event(&my_provider_event_dynamic_nested_vla
,
440 side_arg_list(side_arg_dynamic(side_arg_dynamic_vla(&myvla
))));
450 test_vla_visitor_2d();
453 test_dynamic_basic_type();
457 test_dynamic_nested_map();
458 test_dynamic_vla_map();
459 test_dynamic_map_vla();
460 test_dynamic_nested_vla();