43 #include "BESStopWatch.h"
46 namespace bes_timing {
60 return start(name, MISSING_LOG_PARAM) ;
77 if( getrusage( RUSAGE_SELF, &_start_usage ) != 0 )
80 char *c_err = strerror( myerrno ) ;
81 string err =
"getrusage failed in start: " ;
82 err += (c_err != 0) ? c_err :
"unknown error";
90 err +=
"unknown error" ;
100 struct timeval &
start = _start_usage.ru_utime ;
101 double starttime =
start.tv_sec*1000.0 +
start.tv_usec/1000.0;
129 if( getrusage( RUSAGE_SELF, &_stop_usage ) != 0 )
131 int myerrno = errno ;
132 char *c_err = strerror( myerrno ) ;
133 string err =
"getrusage failed in stop: " ;
134 err += (c_err != 0) ? c_err :
"unknown error";
142 err +=
"unknown error" ;
154 bool success = timeval_subtract() ;
166 struct timeval &stop = _stop_usage.ru_utime ;
167 double stoptime = stop.tv_sec*1000.0 + stop.tv_usec/1000.0;
168 double elapsed = _result.tv_sec*1000.0 + _result.tv_usec/1000.0;
171 *(
BESDebug::GetStrm()) <<
"[" <<
BESDebug::GetPidStr() <<
"]["<< _log_name <<
"][" << _req_id <<
"][STOPPED][" << stoptime <<
"][ms][" << _timer_name <<
"][ELAPSED][" << elapsed <<
"][ms]" << endl;
179 BESStopWatch::timeval_subtract()
181 struct timeval &
start = _start_usage.ru_utime ;
182 struct timeval &stop = _stop_usage.ru_utime ;
185 if( stop.tv_usec <
start.tv_usec )
187 int nsec = (
start.tv_usec - stop.tv_usec) / 1000000 + 1 ;
188 start.tv_usec -= 1000000 * nsec ;
189 start.tv_sec += nsec ;
191 if( stop.tv_usec -
start.tv_usec > 1000000 )
193 int nsec = (
start.tv_usec - stop.tv_usec) / 1000000 ;
194 start.tv_usec += 1000000 * nsec ;
195 start.tv_sec -= nsec ;
200 _result.tv_sec = stop.tv_sec -
start.tv_sec ;
201 _result.tv_usec = stop.tv_usec -
start.tv_usec ;
204 return !(stop.tv_sec <
start.tv_sec) ;
216 strm << BESIndent::LMarg <<
"BESStopWatch::dump - ("
217 << (
void *)
this <<
")" << endl ;