[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[freetype2-demos] master 8b0c22c: [ftbench] Add Windows performance time
From: |
Werner Lemberg |
Subject: |
[freetype2-demos] master 8b0c22c: [ftbench] Add Windows performance timers. |
Date: |
Thu, 18 Mar 2021 22:50:46 -0400 (EDT) |
branch: master
commit 8b0c22c57895f5d40972d89889051e30dc976dfc
Author: Alexei Podtelezhnikov <apodtele@gmail.com>
Commit: Alexei Podtelezhnikov <apodtele@gmail.com>
[ftbench] Add Windows performance timers.
* src/ftbench.c (get_time) [_WIN32]: Add QPC, GPT, and QPCT timing tools.
(main) [_WIN32]: Initialize interval for QPC.
---
ChangeLog | 8 ++++++++
src/ftbench.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 58 insertions(+)
diff --git a/ChangeLog b/ChangeLog
index 5576140..fa6f62c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2021-03-18 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [ftbench] Add Windows performance timers.
+
+ * src/ftbench.c (get_time) [_WIN32]: Add QPC, GPT, and QPCT timing
+ tools.
+ (main) [_WIN32]: Initialize interval for QPC.
+
2021-02-28 Alexei Podtelezhnikov <apodtele@gmail.com>
[graph/x11] Gray multiplication tricks.
diff --git a/src/ftbench.c b/src/ftbench.c
index 616bf5a..37e8e0e 100644
--- a/src/ftbench.c
+++ b/src/ftbench.c
@@ -43,6 +43,20 @@
#include "common.h"
+#ifdef _WIN32
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+
+/* Specify the timer: QPC for accurate wall time, GPT for user-mode time. */
+/* Otherwise, QPCT cycles are measured accurately but with huge overhead. */
+#define QPC
+
+#ifdef QPC
+ double interval;
+#endif
+
+#endif
+
typedef struct btimer_t_ {
double t0;
@@ -195,6 +209,35 @@
#endif /* _POSIX_CPUTIME */
return 1E6 * (double)tv.tv_sec + 1E-3 * (double)tv.tv_nsec;
+
+#elif defined _WIN32
+
+#ifdef QPC
+ LARGE_INTEGER ticks;
+
+
+ QueryPerformanceCounter( &ticks );
+
+ return interval * ticks.QuadPart;
+
+#elif defined GPT
+ FILETIME start, end, kern, user;
+
+
+ GetProcessTimes( GetCurrentProcess(), &start, &end, &kern, &user );
+
+ return 0.1 * user.dwLowDateTime + 429496729.6 * user.dwHighDateTime;
+
+#else
+ ULONG64 cycles;
+
+
+ QueryProcessCycleTime( GetCurrentProcess(), &cycles );
+
+ return 1e-3 * cycles; /* at 1GHz */
+
+#endif
+
#else
/* clock() accuracy has improved since glibc 2.18 */
return 1E6 * (double)clock() / (double)CLOCKS_PER_SEC;
@@ -954,6 +997,13 @@
int version;
char *engine;
+#if defined _WIN32 && defined QPC
+ LARGE_INTEGER freq;
+
+ QueryPerformanceFrequency( &freq );
+ interval = 1e6 / freq.QuadPart;
+#endif
+
if ( FT_Init_FreeType( &lib ) )
{
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [freetype2-demos] master 8b0c22c: [ftbench] Add Windows performance timers.,
Werner Lemberg <=