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 tracer_ctx
->write_elem(tracer_ctx
, &elem
);
113 return SIDE_VISITOR_STATUS_OK
;
116 static uint32_t testarray
[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
118 static side_define_event(my_provider_event_vla_visitor
, "myprovider", "myvlavisit", SIDE_LOGLEVEL_DEBUG
,
120 side_field_vla_visitor("vlavisit", side_elem_type(SIDE_TYPE_U32
), test_visitor
),
121 side_field(SIDE_TYPE_S64
, "v"),
126 void test_vla_visitor(void)
128 my_provider_event_vla_visitor
.enabled
= 1;
129 side_event_cond(&my_provider_event_vla_visitor
) {
130 struct app_visitor_ctx ctx
= {
132 .length
= SIDE_ARRAY_SIZE(testarray
),
134 side_event_call(&my_provider_event_vla_visitor
, side_arg_list(side_arg_vla_visitor(&ctx
), side_arg_s64(42)));
138 /* 2D array visitor */
140 struct app_visitor_2d_inner_ctx
{
146 enum side_visitor_status
test_inner_visitor(const struct side_tracer_visitor_ctx
*tracer_ctx
, void *_ctx
)
148 struct app_visitor_2d_inner_ctx
*ctx
= (struct app_visitor_2d_inner_ctx
*) _ctx
;
149 uint32_t length
= ctx
->length
, i
;
151 for (i
= 0; i
< length
; i
++) {
152 const struct side_arg_vec elem
= {
153 .type
= SIDE_TYPE_U32
,
155 .side_u32
= ctx
->ptr
[i
],
158 tracer_ctx
->write_elem(tracer_ctx
, &elem
);
160 return SIDE_VISITOR_STATUS_OK
;
163 struct app_visitor_2d_outer_ctx
{
164 const uint32_t (*ptr
)[2];
169 enum side_visitor_status
test_outer_visitor(const struct side_tracer_visitor_ctx
*tracer_ctx
, void *_ctx
)
171 struct app_visitor_2d_outer_ctx
*ctx
= (struct app_visitor_2d_outer_ctx
*) _ctx
;
172 uint32_t length
= ctx
->length
, i
;
174 for (i
= 0; i
< length
; i
++) {
175 struct app_visitor_2d_inner_ctx inner_ctx
= {
179 const struct side_arg_vec elem
= side_arg_vla_visitor(&inner_ctx
);
180 tracer_ctx
->write_elem(tracer_ctx
, &elem
);
182 return SIDE_VISITOR_STATUS_OK
;
185 static uint32_t testarray2d
[][2] = {
191 static side_define_event(my_provider_event_vla_visitor2d
, "myprovider", "myvlavisit2d", SIDE_LOGLEVEL_DEBUG
,
193 side_field_vla_visitor("vlavisit2d",
194 side_elem(side_type_vla_visitor_decl(side_elem_type(SIDE_TYPE_U32
), test_inner_visitor
)), test_outer_visitor
),
195 side_field(SIDE_TYPE_S64
, "v"),
200 void test_vla_visitor_2d(void)
202 my_provider_event_vla_visitor2d
.enabled
= 1;
203 side_event_cond(&my_provider_event_vla_visitor2d
) {
204 struct app_visitor_2d_outer_ctx ctx
= {
206 .length
= SIDE_ARRAY_SIZE(testarray2d
),
208 side_event_call(&my_provider_event_vla_visitor2d
, side_arg_list(side_arg_vla_visitor(&ctx
), side_arg_s64(42)));
212 static int64_t array_fixint
[] = { -444, 555, 123, 2897432587 };
214 static side_define_event(my_provider_event_array_fixint
, "myprovider", "myarrayfixint", SIDE_LOGLEVEL_DEBUG
,
216 side_field_array("arrfixint", side_elem_type(SIDE_TYPE_S64
), SIDE_ARRAY_SIZE(array_fixint
)),
217 side_field(SIDE_TYPE_S64
, "v"),
222 void test_array_fixint(void)
224 my_provider_event_array_fixint
.enabled
= 1;
225 side_event(&my_provider_event_array_fixint
,
226 side_arg_list(side_arg_array_s64(array_fixint
), side_arg_s64(42)));
229 static int64_t vla_fixint
[] = { -444, 555, 123, 2897432587 };
231 static side_define_event(my_provider_event_vla_fixint
, "myprovider", "myvlafixint", SIDE_LOGLEVEL_DEBUG
,
233 side_field_vla("vlafixint", side_elem_type(SIDE_TYPE_S64
)),
234 side_field(SIDE_TYPE_S64
, "v"),
239 void test_vla_fixint(void)
241 my_provider_event_vla_fixint
.enabled
= 1;
242 side_event(&my_provider_event_vla_fixint
,
243 side_arg_list(side_arg_vla_s64(vla_fixint
, SIDE_ARRAY_SIZE(vla_fixint
)), side_arg_s64(42)));
246 static side_define_event(my_provider_event_dynamic_basic
,
247 "myprovider", "mydynamicbasic", SIDE_LOGLEVEL_DEBUG
,
249 side_field(SIDE_TYPE_DYNAMIC
, "dynamic"),
254 void test_dynamic_basic_type(void)
256 my_provider_event_dynamic_basic
.enabled
= 1;
257 side_event(&my_provider_event_dynamic_basic
,
258 side_arg_list(side_arg_dynamic(side_arg_dynamic_s16(-33))));
261 static side_define_event(my_provider_event_dynamic_vla
,
262 "myprovider", "mydynamicvla", SIDE_LOGLEVEL_DEBUG
,
264 side_field(SIDE_TYPE_DYNAMIC
, "dynamic"),
269 void test_dynamic_vla(void)
271 side_arg_dynamic_define_vec(myvla
,
273 side_arg_dynamic_u32(1), side_arg_dynamic_u32(2), side_arg_dynamic_u32(3))
275 my_provider_event_dynamic_vla
.enabled
= 1;
276 side_event(&my_provider_event_dynamic_vla
,
277 side_arg_list(side_arg_dynamic(side_arg_dynamic_vla(&myvla
))));
280 static side_define_event(my_provider_event_dynamic_null
,
281 "myprovider", "mydynamicnull", SIDE_LOGLEVEL_DEBUG
,
283 side_field(SIDE_TYPE_DYNAMIC
, "dynamic"),
288 void test_dynamic_null(void)
290 my_provider_event_dynamic_null
.enabled
= 1;
291 side_event(&my_provider_event_dynamic_null
,
292 side_arg_list(side_arg_dynamic(side_arg_dynamic_null())));
295 static side_define_event(my_provider_event_dynamic_map
,
296 "myprovider", "mydynamicmap", SIDE_LOGLEVEL_DEBUG
,
298 side_field(SIDE_TYPE_DYNAMIC
, "dynamic"),
303 void test_dynamic_map(void)
305 side_arg_dynamic_define_map(mymap
,
307 side_arg_dynamic_field("a", side_arg_dynamic_u32(43)),
308 side_arg_dynamic_field("b", side_arg_dynamic_string("zzz")),
309 side_arg_dynamic_field("c", side_arg_dynamic_null())
313 my_provider_event_dynamic_map
.enabled
= 1;
314 side_event(&my_provider_event_dynamic_map
,
315 side_arg_list(side_arg_dynamic(side_arg_dynamic_map(&mymap
))));
318 static side_define_event(my_provider_event_dynamic_nested_map
,
319 "myprovider", "mydynamicnestedmap", SIDE_LOGLEVEL_DEBUG
,
321 side_field(SIDE_TYPE_DYNAMIC
, "dynamic"),
326 void test_dynamic_nested_map(void)
328 side_arg_dynamic_define_map(nested
,
330 side_arg_dynamic_field("a", side_arg_dynamic_u32(43)),
331 side_arg_dynamic_field("b", side_arg_dynamic_u8(55)),
334 side_arg_dynamic_define_map(nested2
,
336 side_arg_dynamic_field("aa", side_arg_dynamic_u64(128)),
337 side_arg_dynamic_field("bb", side_arg_dynamic_u16(1)),
340 side_arg_dynamic_define_map(mymap
,
342 side_arg_dynamic_field("nested", side_arg_dynamic_map(&nested
)),
343 side_arg_dynamic_field("nested2", side_arg_dynamic_map(&nested2
)),
346 my_provider_event_dynamic_nested_map
.enabled
= 1;
347 side_event(&my_provider_event_dynamic_nested_map
,
348 side_arg_list(side_arg_dynamic(side_arg_dynamic_map(&mymap
))));
351 static side_define_event(my_provider_event_dynamic_vla_map
,
352 "myprovider", "mydynamicvlamap", SIDE_LOGLEVEL_DEBUG
,
354 side_field(SIDE_TYPE_DYNAMIC
, "dynamic"),
359 void test_dynamic_vla_map(void)
361 side_arg_dynamic_define_map(nested
,
363 side_arg_dynamic_field("a", side_arg_dynamic_u32(43)),
364 side_arg_dynamic_field("b", side_arg_dynamic_u8(55)),
367 side_arg_dynamic_define_vec(myvla
,
369 side_arg_dynamic_map(&nested
),
370 side_arg_dynamic_map(&nested
),
371 side_arg_dynamic_map(&nested
),
372 side_arg_dynamic_map(&nested
),
375 my_provider_event_dynamic_vla_map
.enabled
= 1;
376 side_event(&my_provider_event_dynamic_vla_map
,
377 side_arg_list(side_arg_dynamic(side_arg_dynamic_vla(&myvla
))));
380 static side_define_event(my_provider_event_dynamic_map_vla
,
381 "myprovider", "mydynamicmapvla", SIDE_LOGLEVEL_DEBUG
,
383 side_field(SIDE_TYPE_DYNAMIC
, "dynamic"),
388 void test_dynamic_map_vla(void)
390 side_arg_dynamic_define_vec(myvla
,
392 side_arg_dynamic_u32(1), side_arg_dynamic_u32(2), side_arg_dynamic_u32(3))
394 side_arg_dynamic_define_vec(myvla2
,
396 side_arg_dynamic_u32(4), side_arg_dynamic_u64(5), side_arg_dynamic_u32(6))
398 side_arg_dynamic_define_map(mymap
,
400 side_arg_dynamic_field("a", side_arg_dynamic_vla(&myvla
)),
401 side_arg_dynamic_field("b", side_arg_dynamic_vla(&myvla2
)),
404 my_provider_event_dynamic_map_vla
.enabled
= 1;
405 side_event(&my_provider_event_dynamic_map_vla
,
406 side_arg_list(side_arg_dynamic(side_arg_dynamic_map(&mymap
))));
409 static side_define_event(my_provider_event_dynamic_nested_vla
,
410 "myprovider", "mydynamicnestedvla", SIDE_LOGLEVEL_DEBUG
,
412 side_field(SIDE_TYPE_DYNAMIC
, "dynamic"),
417 void test_dynamic_nested_vla(void)
419 side_arg_dynamic_define_vec(nestedvla
,
421 side_arg_dynamic_u32(1), side_arg_dynamic_u16(2), side_arg_dynamic_u32(3),
424 side_arg_dynamic_define_vec(nestedvla2
,
426 side_arg_dynamic_u8(4), side_arg_dynamic_u32(5), side_arg_dynamic_u32(6),
429 side_arg_dynamic_define_vec(myvla
,
431 side_arg_dynamic_vla(&nestedvla
),
432 side_arg_dynamic_vla(&nestedvla2
),
435 my_provider_event_dynamic_nested_vla
.enabled
= 1;
436 side_event(&my_provider_event_dynamic_nested_vla
,
437 side_arg_list(side_arg_dynamic(side_arg_dynamic_vla(&myvla
))));
447 test_vla_visitor_2d();
450 test_dynamic_basic_type();
454 test_dynamic_nested_map();
455 test_dynamic_vla_map();
456 test_dynamic_map_vla();
457 test_dynamic_nested_vla();