diff options
Diffstat (limited to 'hist.h')
-rw-r--r-- | hist.h | 116 |
1 files changed, 116 insertions, 0 deletions
@@ -0,0 +1,116 @@ +#if TIME_WITH_SYS_TIME +# include <sys/time.h> +# include <time.h> +#else +# if HAVE_SYS_TIME_H +# include <sys/time.h> +# else +# include <time.h> +# endif +#endif + +/* hist.h + + Given a time difference in microseconds, increment one of 61 + different buckets: + + 0 - 9 in increments of 1 usec + 0 - 9 in increments of 10 usecs + 0 - 9 in increments of 100 usecs + 0 - 9 in increments of 1 msec + 0 - 9 in increments of 10 msecs + 0 - 9 in increments of 100 msecs + 0 - 9 in increments of 1 sec + 0 - 9 in increments of 10 sec + > 100 secs + + This will allow any time to be recorded to within an accuracy of + 10%, and provides a compact representation for capturing the + distribution of a large number of time differences (e.g. + request-response latencies). + + Colin Low 10/6/93 + Rick Jones 2004-06-15 - extend to 1 and 10 usec +*/ +#ifndef _HIST_INCLUDED +#define _HIST_INCLUDED + +#ifdef IRIX +#include <sys/time.h> +#endif /* IRIX */ + +#if defined(HAVE_GET_HRT) +#include "hrt.h" +#endif + +struct histogram_struct { + int unit_usec[10]; + int ten_usec[10]; + int hundred_usec[10]; + int unit_msec[10]; + int ten_msec[10]; + int hundred_msec[10]; + int unit_sec[10]; + int ten_sec[10]; + int ridiculous; + int total; +}; + +typedef struct histogram_struct *HIST; + +/* + HIST_new - return a new, cleared histogram data type +*/ + +HIST HIST_new(void); + +/* + HIST_clear - reset a histogram by clearing all totals to zero +*/ + +void HIST_clear(HIST h); + +/* + HIST_add - add a time difference to a histogram. Time should be in + microseconds. +*/ + +void HIST_add(register HIST h, int time_delta); + +/* + HIST_report - create an ASCII report on the contents of a histogram. + Currently printsto standard out +*/ + +void HIST_report(HIST h); + +/* + HIST_timestamp - take a timestamp suitable for use in a histogram. +*/ + +#ifdef HAVE_GETHRTIME +void HIST_timestamp(hrtime_t *timestamp); +#elif defined(HAVE_GET_HRT) +void HIST_timestamp(hrt_t *timestamp); +#elif defined(WIN32) +void HIST_timestamp(LARGE_INTEGER *timestamp); +#else +void HIST_timestamp(struct timeval *timestamp); +#endif + +/* + delta_micro - calculate the difference in microseconds between two + timestamps +*/ +#ifdef HAVE_GETHRTIME +int delta_micro(hrtime_t *begin, hrtime_t *end); +#elif defined(HAVE_GET_HRT) +int delta_micro(hrt_t *begin, hrt_t *end); +#elif defined(WIN32) +int delta_micro(LARGE_INTEGER *begin, LARGE_INTEGER *end); +#else +int delta_micro(struct timeval *begin, struct timeval *end); +#endif + +#endif + |