freetype-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Git][freetype/freetype-demos][master] [ftbench] Add Windows performance


From: Alexei Podtelezhnikov
Subject: [Git][freetype/freetype-demos][master] [ftbench] Add Windows performance timers.
Date: Fri, 19 Mar 2021 02:50:43 +0000

Alexei Podtelezhnikov pushed to branch master at FreeType / FreeType Demo Programs

Commits:

2 changed files:

Changes:

  • ChangeLog
    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.
    

  • src/ftbench.c
    ... ... @@ -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
         {
    


  • reply via email to

    [Prev in Thread] Current Thread [Next in Thread]