25
25
26
26
UTIL_time_t UTIL_getTime (void ) { UTIL_time_t x ; QueryPerformanceCounter (& x ); return x ; }
27
27
28
- PTime UTIL_getSpanTimeMicro (UTIL_time_t clockStart , UTIL_time_t clockEnd )
29
- {
30
- static LARGE_INTEGER ticksPerSecond ;
31
- static int init = 0 ;
32
- if (!init ) {
33
- if (!QueryPerformanceFrequency (& ticksPerSecond )) {
34
- perror ("timefn::QueryPerformanceFrequency" );
35
- abort ();
36
- }
37
- init = 1 ;
38
- }
39
- return 1000000ULL * (clockEnd .QuadPart - clockStart .QuadPart )/ticksPerSecond .QuadPart ;
40
- }
41
-
42
28
PTime UTIL_getSpanTimeNano (UTIL_time_t clockStart , UTIL_time_t clockEnd )
43
29
{
44
30
static LARGE_INTEGER ticksPerSecond ;
@@ -59,17 +45,6 @@ PTime UTIL_getSpanTimeNano(UTIL_time_t clockStart, UTIL_time_t clockEnd)
59
45
60
46
UTIL_time_t UTIL_getTime (void ) { return mach_absolute_time (); }
61
47
62
- PTime UTIL_getSpanTimeMicro (UTIL_time_t clockStart , UTIL_time_t clockEnd )
63
- {
64
- static mach_timebase_info_data_t rate ;
65
- static int init = 0 ;
66
- if (!init ) {
67
- mach_timebase_info (& rate );
68
- init = 1 ;
69
- }
70
- return (((clockEnd - clockStart ) * (PTime )rate .numer ) / ((PTime )rate .denom ))/1000ULL ;
71
- }
72
-
73
48
PTime UTIL_getSpanTimeNano (UTIL_time_t clockStart , UTIL_time_t clockEnd )
74
49
{
75
50
static mach_timebase_info_data_t rate ;
@@ -115,15 +90,6 @@ static UTIL_time_t UTIL_getSpanTime(UTIL_time_t begin, UTIL_time_t end)
115
90
return diff ;
116
91
}
117
92
118
- PTime UTIL_getSpanTimeMicro (UTIL_time_t begin , UTIL_time_t end )
119
- {
120
- UTIL_time_t const diff = UTIL_getSpanTime (begin , end );
121
- PTime micro = 0 ;
122
- micro += 1000000ULL * diff .tv_sec ;
123
- micro += diff .tv_nsec / 1000ULL ;
124
- return micro ;
125
- }
126
-
127
93
PTime UTIL_getSpanTimeNano (UTIL_time_t begin , UTIL_time_t end )
128
94
{
129
95
UTIL_time_t const diff = UTIL_getSpanTime (begin , end );
@@ -134,25 +100,26 @@ PTime UTIL_getSpanTimeNano(UTIL_time_t begin, UTIL_time_t end)
134
100
}
135
101
136
102
137
-
138
- #else /* relies on standard C90 (note : clock_t measurements can be wrong when using multi-threading) */
103
+ #else /* relies on standard C90 (note : clock_t produces wrong measurements for multi-threaded workloads) */
139
104
140
105
UTIL_time_t UTIL_getTime (void ) { return clock (); }
141
- PTime UTIL_getSpanTimeMicro (UTIL_time_t clockStart , UTIL_time_t clockEnd ) { return 1000000ULL * (clockEnd - clockStart ) / CLOCKS_PER_SEC ; }
142
106
PTime UTIL_getSpanTimeNano (UTIL_time_t clockStart , UTIL_time_t clockEnd ) { return 1000000000ULL * (clockEnd - clockStart ) / CLOCKS_PER_SEC ; }
143
107
144
108
#endif
145
109
110
+ /* ==== Common functions, valid for all time API ==== */
146
111
112
+ PTime UTIL_getSpanTimeMicro (UTIL_time_t begin , UTIL_time_t end )
113
+ {
114
+ return UTIL_getSpanTimeNano (begin , end ) / 1000ULL ;
115
+ }
147
116
148
- /* returns time span in microseconds */
149
117
PTime UTIL_clockSpanMicro (UTIL_time_t clockStart )
150
118
{
151
119
UTIL_time_t const clockEnd = UTIL_getTime ();
152
120
return UTIL_getSpanTimeMicro (clockStart , clockEnd );
153
121
}
154
122
155
- /* returns time span in microseconds */
156
123
PTime UTIL_clockSpanNano (UTIL_time_t clockStart )
157
124
{
158
125
UTIL_time_t const clockEnd = UTIL_getTime ();
0 commit comments