aboutsummaryrefslogtreecommitdiff
path: root/test/validation/api
diff options
context:
space:
mode:
authorPetri Savolainen <petri.savolainen@nokia.com>2023-05-02 16:41:19 +0300
committerPetri Savolainen <petri.savolainen@nokia.com>2023-06-08 15:05:09 +0300
commite7bfbcf25a7ad64755f0e00d860e005f5b5afbb1 (patch)
treecadb5737398b4ba70f86c0ae24a7a11d425ac008 /test/validation/api
parentc4511e4987e98ce0564fa925f26afa6afdd12fa8 (diff)
validation: timer: add sample ticks test
Added a test case for the new odp_timer_sample_ticks() function. Signed-off-by: Petri Savolainen <petri.savolainen@nokia.com> Reviewed-by: Matias Elo <matias.elo@nokia.com> Reviewed-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
Diffstat (limited to 'test/validation/api')
-rw-r--r--test/validation/api/timer/timer.c81
1 files changed, 81 insertions, 0 deletions
diff --git a/test/validation/api/timer/timer.c b/test/validation/api/timer/timer.c
index 413b52c91..05ff4d660 100644
--- a/test/validation/api/timer/timer.c
+++ b/test/validation/api/timer/timer.c
@@ -1146,6 +1146,86 @@ static void timer_pool_current_tick(void)
}
}
+static void timer_pool_sample_ticks_run(odp_timer_clk_src_t clk_2)
+{
+ odp_timer_capability_t capa;
+ odp_timer_pool_param_t tp_param;
+ odp_timer_pool_t tp[2];
+ uint64_t t1[2], t2[2], ticks[2], min[2], max[2];
+ uint64_t clk_count[2] = {0};
+ odp_timer_clk_src_t clk_1 = ODP_CLOCK_DEFAULT;
+ uint64_t nsec = 100 * ODP_TIME_MSEC_IN_NS;
+
+ /* Highest resolution */
+ odp_timer_pool_param_init(&tp_param);
+ tp_param.num_timers = 100;
+
+ /* First timer pool: default clock source */
+ memset(&capa, 0, sizeof(capa));
+ CU_ASSERT_FATAL(odp_timer_capability(clk_1, &capa) == 0);
+ tp_param.clk_src = clk_1;
+ tp_param.res_hz = capa.max_res.res_hz;
+ tp_param.min_tmo = capa.max_res.min_tmo;
+ tp_param.max_tmo = capa.max_res.max_tmo;
+
+ tp[0] = odp_timer_pool_create("timer_pool_0", &tp_param);
+ CU_ASSERT_FATAL(tp[0] != ODP_TIMER_POOL_INVALID);
+
+ /* Second timer pool: another clock source */
+ memset(&capa, 0, sizeof(capa));
+ CU_ASSERT_FATAL(odp_timer_capability(clk_2, &capa) == 0);
+ tp_param.clk_src = clk_2;
+ tp_param.res_hz = capa.max_res.res_hz;
+ tp_param.min_tmo = capa.max_res.min_tmo;
+ tp_param.max_tmo = capa.max_res.max_tmo;
+
+ tp[1] = odp_timer_pool_create("timer_pool_1", &tp_param);
+ CU_ASSERT_FATAL(tp[1] != ODP_TIMER_POOL_INVALID);
+
+ odp_timer_pool_start();
+
+ /* Allow +-10% error margin */
+ min[0] = odp_timer_ns_to_tick(tp[0], 0.9 * nsec);
+ max[0] = odp_timer_ns_to_tick(tp[0], 1.1 * nsec);
+ min[1] = odp_timer_ns_to_tick(tp[1], 0.9 * nsec);
+ max[1] = odp_timer_ns_to_tick(tp[1], 1.1 * nsec);
+
+ CU_ASSERT_FATAL(odp_timer_sample_ticks(tp, t1, NULL, 2) == 0);
+
+ odp_time_wait_ns(nsec);
+
+ CU_ASSERT_FATAL(odp_timer_sample_ticks(tp, t2, clk_count, 2) == 0);
+
+ ticks[0] = t2[0] - t1[0];
+ ticks[1] = t2[1] - t1[1];
+
+ CU_ASSERT(t2[0] >= t1[0]);
+ CU_ASSERT(t2[1] >= t1[1]);
+ CU_ASSERT(ticks[0] >= min[0]);
+ CU_ASSERT(ticks[1] >= min[1]);
+ CU_ASSERT(ticks[0] <= max[0]);
+ CU_ASSERT(ticks[1] <= max[1]);
+
+ printf("\nClock source: %i, %i\n", clk_1, clk_2);
+ printf(" Time nsec: %" PRIu64 "\n", nsec);
+ printf(" Measured ticks: %" PRIu64 ", %" PRIu64 "\n", ticks[0], ticks[1]);
+ printf(" Expected ticks: %" PRIu64 ", %" PRIu64 "\n",
+ odp_timer_ns_to_tick(tp[0], nsec), odp_timer_ns_to_tick(tp[1], nsec));
+ printf(" T2 tick: %" PRIu64 ", %" PRIu64 "\n", t2[0], t2[1]);
+ printf(" Clk count: %" PRIu64 ", %" PRIu64 "\n", clk_count[0], clk_count[1]);
+
+ odp_timer_pool_destroy(tp[0]);
+ odp_timer_pool_destroy(tp[1]);
+}
+
+static void timer_pool_sample_ticks(void)
+{
+ for (int i = 0; i < ODP_CLOCK_NUM_SRC; i++) {
+ if (global_mem->clk_supported[i])
+ timer_pool_sample_ticks_run(ODP_CLOCK_SRC_0 + i);
+ }
+}
+
static void timer_pool_tick_info_run(odp_timer_clk_src_t clk_src)
{
odp_timer_capability_t capa;
@@ -2902,6 +2982,7 @@ odp_testinfo_t timer_suite[] = {
ODP_TEST_INFO(timer_pool_create_max),
ODP_TEST_INFO(timer_pool_max_res),
ODP_TEST_INFO(timer_pool_current_tick),
+ ODP_TEST_INFO(timer_pool_sample_ticks),
ODP_TEST_INFO(timer_pool_tick_info),
ODP_TEST_INFO_CONDITIONAL(timer_plain_rel_wait, check_plain_queue_support),
ODP_TEST_INFO_CONDITIONAL(timer_plain_abs_wait, check_plain_queue_support),