Zephyr API Documentation 4.4.0-rc1
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
benchmark.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2025 Måns Ansgariusson <mansgariusson@gmail.com>
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
12#ifndef ZTEST_BENCHMARK_H
13#define ZTEST_BENCHMARK_H
14#include <stdint.h>
15#include <stddef.h>
16
18typedef void (*ztest_benchmark_fn_t)(void);
19struct ztest_benchmark_suite {
20 const char *name;
21 ztest_benchmark_fn_t setup;
22 ztest_benchmark_fn_t teardown;
23};
24
25struct ztest_extreme_value {
26 uint64_t value;
27 uint64_t sample;
28};
29
30struct ztest_benchmark_stats {
31 double m2;
32 double mean;
33 uint64_t total;
34 uint64_t samples;
35 struct ztest_extreme_value min;
36 struct ztest_extreme_value max;
37};
38
39struct ztest_benchmark {
40 const char *name;
41 size_t iterations;
42 ztest_benchmark_fn_t setup;
43 ztest_benchmark_fn_t run;
44 ztest_benchmark_fn_t teardown;
45 struct ztest_benchmark_stats stats;
46 const struct ztest_benchmark_suite *suite;
47};
48
49struct ztest_benchmark_timed_stats {
50 uint64_t iterations;
51 uint64_t duration_cycles;
52};
53
54struct ztest_benchmark_timed {
55 size_t duration_ms;
56 const char *name;
57 ztest_benchmark_fn_t setup;
58 ztest_benchmark_fn_t run;
59 ztest_benchmark_fn_t teardown;
60 const struct ztest_benchmark_suite *suite;
61 struct ztest_benchmark_timed_stats stats;
62};
63
64void benchmark_main(void);
66
72
80#define ZTEST_BENCHMARK_SUITE(suite, setup_fn, teardown_fn) \
81 static const STRUCT_SECTION_ITERABLE(ztest_benchmark_suite, suite) = \
82 { \
83 .name = #suite, \
84 .setup = setup_fn, \
85 .teardown = teardown_fn, \
86 }
87
97#define ZTEST_BENCHMARK_SETUP_TEARDOWN(suite_name, benchmark, samples, setup_fn, teardown_fn) \
98 static __noinline void benchmark##_fn(void); \
99 static const STRUCT_SECTION_ITERABLE(ztest_benchmark, benchmark) = \
100 { \
101 .name = #benchmark, \
102 .iterations = samples, \
103 .setup = setup_fn, \
104 .run = benchmark##_fn, \
105 .teardown = teardown_fn, \
106 .suite = &suite_name, \
107 }; \
108 static __noinline void benchmark##_fn(void)
109
110
120#define ZTEST_BENCHMARK_TIMED_SETUP_TEARDOWN(testsuite, benchmark, duration, setup_fn, teardown_fn)\
121 static __noinline void benchmark##_fn(void); \
122 static const STRUCT_SECTION_ITERABLE(ztest_benchmark_timed, benchmark) = \
123 { \
124 .name = #benchmark, \
125 .duration_ms = duration, \
126 .setup = setup_fn, \
127 .run = benchmark##_fn, \
128 .teardown = teardown_fn, \
129 .suite = &testsuite, \
130 }; \
131 static __noinline void benchmark##_fn(void)
132
140#define ZTEST_BENCHMARK(suite, benchmark, samples) \
141 ZTEST_BENCHMARK_SETUP_TEARDOWN(suite, benchmark, samples, NULL, NULL)
142
143
150#define ZTEST_BENCHMARK_TIMED(suite, benchmark, duration) \
151 ZTEST_BENCHMARK_TIMED_SETUP_TEARDOWN(suite, benchmark, duration, NULL, NULL)
152
156#endif /* ZTEST_BENCHMARK_H */
#define min(a, b)
Return smaller value of two provided expressions.
Definition util.h:457
#define max(a, b)
Return larger value of two provided expressions.
Definition util.h:426
__UINT64_TYPE__ uint64_t
Definition stdint.h:91