102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#if TIME_WITH_SYS_TIME
202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project# include <sys/time.h>
302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project# include <time.h>
402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else
502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project# if HAVE_SYS_TIME_H
602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#  include <sys/time.h>
702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project# else
802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#  include <time.h>
902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project# endif
1002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif
1102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
1202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* hist.h
1302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
1402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project   Given a time difference in microseconds, increment one of 61
1502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project   different buckets:
1602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
1702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project   0 - 9 in increments of 1 usec
1802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project   0 - 9 in increments of 10 usecs
1902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project   0 - 9 in increments of 100 usecs
2002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project   0 - 9 in increments of 1 msec
2102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project   0 - 9 in increments of 10 msecs
2202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project   0 - 9 in increments of 100 msecs
2302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project   0 - 9 in increments of 1 sec
2402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project   0 - 9 in increments of 10 sec
2502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project   > 100 secs
2602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
2702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project   This will allow any time to be recorded to within an accuracy of
2802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project   10%, and provides a compact representation for capturing the
2902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project   distribution of a large number of time differences (e.g.
3002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project   request-response latencies).
3102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
3202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project   Colin Low  10/6/93
3302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project   Rick Jones 2004-06-15 - extend to 1 and 10 usec
3402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project*/
3502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifndef _HIST_INCLUDED
3602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#define _HIST_INCLUDED
3702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
3802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef IRIX
3902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <sys/time.h>
4002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* IRIX */
4102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
4202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#if defined(HAVE_GET_HRT)
4302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include "hrt.h"
4402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif
4502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
4602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectstruct histogram_struct {
4702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  int unit_usec[10];
4802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  int ten_usec[10];
4902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  int hundred_usec[10];
5002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  int unit_msec[10];
5102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  int ten_msec[10];
5202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  int hundred_msec[10];
5302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  int unit_sec[10];
5402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  int ten_sec[10];
5502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  int ridiculous;
5602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  int total;
5702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project};
5802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
5902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projecttypedef struct histogram_struct *HIST;
6002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
6102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/*
6202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project   HIST_new - return a new, cleared histogram data type
6302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project*/
6402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
6502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectHIST HIST_new(void);
6602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
6702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/*
6802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project   HIST_clear - reset a histogram by clearing all totals to zero
6902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project*/
7002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
7102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid HIST_clear(HIST h);
7202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
7302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/*
7402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project   HIST_add - add a time difference to a histogram. Time should be in
7502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project   microseconds.
7602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project*/
7702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
7802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid HIST_add(register HIST h, int time_delta);
7902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
8002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/*
8102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  HIST_report - create an ASCII report on the contents of a histogram.
8202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  Currently printsto standard out
8302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project*/
8402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
8502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid HIST_report(HIST h);
8602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
8702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/*
8802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  HIST_timestamp - take a timestamp suitable for use in a histogram.
8902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project*/
9002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
9102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef HAVE_GETHRTIME
9202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid HIST_timestamp(hrtime_t *timestamp);
9302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#elif defined(HAVE_GET_HRT)
9402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid HIST_timestamp(hrt_t *timestamp);
9502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#elif defined(WIN32)
9602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid HIST_timestamp(LARGE_INTEGER *timestamp);
9702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else
9802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid HIST_timestamp(struct timeval *timestamp);
9902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif
10002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
10102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/*
10202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  delta_micro - calculate the difference in microseconds between two
10302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  timestamps
10402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project*/
10502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef HAVE_GETHRTIME
10602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint delta_micro(hrtime_t *begin, hrtime_t *end);
10702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#elif defined(HAVE_GET_HRT)
10802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint delta_micro(hrt_t *begin, hrt_t *end);
10902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#elif defined(WIN32)
11002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint delta_micro(LARGE_INTEGER *begin, LARGE_INTEGER *end);
11102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else
11202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint delta_micro(struct timeval *begin, struct timeval *end);
11302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif
11402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
11502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif
11602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
117