Home | History | Annotate | Download | only in libjpeg_turbo
      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 
     26 class 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 
    104 static __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