• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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