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