Measure CPU seconds instead of wall time, and move the timing functions into a
[fjl] / unstuff_test.c
index 754f8bf9d1398401cae1227c9800151588170302..a5bf92d9a2e0f88283bd5efbe0f2775d6882ad50 100644 (file)
@@ -1,9 +1,8 @@
 #include <stdio.h>
 #include <string.h>
 #include <assert.h>
-#include <time.h>
-#include <sys/time.h>
 
+#include "benchmark.h"
 #include "unstuff.h"
 
 void test_basic_unstuff(unstuff_func_t* unstuff)
@@ -51,7 +50,7 @@ void gen_random_stuffed_data(uint8_t* dst, size_t len)
 {
        // Standard NR LCG (we avoid rand() to get consistent behavior across platforms).
        uint32_t seed = 1234;
-       for (int i = 0; i < len; ++i) {
+       for (unsigned i = 0; i < len; ++i) {
                seed = seed * 1664525 + 1013904223;
                uint8_t byte = (uint8_t)(seed & 0xff);
                if (byte != 0xff) {
@@ -67,12 +66,6 @@ void gen_random_stuffed_data(uint8_t* dst, size_t len)
        }
 }
 
-double timediff(const struct timeval* a, const struct timeval* b)
-{
-       return (double)(b->tv_sec - a->tv_sec) +
-               (double)(b->tv_usec - a->tv_usec) * 1e-6;
-}
-
 void test_performance(unstuff_func_t* unstuff)
 {
        const size_t len = 4096;
@@ -81,19 +74,16 @@ void test_performance(unstuff_func_t* unstuff)
        uint8_t src[len], dst[len];
        gen_random_stuffed_data(src, len);
 
-       struct timeval start, now;
-       gettimeofday(&start, NULL);
+       start_benchmark_timer();
 
-       for (int i = 0; i < num_runs; ++i) {
+       for (unsigned i = 0; i < num_runs; ++i) {
                int ret = unstuff(dst, src, len);
                assert(ret != -1);
        }
        
-       gettimeofday(&now, NULL);
-
-       double diff = timediff(&start, &now);
+       double diff = stop_benchmark_timer();
        double mb_sec = (len * num_runs) / (1048576.0 * diff);
-       printf("%u runs with %zu bytes in %.2f seconds = %.2f MB/sec\n",
+       printf("%u runs with %zu bytes in %.2f CPU seconds = %.2f MB/sec\n",
                num_runs, len, diff, mb_sec);
 }