Alexei Podtelezhnikov pushed to branch master at FreeType / FreeType Demo Programs
Commits:
-
8b0c22c5
by Alexei Podtelezhnikov at 2021-03-18T22:49:00-04:00
2 changed files:
Changes:
1 |
+2021-03-18 Alexei Podtelezhnikov <apodtele@gmail.com>
|
|
2 |
+ |
|
3 |
+ [ftbench] Add Windows performance timers.
|
|
4 |
+ |
|
5 |
+ * src/ftbench.c (get_time) [_WIN32]: Add QPC, GPT, and QPCT timing
|
|
6 |
+ tools.
|
|
7 |
+ (main) [_WIN32]: Initialize interval for QPC.
|
|
8 |
+ |
|
1 | 9 |
2021-02-28 Alexei Podtelezhnikov <apodtele@gmail.com>
|
2 | 10 |
|
3 | 11 |
[graph/x11] Gray multiplication tricks.
|
... | ... | @@ -43,6 +43,20 @@ |
43 | 43 |
|
44 | 44 |
#include "common.h"
|
45 | 45 |
|
46 |
+#ifdef _WIN32
|
|
47 |
+#define WIN32_LEAN_AND_MEAN
|
|
48 |
+#include <windows.h>
|
|
49 |
+ |
|
50 |
+/* Specify the timer: QPC for accurate wall time, GPT for user-mode time. */
|
|
51 |
+/* Otherwise, QPCT cycles are measured accurately but with huge overhead. */
|
|
52 |
+#define QPC
|
|
53 |
+ |
|
54 |
+#ifdef QPC
|
|
55 |
+ double interval;
|
|
56 |
+#endif
|
|
57 |
+ |
|
58 |
+#endif
|
|
59 |
+ |
|
46 | 60 |
|
47 | 61 |
typedef struct btimer_t_ {
|
48 | 62 |
double t0;
|
... | ... | @@ -195,6 +209,35 @@ |
195 | 209 |
#endif /* _POSIX_CPUTIME */
|
196 | 210 |
|
197 | 211 |
return 1E6 * (double)tv.tv_sec + 1E-3 * (double)tv.tv_nsec;
|
212 |
+ |
|
213 |
+#elif defined _WIN32
|
|
214 |
+ |
|
215 |
+#ifdef QPC
|
|
216 |
+ LARGE_INTEGER ticks;
|
|
217 |
+ |
|
218 |
+ |
|
219 |
+ QueryPerformanceCounter( &ticks );
|
|
220 |
+ |
|
221 |
+ return interval * ticks.QuadPart;
|
|
222 |
+ |
|
223 |
+#elif defined GPT
|
|
224 |
+ FILETIME start, end, kern, user;
|
|
225 |
+ |
|
226 |
+ |
|
227 |
+ GetProcessTimes( GetCurrentProcess(), &start, &end, &kern, &user );
|
|
228 |
+ |
|
229 |
+ return 0.1 * user.dwLowDateTime + 429496729.6 * user.dwHighDateTime;
|
|
230 |
+ |
|
231 |
+#else
|
|
232 |
+ ULONG64 cycles;
|
|
233 |
+ |
|
234 |
+ |
|
235 |
+ QueryProcessCycleTime( GetCurrentProcess(), &cycles );
|
|
236 |
+ |
|
237 |
+ return 1e-3 * cycles; /* at 1GHz */
|
|
238 |
+ |
|
239 |
+#endif
|
|
240 |
+ |
|
198 | 241 |
#else
|
199 | 242 |
/* clock() accuracy has improved since glibc 2.18 */
|
200 | 243 |
return 1E6 * (double)clock() / (double)CLOCKS_PER_SEC;
|
... | ... | @@ -954,6 +997,13 @@ |
954 | 997 |
int version;
|
955 | 998 |
char *engine;
|
956 | 999 |
|
1000 |
+#if defined _WIN32 && defined QPC
|
|
1001 |
+ LARGE_INTEGER freq;
|
|
1002 |
+ |
|
1003 |
+ QueryPerformanceFrequency( &freq );
|
|
1004 |
+ interval = 1e6 / freq.QuadPart;
|
|
1005 |
+#endif
|
|
1006 |
+ |
|
957 | 1007 |
|
958 | 1008 |
if ( FT_Init_FreeType( &lib ) )
|
959 | 1009 |
{
|