X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libtest%2Ftimer.cc;h=fae814cad09c61f2e446102aee4659c377ff77a8;hb=59acef2d2b59a3f1a55337a933b97d901d46133a;hp=b34cb4f931ef0146eef0f3d4bc6c2536162ed9ff;hpb=ad5cb8f903869065c72bb18bf98af6909189a5a9;p=awesomized%2Flibmemcached diff --git a/libtest/timer.cc b/libtest/timer.cc index b34cb4f9..fae814ca 100644 --- a/libtest/timer.cc +++ b/libtest/timer.cc @@ -34,15 +34,98 @@ * */ -#include "mem_config.h" +#include "libtest/yatlcon.h" #include #include #include +#ifdef __MACH__ +# include +# include +#else +# include +#endif + namespace libtest { +Timer::Timer() +{ + _begin.tv_sec= 0; + _begin.tv_nsec= 0; + _end.tv_sec= 0; + _end.tv_nsec= 0; +} + +void Timer::reset() +{ + _end.tv_sec= 0; + _end.tv_nsec= 0; + _time(_begin); +} + +void Timer::sample() +{ + _time(_end); +} + +void Timer::offset(int64_t minutes_arg, int64_t seconds_arg, int64_t nanoseconds) +{ + reset(); + _end= _begin; + _end.tv_sec+= (minutes_arg * 60) +seconds_arg; + _end.tv_nsec+= nanoseconds; +} + +int64_t Timer::minutes() +{ + struct timespec result; + difference(result); + return int64_t(result.tv_sec / 60); +} + +uint64_t Timer::elapsed_milliseconds() const +{ + struct timespec temp; + difference(temp); + + return temp.tv_sec*1000 +temp.tv_nsec/1000000; +} + +void Timer::difference(struct timespec& arg) const +{ + if ((_end.tv_nsec -_begin.tv_nsec) < 0) + { + arg.tv_sec= _end.tv_sec -_begin.tv_sec -1; + arg.tv_nsec= 1000000000 +_end.tv_nsec -_begin.tv_nsec; + + } + else + { + arg.tv_sec= _end.tv_sec -_begin.tv_sec; + arg.tv_nsec= _end.tv_nsec -_begin.tv_nsec; + } +} + +void Timer::_time(struct timespec& ts) +{ +#ifdef __MACH__ // OSX lacks clock_gettime() + clock_serv_t _clock_serv; + mach_timespec_t _mach_timespec; + host_get_clock_service(mach_host_self(), CALENDAR_CLOCK, &_clock_serv); + clock_get_time(_clock_serv, &_mach_timespec); + mach_port_deallocate(mach_task_self(), _clock_serv); + ts.tv_sec= _mach_timespec.tv_sec; + ts.tv_nsec= _mach_timespec.tv_nsec; +#elif defined(_WIN32) + ts.tv_sec= time(NULL); + ts.tv_nsec= 0; +#else + clock_gettime(CLOCK_REALTIME, &ts); +#endif +} + std::ostream& operator<<(std::ostream& output, const libtest::Timer& arg) { struct timespec temp;