This is an automated email from the ASF dual-hosted git repository.

masayuki pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx-apps.git

commit f1ba1a40ed35d15652d99e8347bf977babe764b3
Author: Huang Qi <[email protected]>
AuthorDate: Thu Mar 2 22:35:00 2023 +0800

    nsh: Improve performance of `ps` by merge nsh_output
    
    Signed-off-by: Huang Qi <[email protected]>
---
 nshlib/nsh_proccmds.c | 120 +++++++++++++++++++++++++++++++++++---------------
 1 file changed, 85 insertions(+), 35 deletions(-)

diff --git a/nshlib/nsh_proccmds.c b/nshlib/nsh_proccmds.c
index b04c0c23d..76b08f8da 100644
--- a/nshlib/nsh_proccmds.c
+++ b/nshlib/nsh_proccmds.c
@@ -56,6 +56,17 @@
 #  define LOAD_FRAC(x) (LOAD_INT(((x) & (FIXED_1 - 1)) * 100))
 #endif
 
+#if CONFIG_MM_BACKTRACE >= 0 && !defined(CONFIG_NSH_DISABLE_PSHEAPUSAGE)
+#  define PS_SHOW_HEAPSIZE
+#endif
+
+#ifndef CONFIG_NSH_DISABLE_PSSTACKUSAGE
+#  define PS_SHOW_STACKSIZE
+#  ifdef CONFIG_STACK_COLORATION
+#    define PS_SHOW_STACKUSAGE
+#  endif
+#endif
+
 /****************************************************************************
  * Private Types
  ****************************************************************************/
@@ -341,17 +352,20 @@ static int ps_callback(FAR struct nsh_vtbl_s *vtbl, FAR 
const char *dirpath,
 
   /* Finally, print the status information */
 
-  nsh_output(vtbl, "%5s ", entryp->d_name);
-  nsh_output(vtbl, "%5s ", status.td_groupid);
-
+  nsh_output(vtbl,
+             "%5s %5s "
 #ifdef CONFIG_SMP
-  nsh_output(vtbl, "%3s ", status.td_cpu);
+             "%3s "
 #endif
 
-  nsh_output(vtbl, "%3s %-8s %-7s %3s %-8s %-9s ",
+             "%3s %-8s %-7s %3s %-8s %-9s %-8s ",
+             entryp->d_name, status.td_groupid,
+#ifdef CONFIG_SMP
+             status.td_cpu,
+#endif
              status.td_priority, status.td_policy, status.td_type,
-             status.td_flags, status.td_state, status.td_event);
-  nsh_output(vtbl, "%-8s ", status.td_sigmask);
+             status.td_flags, status.td_state, status.td_event,
+             status.td_sigmask);
 
 #if CONFIG_MM_BACKTRACE >= 0 && !defined(CONFIG_NSH_DISABLE_PSHEAPUSAGE)
   /* Get the Heap AllocSize */
@@ -412,7 +426,6 @@ static int ps_callback(FAR struct nsh_vtbl_s *vtbl, FAR 
const char *dirpath,
         }
     }
 
-  nsh_output(vtbl, "%08lu ", heap_size);
 #endif
 
 #if !defined(CONFIG_NSH_DISABLE_PSSTACKUSAGE)
@@ -480,10 +493,7 @@ static int ps_callback(FAR struct nsh_vtbl_s *vtbl, FAR 
const char *dirpath,
         }
     }
 
-  nsh_output(vtbl, "%06lu ", stack_size);
-
 #ifdef CONFIG_STACK_COLORATION
-  nsh_output(vtbl, "%06lu ", stack_used);
 
   if (stack_size > 0 && stack_used > 0)
     {
@@ -491,12 +501,6 @@ static int ps_callback(FAR struct nsh_vtbl_s *vtbl, FAR 
const char *dirpath,
 
       stack_filled = 10 * 100 * stack_used / stack_size;
     }
-
-  /* Additionally print a '!' if the stack is filled more than 80% */
-
-  nsh_output(vtbl, "%3lu.%lu%%%c ",
-             stack_filled / 10, stack_filled % 10,
-             (stack_filled >= 10 * 80 ? '!' : ' '));
 #endif
 #endif
 
@@ -520,8 +524,40 @@ static int ps_callback(FAR struct nsh_vtbl_s *vtbl, FAR 
const char *dirpath,
           vtbl->iobuffer[0] = '\0';
         }
     }
+#endif
 
-  nsh_output(vtbl, "%6s ", nsh_trimspaces(vtbl->iobuffer));
+#if defined(PS_SHOW_HEAPSIZE) || defined (PS_SHOW_STACKSIZE) || \
+    defined (PS_SHOW_STACKUSAGE) || defined (NSH_HAVE_CPULOAD)
+    nsh_output(vtbl,
+#ifdef PS_SHOW_HEAPSIZE
+               "%08lu "
+#endif
+#ifdef PS_SHOW_STACKSIZE
+               "%06lu "
+#endif
+#ifdef PS_SHOW_STACKUSAGE
+               "%06lu "
+               "%3lu.%lu%%%c "
+#endif
+#ifdef NSH_HAVE_CPULOAD
+               "%6s "
+#endif
+#if CONFIG_MM_BACKTRACE >= 0 && !defined(CONFIG_NSH_DISABLE_PSHEAPUSAGE)
+               , heap_size
+#endif
+#if !defined(CONFIG_NSH_DISABLE_PSSTACKUSAGE)
+               , stack_size
+#endif
+#ifdef PS_SHOW_STACKUSAGE
+               , stack_used,
+               stack_filled / 10,
+               stack_filled % 10,
+               (stack_filled >= 10 * 80 ? '!' : ' ')
+#endif
+#ifdef NSH_HAVE_CPULOAD
+               , nsh_trimspaces(vtbl->iobuffer)
+#endif
+             );
 #endif
 
   /* Read the task/thread command line */
@@ -586,33 +622,47 @@ int cmd_ps(FAR struct nsh_vtbl_s *vtbl, int argc, FAR 
char **argv)
   UNUSED(argc);
   UNUSED(argv);
 
-  nsh_output(vtbl, "%5s ", "PID");
-  nsh_output(vtbl, "%5s ", "GROUP");
-
+  nsh_output(vtbl, "%5s %5s "
 #ifdef CONFIG_SMP
-  nsh_output(vtbl, "%3s ", "CPU");
+                   "%3s "
 #endif
-
-  nsh_output(vtbl, "%3s %-8s %-7s %3s %-8s %-9s ",
-             "PRI", "POLICY", "TYPE", "NPX", "STATE", "EVENT");
-  nsh_output(vtbl, "%-8s ", "SIGMASK");
-
+                   "%3s %-8s %-7s %3s %-8s %-9s "
+                   "%-8s "
 #if CONFIG_MM_BACKTRACE >= 0 && !defined(CONFIG_NSH_DISABLE_PSHEAPUSAGE)
-  nsh_output(vtbl, "%8s ", "HEAP");
+                   "%8s "
 #endif
-
 #if !defined(CONFIG_NSH_DISABLE_PSSTACKUSAGE)
-  nsh_output(vtbl, "%6s ", "STACK");
+                   "%6s "
 #ifdef CONFIG_STACK_COLORATION
-  nsh_output(vtbl, "%6s ", "USED");
-  nsh_output(vtbl, "%7s ", "FILLED");
+                   "%6s "
+                   "%7s "
+#endif
+#endif
+#ifdef NSH_HAVE_CPULOAD
+                    "%6s "
+#endif
+                    "%s\n",
+                    "PID", "GROUP",
+#ifdef CONFIG_SMP
+                    "CPU",
+#endif
+                    "PRI", "POLICY", "TYPE", "NPX", "STATE", "EVENT",
+                    "SIGMASK",
+#if CONFIG_MM_BACKTRACE >= 0 && !defined(CONFIG_NSH_DISABLE_PSHEAPUSAGE)
+                    "HEAP",
+#endif
+#if !defined(CONFIG_NSH_DISABLE_PSSTACKUSAGE)
+                    "STACK",
+#ifdef CONFIG_STACK_COLORATION
+                    "USED",
+                    "FILLED",
 #endif
 #endif
-
 #ifdef NSH_HAVE_CPULOAD
-  nsh_output(vtbl, "%6s ", "CPU");
+                    "CPU",
 #endif
-  nsh_output(vtbl, "%s\n", "COMMAND");
+                    "COMMAND"
+                    );
 
   return nsh_foreach_direntry(vtbl, "ps", CONFIG_NSH_PROC_MOUNTPOINT,
                               ps_callback, NULL);

Reply via email to