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