117 lines
2.4 KiB
C
117 lines
2.4 KiB
C
#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
|
|
|