1 #if TIME_WITH_SYS_TIME
2 # include <sys/time.h>
3 # include <time.h>
4 #else
5 # if HAVE_SYS_TIME_H
6 #  include <sys/time.h>
7 # else
8 #  include <time.h>
9 # endif
10 #endif
11 
12 /* hist.h
13 
14    Given a time difference in microseconds, increment one of 61
15    different buckets:
16 
17    0 - 9 in increments of 1 usec
18    0 - 9 in increments of 10 usecs
19    0 - 9 in increments of 100 usecs
20    0 - 9 in increments of 1 msec
21    0 - 9 in increments of 10 msecs
22    0 - 9 in increments of 100 msecs
23    0 - 9 in increments of 1 sec
24    0 - 9 in increments of 10 sec
25    > 100 secs
26 
27    This will allow any time to be recorded to within an accuracy of
28    10%, and provides a compact representation for capturing the
29    distribution of a large number of time differences (e.g.
30    request-response latencies).
31 
32    Colin Low  10/6/93
33    Rick Jones 2004-06-15 - extend to 1 and 10 usec
34 */
35 #ifndef _HIST_INCLUDED
36 #define _HIST_INCLUDED
37 
38 #ifdef IRIX
39 #include <sys/time.h>
40 #endif /* IRIX */
41 
42 #if defined(HAVE_GET_HRT)
43 #include "hrt.h"
44 #endif
45 
46 struct histogram_struct {
47   int unit_usec[10];
48   int ten_usec[10];
49   int hundred_usec[10];
50   int unit_msec[10];
51   int ten_msec[10];
52   int hundred_msec[10];
53   int unit_sec[10];
54   int ten_sec[10];
55   int ridiculous;
56   int total;
57 };
58 
59 typedef struct histogram_struct *HIST;
60 
61 /*
62    HIST_new - return a new, cleared histogram data type
63 */
64 
65 HIST HIST_new(void);
66 
67 /*
68    HIST_clear - reset a histogram by clearing all totals to zero
69 */
70 
71 void HIST_clear(HIST h);
72 
73 /*
74    HIST_add - add a time difference to a histogram. Time should be in
75    microseconds.
76 */
77 
78 void HIST_add(register HIST h, int time_delta);
79 
80 /*
81   HIST_report - create an ASCII report on the contents of a histogram.
82   Currently printsto standard out
83 */
84 
85 void HIST_report(HIST h);
86 
87 /*
88   HIST_timestamp - take a timestamp suitable for use in a histogram.
89 */
90 
91 #ifdef HAVE_GETHRTIME
92 void HIST_timestamp(hrtime_t *timestamp);
93 #elif defined(HAVE_GET_HRT)
94 void HIST_timestamp(hrt_t *timestamp);
95 #elif defined(WIN32)
96 void HIST_timestamp(LARGE_INTEGER *timestamp);
97 #else
98 void HIST_timestamp(struct timeval *timestamp);
99 #endif
100 
101 /*
102   delta_micro - calculate the difference in microseconds between two
103   timestamps
104 */
105 #ifdef HAVE_GETHRTIME
106 int delta_micro(hrtime_t *begin, hrtime_t *end);
107 #elif defined(HAVE_GET_HRT)
108 int delta_micro(hrt_t *begin, hrt_t *end);
109 #elif defined(WIN32)
110 int delta_micro(LARGE_INTEGER *begin, LARGE_INTEGER *end);
111 #else
112 int delta_micro(struct timeval *begin, struct timeval *end);
113 #endif
114 
115 #endif
116 
117