blob: 9496df9736a1358ff677bf3c36023bfa222195e3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
#ifndef TINYFF_BENCH_H_
#define TINYFF_BENCH_H_
#include <time.h>
#include <tinyff/result.h>
#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 ff_bench ff_bench_start(const char* label) {
ff_bench b;
b.label = label;
b._start = clock();
b._end = 0;
// Markers
b._mcount = 0;
return b;
}
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;
}
#endif // TINYFF_BENCH_H
|