10 #if (TIME_PROFILE_ENABLED) 11 constexpr
int TIMER_COUNT = 20;
13 std::vector<unsigned long> perfdata_0;
14 unsigned long perf_data[TIMER_COUNT];
15 uint64_t call_count[TIMER_COUNT];
16 Timer perf_timers[TIMER_COUNT];
17 std::string timer_messages[TIMER_COUNT];
18 bool timers_started[TIMER_COUNT];
19 bool timers_enabled =
false;
23 #if (TIME_PROFILE_ENABLED) 32 perf_timers[index].start();
39 #if (TIME_PROFILE_ENABLED) 41 perf_timers[index].stop();
42 perf_data[index] += perf_timers[index].getElapsedTimeInNanoSec();
49 #if (TIME_PROFILE_ENABLED) 51 timer_messages[0] =
"windowQuery elapsed time: ";
52 timer_messages[1] =
"timeSlice elapsed time: ";
53 timer_messages[2] =
"collide elapsed time: ";
54 timer_messages[3] =
"collide_3 elapsed time: ";
55 timer_messages[4] =
"union elapsed time: ";
56 timer_messages[5] =
"chull elapsed time: ";
57 timer_messages[6] =
"TIMER_boost_obb_obb_convex_hull: ";
58 timer_messages[7] =
"TIMER_get_cand: ";
59 timer_messages[8] =
"TIMER_difference :";
60 timer_messages[9] =
"GRID_BUILD :";
61 timer_messages[10] =
"GRID_CANDIDATES :";
62 timer_messages[11] =
"GRID_NARROWPHASE :";
63 timer_messages[12] =
"GRID_STATIC_TOTAL :";
64 timer_messages[13] =
"GRID_HASHING :";
65 timer_messages[14] =
"grid_total_body :";
66 timer_messages[15] =
"TIMER_poly_build :";
67 timer_messages[16] =
"TIMER_grid_window_query :";
68 timer_messages[17] =
"TIMER_polygon_enclosure :";
70 for (
int i = 0; i < TIMER_COUNT; i++) {
74 timers_enabled =
true;
84 #if (TIME_PROFILE_ENABLED) 86 timers_enabled =
false;
91 for (
int i = 0; i < TIMER_COUNT; i++) {
92 std::cout << timer_messages[i] <<
" " << int(perf_data[i] / 1000) <<
" " 93 << call_count[i] <<
"\n";
104 #if (TIME_PROFILE_ENABLED) 108 QueryPerformanceFrequency(&frequency);
109 startCount.QuadPart = 0;
110 endCount.QuadPart = 0;
112 startCount.tv_sec = startCount.tv_usec = 0;
113 endCount.tv_sec = endCount.tv_usec = 0;
117 startTimeInMicroSec = 0;
118 endTimeInMicroSec = 0;
130 QueryPerformanceCounter(&startCount);
132 clock_gettime(CLOCK_MONOTONIC, &time_start);
142 QueryPerformanceCounter(&endCount);
144 clock_gettime(CLOCK_MONOTONIC, &time_end);
149 if (!stopped) clock_gettime(CLOCK_MONOTONIC, &time_end);
151 time_diff =
diff(time_start, time_end);
153 if (time_diff.tv_sec) {
154 return time_diff.tv_sec * 10000000000 + time_diff.tv_nsec;
156 return time_diff.tv_nsec;
161 if (!stopped) QueryPerformanceCounter(&endCount);
163 startTimeInMicroSec = startCount.QuadPart * (1000000.0 / frequency.QuadPart);
164 endTimeInMicroSec = endCount.QuadPart * (1000000.0 / frequency.QuadPart);
166 if (!stopped) clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time_end);
174 time_diff =
diff(time_start, time_end);
176 if (time_diff.tv_sec) {
177 return time_diff.tv_sec * 10000000000 + time_diff.tv_nsec / 1000;
179 return time_diff.tv_nsec / 1000;
196 timespec
diff(timespec
start, timespec end) {
198 if ((end.tv_nsec - start.tv_nsec) < 0) {
199 temp.tv_sec = end.tv_sec - start.tv_sec - 1;
200 temp.tv_nsec = 1000000000 + end.tv_nsec - start.tv_nsec;
202 temp.tv_sec = end.tv_sec - start.tv_sec;
203 temp.tv_nsec = end.tv_nsec - start.tv_nsec;
double getElapsedTimeInSec()
double getElapsedTimeInMilliSec()
get elapsed time in milli-second
double getElapsedTime()
get elapsed time in milli-second
unsigned long getElapsedTimeInNanoSec()
get elapsed time in micro-second
int init_perfomance_timers()
void stop_timer(int index)
timespec diff(timespec start, timespec end)
void stop()
stop the timer
double getElapsedTimeInMicroSec()
get elapsed time in micro-second
void start_timer(int index)