1/* Copyright (C)2004 Landmark Graphics Corporation 2 * Copyright (C)2005 Sun Microsystems, Inc. 3 * 4 * This library is free software and may be redistributed and/or modified under 5 * the terms of the wxWindows Library License, Version 3.1 or (at your option) 6 * any later version. The full license is in the LICENSE.txt file included 7 * with this distribution. 8 * 9 * This library is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * wxWindows Library License for more details. 13 */ 14 15#ifndef __RRTIMER_H__ 16#define __RRTIMER_H__ 17 18#ifdef __cplusplus 19 20#ifdef _WIN32 21#include <windows.h> 22#else 23#include <sys/time.h> 24#endif 25 26class rrtimer 27{ 28 public: 29 30 rrtimer(void) : t1(0.0) 31 { 32 #ifdef _WIN32 33 highres=false; tick=0.001; 34 LARGE_INTEGER Frequency; 35 if(QueryPerformanceFrequency(&Frequency)!=0) 36 { 37 tick=(double)1.0/(double)(Frequency.QuadPart); 38 highres=true; 39 } 40 #endif 41 } 42 43 void start(void) 44 { 45 t1=time(); 46 } 47 48 double time(void) 49 { 50 #ifdef _WIN32 51 if(highres) 52 { 53 LARGE_INTEGER Time; 54 QueryPerformanceCounter(&Time); 55 return((double)(Time.QuadPart)*tick); 56 } 57 else 58 return((double)GetTickCount()*tick); 59 #else 60 struct timeval __tv; 61 gettimeofday(&__tv, (struct timezone *)NULL); 62 return((double)(__tv.tv_sec)+(double)(__tv.tv_usec)*0.000001); 63 #endif 64 } 65 66 double elapsed(void) 67 { 68 return time()-t1; 69 } 70 71 private: 72 73 #ifdef _WIN32 74 bool highres; double tick; 75 #endif 76 double t1; 77}; 78 79#endif // __cplusplus 80 81#ifdef _WIN32 82 83#include <windows.h> 84 85__inline double rrtime(void) 86{ 87 LARGE_INTEGER Frequency, Time; 88 if(QueryPerformanceFrequency(&Frequency)!=0) 89 { 90 QueryPerformanceCounter(&Time); 91 return (double)Time.QuadPart/(double)Frequency.QuadPart; 92 } 93 else return (double)GetTickCount()*0.001; 94} 95 96#else 97 98#include <sys/time.h> 99 100#ifdef sun 101#define __inline inline 102#endif 103 104static __inline double rrtime(void) 105{ 106 struct timeval __tv; 107 gettimeofday(&__tv, (struct timezone *)NULL); 108 return((double)__tv.tv_sec+(double)__tv.tv_usec*0.000001); 109} 110 111#endif 112 113#endif 114 115