diff options
| author | TazyFoundSoup <gardendistrict0x0@outlook.com> | 2026-05-22 09:43:59 +1000 |
|---|---|---|
| committer | TazyFoundSoup <gardendistrict0x0@outlook.com> | 2026-05-22 09:43:59 +1000 |
| commit | 77aa9a3259ddfd6c64534d63424d5b0fa3010900 (patch) | |
| tree | 3744ec77c3cbe164457d1e421fd4bf7dceff4c02 /include/tinyff/bench | |
| parent | 4d42b317f4970bd08f9b81fcc184fc015736ff58 (diff) | |
refactor: move benches to include directory
Diffstat (limited to 'include/tinyff/bench')
| -rw-r--r-- | include/tinyff/bench/bench.h | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/include/tinyff/bench/bench.h b/include/tinyff/bench/bench.h new file mode 100644 index 0000000..f623e0f --- /dev/null +++ b/include/tinyff/bench/bench.h @@ -0,0 +1,80 @@ +#ifdef USE_BENCH + +#ifndef TINYFF_BENCH_H_ +#define TINYFF_BENCH_H_ + +#include <time.h> +#include <tinyff/result.h> + +// Forward declarations +typedef struct ff_ctx ff_ctx; +ff_result ff_dprintf(ff_ctx* ctx, const char *msg, ...); + + +#define FF_BENCH_MAX_MARKERS 32 + +typedef struct ff_ctx ff_ctx; + +typedef struct { + const char *label; + clock_t tick; +} ff_bench_marker; + +typedef struct { + const char *label; + clock_t _start; + clock_t _end; + + ff_bench_marker markers[FF_BENCH_MAX_MARKERS]; + int _mcount; +} ff_bench; + +// These need to be inline so they are fast + +static inline void ff_bench_start(ff_bench *b, const char* label) { + b->label = label; + b->_start = clock(); + b->_end = 0; + b->_mcount = 0; + +} + + +static inline void ff_bench_end(ff_bench *b) { + b->_end = clock(); +} + +static inline ff_result ff_bench_mark(ff_bench *b, const char *label) { + if (b->_mcount >= FF_BENCH_MAX_MARKERS) return FF_RESULT_ERROR_OUT_OF_BOUNDS; + + ff_bench_marker m; + m.label = label; + m.tick = clock(); + + b->markers[b->_mcount] = m; + b->_mcount++; + + return FF_RESULT_OK; +} + +static inline double ff_bench_seconds(const ff_bench *b) { + return (double)(b->_end - b->_start) / CLOCKS_PER_SEC; +} + +static inline void ff_bench_print(ff_ctx* ctx, const ff_bench *b) +{ + double total_ms = (double)(b->_end - b->_start) * 1000.0 / CLOCKS_PER_SEC; + + ff_dprintf(ctx, "== bench: %s ==\n", b->label); + + for (int i = 0; i < b->_mcount; i++) { + double ms = (double)(b->markers[i].tick - b->_start) * 1000.0 / CLOCKS_PER_SEC; + ff_dprintf(ctx, " [%s] +%.3f ms\n", b->markers[i].label, ms); + } + + ff_dprintf(ctx, "total: %.3f ms\n", total_ms); +} + + +#endif // TINYFF_BENCH_H +#endif // USE_BENCH
\ No newline at end of file |
