42 #include "BESStopWatch.h" 45 namespace bes_timing {
59 return start(name, MISSING_LOG_PARAM) ;
76 if( getrusage( RUSAGE_SELF, &_start_usage ) != 0 )
79 char *c_err = strerror( myerrno ) ;
80 string err =
"getrusage failed in start: " ;
81 err += (c_err != 0) ? c_err :
"unknown error";
89 err +=
"unknown error" ;
99 struct timeval &
start = _start_usage.ru_utime ;
100 double starttime =
start.tv_sec*1000.0 +
start.tv_usec/1000.0;
128 if( getrusage( RUSAGE_SELF, &_stop_usage ) != 0 )
130 int myerrno = errno ;
131 char *c_err = strerror( myerrno ) ;
132 string err =
"getrusage failed in stop: " ;
133 err += (c_err != 0) ? c_err :
"unknown error";
141 err +=
"unknown error" ;
153 bool success = timeval_subtract() ;
165 struct timeval &stop = _stop_usage.ru_utime ;
166 double stoptime = stop.tv_sec*1000.0 + stop.tv_usec/1000.0;
167 double elapsed = _result.tv_sec*1000.0 + _result.tv_usec/1000.0;
170 *(
BESDebug::GetStrm()) <<
"[" <<
BESDebug::GetPidStr() <<
"]["<< _log_name <<
"][" << _req_id <<
"][STOPPED][" << stoptime <<
"][ms][" << _timer_name <<
"][ELAPSED][" << elapsed <<
"][ms]" << endl;
178 BESStopWatch::timeval_subtract()
180 struct timeval &
start = _start_usage.ru_utime ;
181 struct timeval &stop = _stop_usage.ru_utime ;
184 if( stop.tv_usec <
start.tv_usec )
186 int nsec = (
start.tv_usec - stop.tv_usec) / 1000000 + 1 ;
187 start.tv_usec -= 1000000 * nsec ;
188 start.tv_sec += nsec ;
190 if( stop.tv_usec -
start.tv_usec > 1000000 )
192 int nsec = (
start.tv_usec - stop.tv_usec) / 1000000 ;
193 start.tv_usec += 1000000 * nsec ;
194 start.tv_sec -= nsec ;
199 _result.tv_sec = stop.tv_sec -
start.tv_sec ;
200 _result.tv_usec = stop.tv_usec -
start.tv_usec ;
203 return !(stop.tv_sec <
start.tv_sec) ;
215 strm << BESIndent::LMarg <<
"BESStopWatch::dump - (" 216 << (
void *)
this <<
")" << endl ;
static std::ostream * GetStrm()
return the debug stream
static std::string GetPidStr()
return the pid as a string
virtual bool start(string name)
virtual void dump(ostream &strm) const
dumps information about this object