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++)

Reply via email to