Home | History | Annotate | Download | only in netperf
      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