Package version up
[platform/upstream/libxkbcommon.git] / bench / compose.c
index e2ded57..4198e32 100644 (file)
  * DEALINGS IN THE SOFTWARE.
  */
 
+#include "config.h"
+
 #include <time.h>
 
 #include "xkbcommon/xkbcommon-compose.h"
 
 #include "../test/test.h"
+#include "bench.h"
 
 #define BENCHMARK_ITERATIONS 1000
 
@@ -33,21 +36,28 @@ int
 main(void)
 {
     struct xkb_context *ctx;
-    struct timespec start, stop, elapsed;
     char *path;
     FILE *file;
     struct xkb_compose_table *table;
+    struct bench bench;
+    char *elapsed;
 
     ctx = test_get_context(CONTEXT_NO_FLAG);
     assert(ctx);
 
-    path = test_get_path("compose/en_US.UTF-8/Compose");
-    file = fopen(path, "r");
+    path = test_get_path("locale/en_US.UTF-8/Compose");
+    file = fopen(path, "rb");
+    if (file == NULL) {
+        perror(path);
+        free(path);
+        xkb_context_unref(ctx);
+        return -1;
+    }
 
     xkb_context_set_log_level(ctx, XKB_LOG_LEVEL_CRITICAL);
     xkb_context_set_log_verbosity(ctx, 0);
 
-    clock_gettime(CLOCK_MONOTONIC, &start);
+    bench_start(&bench);
     for (int i = 0; i < BENCHMARK_ITERATIONS; i++) {
         rewind(file);
         table = xkb_compose_table_new_from_file(ctx, file, "",
@@ -56,20 +66,15 @@ main(void)
         assert(table);
         xkb_compose_table_unref(table);
     }
-    clock_gettime(CLOCK_MONOTONIC, &stop);
+    bench_stop(&bench);
 
     fclose(file);
     free(path);
 
-    elapsed.tv_sec = stop.tv_sec - start.tv_sec;
-    elapsed.tv_nsec = stop.tv_nsec - start.tv_nsec;
-    if (elapsed.tv_nsec < 0) {
-        elapsed.tv_nsec += 1000000000;
-        elapsed.tv_sec--;
-    }
-
-    fprintf(stderr, "compiled %d compose tables in %ld.%09lds\n",
-            BENCHMARK_ITERATIONS, elapsed.tv_sec, elapsed.tv_nsec);
+    elapsed = bench_elapsed_str(&bench);
+    fprintf(stderr, "compiled %d compose tables in %ss\n",
+            BENCHMARK_ITERATIONS, elapsed);
+    free(elapsed);
 
     xkb_context_unref(ctx);
     return 0;