This is an automated email from the ASF dual-hosted git repository. xiaoxiang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/nuttx-apps.git
commit 7acf0ff3141413c21db80009470c62059474d058 Author: buxiasen <[email protected]> AuthorDate: Sun Aug 4 22:31:44 2024 +0800 drivertest_pm: compatible with SMP Signed-off-by: buxiasen <[email protected]> --- testing/drivertest/drivertest_pm.c | 70 ++++++++++++++++++++++++-------------- 1 file changed, 44 insertions(+), 26 deletions(-) diff --git a/testing/drivertest/drivertest_pm.c b/testing/drivertest/drivertest_pm.c index d18b96b45..b7a3209b2 100644 --- a/testing/drivertest/drivertest_pm.c +++ b/testing/drivertest/drivertest_pm.c @@ -56,8 +56,8 @@ */ #define TEST_DOMAIN 0 -#define TEST_STAYTIMEOUT 100 /* in ms */ -#define TEST_WAITTIME 10000 /* in us */ +#define TEST_STAYTIMEOUT 10 /* in ms */ +#define TEST_WAITTIME 1000 /* in us */ /**************************************************************************** * Private Functions Prototypes @@ -150,16 +150,14 @@ static void test_pm_callback_notify(FAR struct pm_callback_s *cb, static void test_pm(FAR void **argv) { - int ret; - int cnt; - int domain; - int staycount; + int persist_stay_cnt[PM_COUNT]; int init_delay; + int staycount; + int target; bool check; - - ret = 0; - cnt = TEST_PM_LOOP_COUNT; - domain = TEST_DOMAIN; + int domain = TEST_DOMAIN; + int ret = 0; + int cnt = TEST_PM_LOOP_COUNT; if (CONFIG_PM_GOVERNOR_EXPLICIT_RELAX < 0) { @@ -173,51 +171,64 @@ static void test_pm(FAR void **argv) CONFIG_SERIAL_PM_ACTIVITY_PRIORITY); } + usleep(init_delay * 1000000); + usleep(TEST_WAITTIME); + + for (int i = 0; i < PM_COUNT; i++) + { + persist_stay_cnt[i] = pm_staycount(domain, i); + } + while (cnt--) { ret = pm_domain_register(domain, &g_test_pm_callback); assert_int_equal(ret, 0); - usleep(init_delay * 1000000); - /* test when pm prepare failed */ g_test_pm_dev.prepare_fail = true; for (int state = 0; state < PM_COUNT; state++) { - ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), 0, check); + target = persist_stay_cnt[state] + 0; + ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), target, check); pm_stay(domain, state); usleep(TEST_WAITTIME); assert_int_equal(g_test_pm_dev.state, PM_SLEEP); ASSERT_EQUAL_IF_CHECK(pm_querystate(domain), PM_SLEEP, check); - ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), 1, check); + target = persist_stay_cnt[state] + 1; + ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), target, check); pm_staytimeout(domain, state, TEST_STAYTIMEOUT); usleep(TEST_WAITTIME); assert_int_equal(g_test_pm_dev.state, PM_SLEEP); ASSERT_EQUAL_IF_CHECK(pm_querystate(domain), PM_SLEEP, check); - ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), 2, check); + target = persist_stay_cnt[state] + 2; + ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), target, check); usleep(TEST_STAYTIMEOUT * 1000); assert_int_equal(g_test_pm_dev.state, PM_SLEEP); ASSERT_EQUAL_IF_CHECK(pm_querystate(domain), PM_SLEEP, check); - ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), 1, check); + target = persist_stay_cnt[state] + 1; + ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), target, check); pm_relax(domain, state); usleep(TEST_WAITTIME); assert_int_equal(g_test_pm_dev.state, PM_SLEEP); ASSERT_EQUAL_IF_CHECK(pm_querystate(domain), PM_SLEEP, check); - ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), 0, check); + target = persist_stay_cnt[state] + 0; + ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), target, check); pm_staytimeout(domain, state, TEST_STAYTIMEOUT); usleep(TEST_WAITTIME); assert_int_equal(g_test_pm_dev.state, PM_SLEEP); ASSERT_EQUAL_IF_CHECK(pm_querystate(domain), PM_SLEEP, check); - ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), 1, check); + target = persist_stay_cnt[state] + 1; + ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), target, check); usleep(TEST_STAYTIMEOUT * 1000); assert_int_equal(g_test_pm_dev.state, PM_SLEEP); ASSERT_EQUAL_IF_CHECK(pm_querystate(domain), PM_SLEEP, check); - ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), 0, check); + target = persist_stay_cnt[state] + 0; + ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), target, check); } for (int state = 0; state < PM_COUNT; state++) @@ -270,39 +281,46 @@ static void test_pm(FAR void **argv) for (int state = 0; state < PM_COUNT; state++) { - ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), 0, check); + target = persist_stay_cnt[state] + 0; + ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), target, check); pm_stay(domain, state); usleep(TEST_WAITTIME); assert_int_equal(g_test_pm_dev.state, state); ASSERT_EQUAL_IF_CHECK(pm_querystate(domain), state, check); - ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), 1, check); + target = persist_stay_cnt[state] + 1; + ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), target, check); pm_staytimeout(domain, state, TEST_STAYTIMEOUT); usleep(TEST_WAITTIME); assert_int_equal(g_test_pm_dev.state, state); ASSERT_EQUAL_IF_CHECK(pm_querystate(domain), state, check); - ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), 2, check); + target = persist_stay_cnt[state] + 2; + ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), target, check); usleep(TEST_STAYTIMEOUT * 1000); assert_int_equal(g_test_pm_dev.state, state); ASSERT_EQUAL_IF_CHECK(pm_querystate(domain), state, check); - ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), 1, check); + target = persist_stay_cnt[state] + 1; + ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), target, check); pm_relax(domain, state); usleep(TEST_WAITTIME); assert_int_equal(g_test_pm_dev.state, PM_SLEEP); ASSERT_EQUAL_IF_CHECK(pm_querystate(domain), PM_SLEEP, check); - ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), 0, check); + target = persist_stay_cnt[state] + 0; + ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), target, check); pm_staytimeout(domain, state, TEST_STAYTIMEOUT); usleep(TEST_WAITTIME); assert_int_equal(g_test_pm_dev.state, state); ASSERT_EQUAL_IF_CHECK(pm_querystate(domain), state, check); - ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), 1, check); + target = persist_stay_cnt[state] + 1; + ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), target, check); usleep(TEST_STAYTIMEOUT * 1000); assert_int_equal(g_test_pm_dev.state, PM_SLEEP); ASSERT_EQUAL_IF_CHECK(pm_querystate(domain), PM_SLEEP, check); - ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), 0, check); + target = persist_stay_cnt[state] + 0; + ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), target, check); } for (int state = 0; state < PM_COUNT; state++)
