aboutsummaryrefslogtreecommitdiff
path: root/src/hist.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/hist.h')
-rw-r--r--src/hist.h169
1 files changed, 169 insertions, 0 deletions
diff --git a/src/hist.h b/src/hist.h
new file mode 100644
index 0000000..976c647
--- /dev/null
+++ b/src/hist.h
@@ -0,0 +1,169 @@
+#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
+#ifdef WIN32
+# include "missing\stdint.h"
+#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
+
+#if defined(HAVE_GET_HRT)
+#include "hrt.h"
+#endif
+
+#ifndef HIST_NUM_OF_BUCKET
+#define HIST_NUM_OF_BUCKET 100
+#endif
+
+struct histogram_struct {
+ int unit_usec[HIST_NUM_OF_BUCKET];
+ int ten_usec[HIST_NUM_OF_BUCKET];
+ int hundred_usec[HIST_NUM_OF_BUCKET];
+ int unit_msec[HIST_NUM_OF_BUCKET];
+ int ten_msec[HIST_NUM_OF_BUCKET];
+ int hundred_msec[HIST_NUM_OF_BUCKET];
+ int unit_sec[HIST_NUM_OF_BUCKET];
+ int ten_sec[HIST_NUM_OF_BUCKET];
+ int ridiculous;
+ int total;
+ int64_t sum;
+ double sumsquare;
+ int hmin;
+ int hmax;
+ int limit;
+ int count;
+ int producer;
+ int consumer;
+#ifdef HAVE_GETHRTIME
+ hrtime_t *time_ones;
+ hrtime_t time_two;
+#elif HAVE_GET_HRT
+ hrt_t *time_ones;
+ hrt_t time_two;
+#elif defined(WIN32)
+ LARGE_INTEGER *time_ones;
+ LARGE_INTEGER time_two;
+#else
+ struct timeval *time_ones;
+ struct timeval time_two;
+#endif /* HAVE_GETHRTIME */
+
+};
+
+typedef struct histogram_struct *HIST;
+
+/*
+ HIST_new - return a new, cleared histogram data type
+*/
+
+HIST HIST_new(void);
+
+/*
+ HIST_new_n - return a new, cleard histogram data type able to track
+ at least max_outstanding timestamps
+*/
+
+HIST HIST_new_n(int max_outstanding);
+
+/*
+ HIST_clear - reset a histogram by clearing all totals to zero
+*/
+
+
+void HIST_clear(HIST h);
+
+/*
+ HIST_purge - forget about any remaining outstanding timestamps
+ being tracked
+*/
+
+void HIST_purge(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
+
+/*
+ HIST_timestamp_start - start a new timestamp
+*/
+
+void HIST_timestamp_start(HIST h);
+
+/*
+ HIST_timestamp_stop_add - complete the oldest outstanding timestamp
+ and add it to the histogram
+*/
+
+void HIST_timestamp_stop_add(HIST h);
+
+/*
+ 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
+