1
0
Fork 0
mirror of https://github.com/hermitcore/libhermit.git synced 2025-03-09 00:00:03 +01:00
libhermit/usr/benchmarks/hist.c
2016-12-03 00:43:49 +01:00

78 lines
1.7 KiB
C

/*
* =====================================================================================
*
* Filename: hist.c
*
* Description:
*
* Version: 1.0
* Created: 26.07.2014 20:02:34
* Revision: none
* Compiler: gcc
*
* Author: Georg Wassen (gw) (),
* Company:
*
* =====================================================================================
*/
#include "hist.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
static const struct opt *opts;
static uint32_t *hists;
uint32_t *hist_alloc(const struct opt *opt)
{
opts = opt;
hists = calloc(opt->hist_cnt, sizeof(uint32_t));
hist_reset();
return hists;
}
int hist_reset(void)
{
unsigned i;
for (i=0; i<opts->hist_cnt; i++) {
hists[i] = 0;
}
return 0;
}
void hist_add(uint64_t t)
{
t /= opts->hist_width;
if (t > opts->hist_cnt-1) t = opts->hist_cnt-1;
hists[t]++;
}
int hist_print(void)
{
unsigned i;
unsigned max=0;
const size_t bar_width = 30;
char bar[bar_width+1];
for (i=0; i<opts->hist_cnt; i++) {
if (hists[i] > max) max = hists[i];
}
max = (unsigned)ceil(log10((double)max));
if (max == 0) max = 1;
memset(bar, '*', bar_width);
bar[bar_width] = 0;
printf("Histogram (%u bins with %u ticks each)\n", opts->hist_cnt, opts->hist_width);
for (i=0; i<opts->hist_cnt; i++) {
printf(" %5u : %5u..%5u : %-10u %s\n", i,
(unsigned)(i*opts->hist_width),
(unsigned)((i+1)*opts->hist_width-1),
(unsigned)(hists[i]),
(char*)bar+(unsigned)(bar_width-((log10(hists[i]+1.)*bar_width)/max)));
}
return 0;
}