// --------------------------------------------------------------------------- // // @file AntPerfTimer.h // @brief A performance (precision) timer for benchs // @author Philippe Decaudin // @license This file is part of the AntTweakBar library. // For conditions of distribution and use, see License.txt // // note: No cpp file is needed, everything is defined in this header // // --------------------------------------------------------------------------- #if !defined ANT_PERF_TIMER_INCLUDED #define ANT_PERF_TIMER_INCLUDED #ifndef __cplusplus # error This is a C++ header #endif // __cplusplus #if defined(WIN32) || defined(WIN64) || defined(_WIN32) || defined(_WIN64) #include #include struct PerfTimer { inline PerfTimer() { if( !QueryPerformanceFrequency(&Freq) ) MessageBox(NULL, _T("Precision timer not supported"), _T("Problem"), MB_ICONEXCLAMATION); Reset(); } inline void Reset() { QueryPerformanceCounter(&Start); } inline double GetTime() { if( QueryPerformanceCounter(&End) ) return ((double)End.QuadPart - (double)Start.QuadPart)/((double)Freq.QuadPart); else return 0; } protected: LARGE_INTEGER Start, End, Freq; }; #else // !_WIN (-> LINUX) #include #include struct PerfTimer { inline PerfTimer() { Reset(); } inline void Reset() { gettimeofday(&Start, &TZ); } inline double GetTime() { gettimeofday(&End,&TZ); double t1 = (double)Start.tv_sec + (double)Start.tv_usec/(1000*1000); double t2 = (double)End.tv_sec + (double)End.tv_usec/(1000*1000); return t2-t1; } protected: struct timeval Start, End; struct timezone TZ; }; #endif // _WIN #endif // ANT_PERF_TIMER_INCLUDED