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