13e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos/* Copyright (C)2004 Landmark Graphics Corporation 23e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos * Copyright (C)2005 Sun Microsystems, Inc. 33e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos * 43e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos * This library is free software and may be redistributed and/or modified under 53e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos * the terms of the wxWindows Library License, Version 3.1 or (at your option) 63e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos * any later version. The full license is in the LICENSE.txt file included 73e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos * with this distribution. 83e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos * 93e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos * This library is distributed in the hope that it will be useful, 10651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines * but WITHOUT ANY WARRANTY; without even the implied warranty of 113e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 123e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos * wxWindows Library License for more details. 133e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos */ 143e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos 153e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos#ifndef __RRTIMER_H__ 16651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#define __RRTIMER_H__ 173e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos 1855fc873017f10f6f566b182b70f6fc22aefa3464Chandler Carruth#ifdef __cplusplus 193e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos 203e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos#ifdef _WIN32 213e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos#include <windows.h> 2255fc873017f10f6f566b182b70f6fc22aefa3464Chandler Carruth#else 23651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#include <sys/time.h> 2455fc873017f10f6f566b182b70f6fc22aefa3464Chandler Carruth#endif 2555fc873017f10f6f566b182b70f6fc22aefa3464Chandler Carruth 2602a176871d91bba3004e4f94b2d4d588ae4b2122Andy Gibbsclass rrtimer 273e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos{ 283e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos public: 293e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos 3033d054b0932b1ed5d2b30e41946f6aec5030c12eDmitri Gribenko rrtimer(void) : t1(0.0) 3155fc873017f10f6f566b182b70f6fc22aefa3464Chandler Carruth { 323e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos #ifdef _WIN32 333e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos highres=false; tick=0.001; 343e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos LARGE_INTEGER Frequency; 353e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos if(QueryPerformanceFrequency(&Frequency)!=0) 369818a1d443e97677dd3422305de9cc2b1fb2a8c1Argyrios Kyrtzidis { 379818a1d443e97677dd3422305de9cc2b1fb2a8c1Argyrios Kyrtzidis tick=(double)1.0/(double)(Frequency.QuadPart); 384d7e0ced7f16a04aabe2d8d91cbbb52fb1162810Alexander Kornienko highres=true; 393e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos } 403e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos #endif 413e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos } 423e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos 433e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos void start(void) 443e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos { 45c56fff7fd231aebf4b152f60f8f11ef91835c48aArgyrios Kyrtzidis t1=time(); 469317ab94bb68122ba6fc728eb73c1308fb913cd1Argyrios Kyrtzidis } 47c56fff7fd231aebf4b152f60f8f11ef91835c48aArgyrios Kyrtzidis 486c6c54a59a6e7dbe63ff6a9bbab76f6e0c7c8462Douglas Gregor double time(void) 499818a1d443e97677dd3422305de9cc2b1fb2a8c1Argyrios Kyrtzidis { 509818a1d443e97677dd3422305de9cc2b1fb2a8c1Argyrios Kyrtzidis #ifdef _WIN32 519818a1d443e97677dd3422305de9cc2b1fb2a8c1Argyrios Kyrtzidis if(highres) 52c56fff7fd231aebf4b152f60f8f11ef91835c48aArgyrios Kyrtzidis { 53c56fff7fd231aebf4b152f60f8f11ef91835c48aArgyrios Kyrtzidis LARGE_INTEGER Time; 54c56fff7fd231aebf4b152f60f8f11ef91835c48aArgyrios Kyrtzidis QueryPerformanceCounter(&Time); 55c56fff7fd231aebf4b152f60f8f11ef91835c48aArgyrios Kyrtzidis return((double)(Time.QuadPart)*tick); 563e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos } 579317ab94bb68122ba6fc728eb73c1308fb913cd1Argyrios Kyrtzidis else 58c515978bd3a703aa733f846a0094ffa84d149074Argyrios Kyrtzidis return((double)GetTickCount()*tick); 599317ab94bb68122ba6fc728eb73c1308fb913cd1Argyrios Kyrtzidis #else 609317ab94bb68122ba6fc728eb73c1308fb913cd1Argyrios Kyrtzidis struct timeval __tv; 619317ab94bb68122ba6fc728eb73c1308fb913cd1Argyrios Kyrtzidis gettimeofday(&__tv, (struct timezone *)NULL); 629317ab94bb68122ba6fc728eb73c1308fb913cd1Argyrios Kyrtzidis return((double)(__tv.tv_sec)+(double)(__tv.tv_usec)*0.000001); 639317ab94bb68122ba6fc728eb73c1308fb913cd1Argyrios Kyrtzidis #endif 649317ab94bb68122ba6fc728eb73c1308fb913cd1Argyrios Kyrtzidis } 659317ab94bb68122ba6fc728eb73c1308fb913cd1Argyrios Kyrtzidis 669317ab94bb68122ba6fc728eb73c1308fb913cd1Argyrios Kyrtzidis double elapsed(void) 679317ab94bb68122ba6fc728eb73c1308fb913cd1Argyrios Kyrtzidis { 689317ab94bb68122ba6fc728eb73c1308fb913cd1Argyrios Kyrtzidis return time()-t1; 699317ab94bb68122ba6fc728eb73c1308fb913cd1Argyrios Kyrtzidis } 703e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos 713e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos private: 723e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos 733e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos #ifdef _WIN32 743e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos bool highres; double tick; 753e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos #endif 763e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos double t1; 773e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos}; 783e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos 793e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos#endif // __cplusplus 803e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos 81c56fff7fd231aebf4b152f60f8f11ef91835c48aArgyrios Kyrtzidis#ifdef _WIN32 823e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos 833e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos#include <windows.h> 843e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos 853e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos__inline double rrtime(void) 863e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos{ 873e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos LARGE_INTEGER Frequency, Time; 883e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos if(QueryPerformanceFrequency(&Frequency)!=0) 893e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos { 903e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos QueryPerformanceCounter(&Time); 913e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos return (double)Time.QuadPart/(double)Frequency.QuadPart; 923e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos } 933e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos else return (double)GetTickCount()*0.001; 943e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos} 953e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos 963e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos#else 973e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos 983e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos#include <sys/time.h> 993e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos 1003e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos#ifdef sun 101651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#define __inline inline 102651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#endif 103651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 104651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstatic __inline double rrtime(void) 105651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines{ 1066bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines struct timeval __tv; 1076bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines gettimeofday(&__tv, (struct timezone *)NULL); 108651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return((double)__tv.tv_sec+(double)__tv.tv_usec*0.000001); 109651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 1103e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos 1113e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos#endif 1123e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos 1133e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos#endif 1143e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos 1153e1ec72e9ef097562774e43bd2847aac57b73d3dJoao Matos