freetype-commit
[Top][All Lists]
Advanced

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

[freetype2-demos] master dd39acd: [ftbench] Use POSIX timers when availa


From: Alexei Podtelezhnikov
Subject: [freetype2-demos] master dd39acd: [ftbench] Use POSIX timers when available.
Date: Tue, 2 Aug 2016 03:17:17 +0000 (UTC)

branch: master
commit dd39acd0dc9a879ca72da2d23c971837606011f2
Author: Alexei Podtelezhnikov <address@hidden>
Commit: Alexei Podtelezhnikov <address@hidden>

    [ftbench] Use POSIX timers when available.
    
    * src/ftbench.c (get_time): Use `clock_gettime' instead of obsolete
    and less accurate `gettimeofday'.
    (benchmark): Updated.
---
 ChangeLog     |    8 ++++++++
 src/ftbench.c |   28 +++++++++++++++++-----------
 2 files changed, 25 insertions(+), 11 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 06eab48..e40919c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2016-08-01  Alexei Podtelezhnikov  <address@hidden>
+
+       [ftbench] Use POSIX timers when available.
+
+       * src/ftbench.c (get_time): Use `clock_gettime' instead of obsolete
+       and less accurate `gettimeofday'.
+       (benchmark): Updated. 
+
 2016-07-14  Werner Lemberg  <address@hidden>
 
        [ftgrid] New option `-d' to give start-up design coordinates.
diff --git a/src/ftbench.c b/src/ftbench.c
index ecc88b1..41df152 100644
--- a/src/ftbench.c
+++ b/src/ftbench.c
@@ -30,8 +30,8 @@
 #include FT_CFF_DRIVER_H
 #include FT_TRUETYPE_DRIVER_H
 
-#ifdef UNIX
-#include <sys/time.h>
+#ifdef __unix__
+#include <unistd.h>
 #endif
 
 #include "common.h"
@@ -159,21 +159,27 @@
 
 
   /*
-   * timer
+   * timer in milliseconds
    */
 
   static double
   get_time( void )
   {
-#ifdef UNIX
-    struct timeval  tv;
+#if _POSIX_CPUTIME > 0
+    struct timespec  tv;
 
 
-    gettimeofday( &tv, NULL );
-    return (double)tv.tv_sec + (double)tv.tv_usec / 1E6;
+    clock_gettime( CLOCK_PROCESS_CPUTIME_ID, &tv );
+    return 1E6 * (double)tv.tv_sec + 1E-3 * (double)tv.tv_nsec;
+#elif _POSIX_TIMERS > 0
+    struct timespec  tv;
+
+
+    clock_gettime( CLOCK_REALTIME, &tv );
+    return 1E6 * (double)tv.tv_sec + 1E-3 * (double)tv.tv_nsec;
 #else
-    /* clock() has an awful precision (~10ms) under Linux 2.4 + glibc 2.2 */
-    return (double)clock() / (double)CLOCKS_PER_SEC;
+    /* clock() accuracy has improved since glibc 2.18 */
+    return 1E6 * (double)clock() / (double)CLOCKS_PER_SEC;
 #endif
   }
 
@@ -225,12 +231,12 @@
 
       TIMER_STOP( &elapsed );
 
-      if ( TIMER_GET( &elapsed ) > max_time )
+      if ( TIMER_GET( &elapsed ) > 1E6 * max_time )
         break;
     }
 
     if ( done )
-      printf( "%5.3f us/op\n", TIMER_GET( &timer ) * 1E6 / (double)done );
+      printf( "%5.3f us/op\n", TIMER_GET( &timer ) / (double)done );
     else
       printf( "no error-free calls\n" );
   }



reply via email to

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