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