perf: a bit of documentation
[helenos.git] / uspace / app / perf / doc / doxygroups.h
blobe3b8c0aea5461834374dc4d96bbfe27c2d5e313f
1 /** @addtogroup perf perf
2 * @brief User space performance measuring tool
3 * @ingroup apps
5 * @details
7 * To add a new benchmark, you need to implement the actual benchmarking
8 * code and register it.
10 * Registration is done by adding
11 * <code>extern benchmark_t bench_YOUR_NAME</code> reference to benchlist.h
12 * and by adding it to the array in benchlist.c.
14 * The actual benchmark should reside in a separate file (see malloc/malloc1.c
15 * for example) and has to (at least) declare one function (the actual
16 * benchmark) and fill-in the benchmark_t structure.
18 * Fill-in the name of the benchmark, its description and a reference to the
19 * benchmark function to the benchmark_t.
21 * The benchmarking function has to accept for arguments:
22 * @li stopwatch_t: store the measured data there
23 * @li uint64_t: size of the workload - typically number of inner loops in
24 * your benchmark (used to self-calibrate benchmark size)
25 * @li char * and size_t giving you access to buffer for storing error message
26 * if the benchmark fails (return false from the function itself then)
28 * Typically, the structure of the function is following:
29 * @code{c}
30 * static bool runner(stopwatch_t *stopwatch, uint64_t size,
31 * char *error, size_t error_size)
32 * {
33 * stopwatch_start(stopwatch);
34 * for (uint64_t i = 0; i < size; i++) {
35 * // measured action
36 * }
37 * stopwatch_stop(stopwatch);
39 * return true;
40 * }
41 * @endcode