unicstl/perf/perf.c

80 lines
1.8 KiB
C

/**
* @file main.c
* @author wenjf (Orig5826@163.com)
* @brief
* @version 0.1
* @date 2026-05-12
*
* @copyright Copyright (c) 2026
*
*/
#include "perf.h"
#define PERF_FORMAT_HEAD "%-24s %-4s %-6s %-12s\n"
#define PERF_FORMAT_DATA "%-24s T%-3d %-6d %8.3f ms\n"
void perf_init(void)
{
printf(PERF_FORMAT_HEAD, "function", " id ", " loop", " time(ms)");
printf(PERF_FORMAT_HEAD, "--------", "----", "------", "------------");
}
void perf_begin(struct _perf_args* args)
{
timespec_get(&args->start, TIME_UTC);
}
double calc_elapsed(struct timespec start, struct timespec end)
{
return (end.tv_sec - start.tv_sec) + (end.tv_nsec - start.tv_nsec) / 1e9;
}
void perf_end(struct _perf_args* args)
{
timespec_get(&args->end, TIME_UTC);
args->elapsed = calc_elapsed(args->start, args->end);
printf(PERF_FORMAT_DATA, args->name, args->id, 1, 1000 * args->elapsed);
}
void perf_print(struct _perf_args* args)
{
}
#if 0
void perf_run_avg(perf_func_t perf_func, const char *func_name, size_t count)
{
double time_used = 0;
double time_total = 0;
for(size_t i = 0; i < count; i++)
{
perf_start();
perf_func();
perf_end();
time_used = (time_end.tv_sec - time_start.tv_sec) + (time_end.tv_nsec - time_start.tv_nsec) / 1e9;
time_total += time_used;
}
printf(PERF_FORMAT_DATA, func_name, "AVG", 1, 1000 * time_total/count);
}
void perf_run_loop(perf_func_t perf_func, const char *func_name, size_t loop)
{
double time_used = 0;
perf_start();
for(size_t i = 0; i < loop; i++)
{
perf_func();
}
perf_end();
time_used = (time_end.tv_sec - time_start.tv_sec) + (time_end.tv_nsec - time_start.tv_nsec) / 1e9;
printf(PERF_FORMAT_DATA, func_name, "LOOP", loop, 1000 * time_used);
}
#endif