/* Copyright (C)2004 Landmark Graphics Corporation * Copyright (C)2005 Sun Microsystems, Inc. * * This library is free software and may be redistributed and/or modified under * the terms of the wxWindows Library License, Version 3.1 or (at your option) * any later version. The full license is in the LICENSE.txt file included * with this distribution. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * wxWindows Library License for more details. */ #ifndef __RRTIMER_H__ #define __RRTIMER_H__ #ifdef __cplusplus #ifdef _WIN32 #include <windows.h> #else #include <sys/time.h> #endif class rrtimer { public: rrtimer(void) : t1(0.0) { #ifdef _WIN32 highres=false; tick=0.001; LARGE_INTEGER Frequency; if(QueryPerformanceFrequency(&Frequency)!=0) { tick=(double)1.0/(double)(Frequency.QuadPart); highres=true; } #endif } void start(void) { t1=time(); } double time(void) { #ifdef _WIN32 if(highres) { LARGE_INTEGER Time; QueryPerformanceCounter(&Time); return((double)(Time.QuadPart)*tick); } else return((double)GetTickCount()*tick); #else struct timeval __tv; gettimeofday(&__tv, (struct timezone *)NULL); return((double)(__tv.tv_sec)+(double)(__tv.tv_usec)*0.000001); #endif } double elapsed(void) { return time()-t1; } private: #ifdef _WIN32 bool highres; double tick; #endif double t1; }; #endif // __cplusplus #ifdef _WIN32 #include <windows.h> __inline double rrtime(void) { LARGE_INTEGER Frequency, Time; if(QueryPerformanceFrequency(&Frequency)!=0) { QueryPerformanceCounter(&Time); return (double)Time.QuadPart/(double)Frequency.QuadPart; } else return (double)GetTickCount()*0.001; } #else #include <sys/time.h> #ifdef sun #define __inline inline #endif static __inline double rrtime(void) { struct timeval __tv; gettimeofday(&__tv, (struct timezone *)NULL); return((double)__tv.tv_sec+(double)__tv.tv_usec*0.000001); } #endif #endif