@@ -9,7 +9,7 @@
#include <odp_api.h>
#include "odp_cunit_common.h"
#include "time_test.h"
-#include <time.h>
+#include <sys/time.h>
#define BUSY_LOOP_CNT 30000000 /* used for t > min resolution */
#define BUSY_LOOP_CNT_LONG 6000000000 /* used for t > 4 sec */
@@ -423,11 +423,12 @@ static void time_test_accuracy(time_cb time_cur, time_from_ns_cb time_from_ns)
{
int i;
odp_time_t t1, t2, wait, diff;
- clock_t c1, c2;
+ struct timeval tv1, tv2, tvdiff;
double sec_t, sec_c;
odp_time_t sec = time_from_ns(ODP_TIME_SEC_IN_NS);
- c1 = clock();
+ i = gettimeofday(&tv1, NULL);
+ CU_ASSERT(i == 0);
t1 = time_cur();
wait = odp_time_sum(t1, sec);
@@ -436,12 +437,21 @@ static void time_test_accuracy(time_cb time_cur, time_from_ns_cb time_from_ns)
wait = odp_time_sum(wait, sec);
}
+ i = gettimeofday(&tv2, NULL);
+ CU_ASSERT(i == 0);
t2 = time_cur();
- c2 = clock();
+
+ if (tv2.tv_usec < tv1.tv_usec) {
+ tvdiff.tv_usec = 1000000 + tv2.tv_usec - tv1.tv_usec;
+ tvdiff.tv_sec = tv2.tv_sec - 1 - tv1.tv_sec;
+ } else {
+ tvdiff.tv_usec = tv2.tv_usec - tv1.tv_usec;
+ tvdiff.tv_sec = tv2.tv_sec - tv1.tv_sec;
+ }
diff = odp_time_diff(t2, t1);
sec_t = ((double)odp_time_to_ns(diff)) / ODP_TIME_SEC_IN_NS;
- sec_c = ((double)(c2 - c1)) / CLOCKS_PER_SEC;
+ sec_c = ((double)(tvdiff.tv_usec) / 1000000) + tvdiff.tv_sec;
/* Check that ODP time is within +-5% of system time */
CU_ASSERT(sec_t < sec_c * 1.05);