1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00
RIOT/sys/include/benchmark.h

69 lines
1.9 KiB
C
Raw Normal View History

2017-12-20 11:32:16 +01:00
/*
* Copyright (C) 2017,2018 Freie Universität Berlin
2017-12-20 11:32:16 +01:00
*
* This file is subject to the terms and conditions of the GNU Lesser
* General Public License v2.1. See the file LICENSE in the top level
* directory for more details.
*/
/**
* @defgroup sys_benchmark Benchmark
* @ingroup sys
* @brief Framework for running simple runtime benchmarks
* @{
*
* @file
* @brief Interface for running simple benchmarks
*
* @author Hauke Petersen <hauke.petersen@fu-berlin.de>
*/
#ifndef BENCHMARK_H
#define BENCHMARK_H
#include <stdint.h>
#include "irq.h"
2021-11-03 13:04:54 +01:00
#include "ztimer.h"
2017-12-20 11:32:16 +01:00
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief Measure the runtime of a given function call
*
* As we are doing a time sensitive measurement here, there is no way around
* using a preprocessor function, as going with a function pointer or similar
* would influence the measured runtime...
*
* @param[in] name name for labeling the output
* @param[in] runs number of times to run @p func
* @param[in] func function call to benchmark
*/
#define BENCHMARK_FUNC(name, runs, func) \
{ \
2021-11-03 13:04:54 +01:00
uint32_t _benchmark_time = ztimer_now(ZTIMER_USEC); \
for (unsigned long i = 0; i < runs; i++) { \
func; \
} \
2021-11-03 13:04:54 +01:00
_benchmark_time = (ztimer_now(ZTIMER_USEC) - _benchmark_time);\
benchmark_print_time(_benchmark_time, runs, name); \
}
2017-12-20 11:32:16 +01:00
/**
* @brief Output the given time as well as the time per run on STDIO
*
* @param[in] time overall runtime in us
* @param[in] runs number of runs
* @param[in] name name to label the output
*/
void benchmark_print_time(uint32_t time, unsigned long runs, const char *name);
#ifdef __cplusplus
}
#endif
#endif /* BENCHMARK_H */
/** @} */