aboutsummaryrefslogtreecommitdiff
path: root/hist.h
diff options
context:
space:
mode:
Diffstat (limited to 'hist.h')
-rw-r--r--hist.h116
1 files changed, 116 insertions, 0 deletions
diff --git a/hist.h b/hist.h
new file mode 100644
index 0000000..b2ed22b
--- /dev/null
+++ b/hist.h
@@ -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
+