38 #ifndef VIGRA_TIMING_HXX
39 #define VIGRA_TIMING_HXX
40 #ifndef VIGRA_NO_TIMING
62 inline double queryTimerUnit()
64 LARGE_INTEGER frequency;
65 QueryPerformanceFrequency(&frequency);
66 return 1000.0 / frequency.QuadPart;
69 inline double tic_toc_diff_num(LARGE_INTEGER
const & tic)
72 QueryPerformanceCounter(&toc);
73 static double unit = queryTimerUnit();
74 return ((toc.QuadPart - tic.QuadPart) * unit);
77 inline std::string tic_toc_diff_string(LARGE_INTEGER
const & tic)
79 double diff = tic_toc_diff_num(tic);
85 inline void tic_toc_diff(LARGE_INTEGER
const & tic)
87 std::cerr << tic_toc_diff_string(tic) <<std::endl;
93 #define USETICTOC LARGE_INTEGER tic_timer;
94 #define TIC QueryPerformanceCounter(&tic_timer);
95 #define TOC tic_toc_diff (tic_timer);
96 #define TOCN tic_toc_diff_num (tic_timer);
97 #define TOCS tic_toc_diff_string(tic_timer);
99 #define USETICTOC std::vector<LARGE_INTEGER> tic_timer;
100 #define TIC tic_timer.push_back(LARGE_INTEGER());\
101 QueryPerformanceCounter(&(tic_timer.back()));
102 #define TOC tic_toc_diff (tic_timer.back());\
103 tic_timer.pop_back();
104 #define TOCN tic_toc_diff_num (tic_timer.back());\
105 tic_timer.pop_back();
106 #define TOCS tic_toc_diff_string(tic_timer.back());\
107 tic_timer.pop_back();
112 #if defined(VIGRA_HIRES_TIMING) && !defined(__CYGWIN__)
119 inline double tic_toc_diff_num(timespec
const & tic)
122 clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &toc);
123 return ((toc.tv_sec*1000.0 + toc.tv_nsec/1000000.0) -
124 (tic.tv_sec*1000.0 + tic.tv_nsec/1000000.0));
127 inline std::string tic_toc_diff_string(timeval
const & tic)
129 double diff = tic_toc_diff_num(tic);
131 s << diff <<
" msec";
135 inline void tic_toc_diff(timeval
const & tic)
137 std::cerr << tic_toc_diff_string(tic) << std::endl;
142 #define USETICTOC timespec tic_timer;
143 #define TIC clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &tic_timer);
144 #define TOC tic_toc_diff (tic_timer);
145 #define TOCN tic_toc_diff_num (tic_timer);
146 #define TOCS tic_toc_diff_string(tic_timer);
149 #define USETICTOC std::vector<timespec> tic_timer;
150 #define TIC tic_timer.push_back(timespec());\
151 clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &(tic_timer.back()));
152 #define TOC tic_toc_diff (tic_timer.back());\
153 tic_timer.pop_back();
154 #define TOCN tic_toc_diff_num (tic_timer.back());\
155 tic_timer.pop_back();
156 #define TOCS tic_toc_diff_string(tic_timer.back());\
157 tic_timer.pop_back();
161 #include <sys/time.h>
165 inline double tic_toc_diff_num(timeval
const & tic)
168 gettimeofday(&toc, NULL);
169 return ((toc.tv_sec*1000.0 + toc.tv_usec/1000.0) -
170 (tic.tv_sec*1000.0 + tic.tv_usec/1000.0));
172 inline std::string tic_toc_diff_string(timeval
const & tic)
174 double diff = tic_toc_diff_num(tic);
176 s << diff <<
" msec";
179 inline void tic_toc_diff(timeval
const & tic)
181 std::cerr << tic_toc_diff_string(tic)<< std::endl;
187 #define USETICTOC timeval tic_timer;
188 #define TIC gettimeofday (&tic_timer, NULL);
189 #define TOC tic_toc_diff (tic_timer);
190 #define TOCN tic_toc_diff_num (tic_timer);
191 #define TOCS tic_toc_diff_string(tic_timer);
194 #define USETICTOC std::vector<timeval> tic_timer;
195 #define TIC tic_timer.push_back(timeval());\
196 gettimeofday(&(tic_timer.back()), NULL);
197 #define TOC tic_toc_diff (tic_timer.back());\
198 tic_timer.pop_back();
199 #define TOCN tic_toc_diff_num (tic_timer.back());\
200 tic_timer.pop_back();
201 #define TOCS tic_toc_diff_string(tic_timer.back());\
202 tic_timer.pop_back();
205 #endif // VIGRA_HIRES_TIMING
221 #endif // VIGRA_TIMING_HXX