]> granicus.if.org Git - procps-ng/commitdiff
top: for performance, employ additional inlining
authorJim Warner <james.warner@comcast.net>
Fri, 5 Oct 2012 20:15:15 +0000 (15:15 -0500)
committerCraig Small <csmall@enc.com.au>
Thu, 11 Oct 2012 10:13:14 +0000 (21:13 +1100)
The 'refactor and enhance column width management'
recent redesign produced many subsequent benefits,
the latest of which is automatically sized fixed-width
non-scalable columns.

As expected, there was a cost associated with these
many enhancements.  That cost has now been identified
as a 1-4% performance degradation, depending on which
fields are being displayed.

This increased cost arises principally from current
drawing related function calls, whereas top-3.3.3 did
most of its drawing via macros effectively inlining
those duties.

This commit inlines the equivalent drawing functions,
thus eliminating the function call penalty, and places
this top on a par with top-3.3.3.  The trade off is a
modest additional 4k in executable size.

Signed-off-by: Jim Warner <james.warner@comcast.net>
top/top.c
top/top.h

index 0b5e1e6a49ba9479f45ff708e88ee132e4852d4f..327db6cf34c2a3dacf20eb47dd6639cdc9288656 100644 (file)
--- a/top/top.c
+++ b/top/top.c
@@ -360,7 +360,7 @@ static void bye_bye (const char *str) {
 #else
       "\n\t   winflags = %08x, maxpflgs = %d"
 #endif
-      "\n\t   sortindx  = %d, fieldscur = %s"
+      "\n\t   sortindx = %d, fieldscur = %s"
       "\n\t   maxtasks = %d, varcolsz = %d, winlines = %d"
       "\n\t   strlen(columnhdr) = %d"
       "\n"
@@ -1169,7 +1169,7 @@ static inline const char *justify_pad (const char *str, int width, int justr) {
 
         /*
          * Make and then justify a single character. */
-static const char *make_chr (const char ch, int width, int justr) {
+static inline const char *make_chr (const char ch, int width, int justr) {
    static char buf[SMLBUFSIZ];
 
    snprintf(buf, sizeof(buf), "%c", ch);
@@ -1180,7 +1180,7 @@ static const char *make_chr (const char ch, int width, int justr) {
         /*
          * Make and then justify an integer NOT subject to scaling,
          * and include a visual clue should tuncation be necessary. */
-static const char *make_num (long num, int width, int justr, int col) {
+static inline const char *make_num (long num, int width, int justr, int col) {
    static char buf[SMLBUFSIZ];
 
    if (width < snprintf(buf, sizeof(buf), "%ld", num)) {
@@ -1194,7 +1194,7 @@ static const char *make_num (long num, int width, int justr, int col) {
         /*
          * Make and then justify a character string,
          * and include a visual clue should tuncation be necessary. */
-static const char *make_str (const char *str, int width, int justr, int col) {
+static inline const char *make_str (const char *str, int width, int justr, int col) {
    static char buf[SCREENMAX];
 
    if (width < snprintf(buf, sizeof(buf), "%s", str)) {
@@ -1207,7 +1207,7 @@ static const char *make_str (const char *str, int width, int justr, int col) {
 
         /*
          * Make and then justify a percentage, with decreasing precision. */
-static const char *scale_pcnt (float num, int width, int justr) {
+static inline const char *scale_pcnt (float num, int width, int justr) {
    static char buf[SMLBUFSIZ];
 
 #ifdef PERCENTBOOST
index b90d9134db724c3ed5e643e90735845b3029eb7a..3169ac87067ca5f61e8cdbfb045f1f0df19ebf40 100644 (file)
--- a/top/top.h
+++ b/top/top.h
@@ -612,10 +612,10 @@ typedef struct WIN_t {
 //atic inline int    user_matched (WIN_t *q, const proc_t *p);
 /*------  Basic Formatting support  --------------------------------------*/
 //atic inline const char *justify_pad (const char *str, int width, int justr);
-//atic const char   *make_chr (const char ch, int width, int justr);
-//atic const char   *make_num (long num, int width, int justr, int col);
-//atic const char   *make_str (const char *str, int width, int justr, int col);
-//atic const char   *scale_pcnt (float num, int width, int justr);
+//atic inline const char *make_chr (const char ch, int width, int justr);
+//atic inline const char *make_num (long num, int width, int justr, int col);
+//atic inline const char *make_str (const char *str, int width, int justr, int col);
+//atic inline const char *scale_pcnt (float num, int width, int justr);
 //atic const char   *scale_tics (TIC_t tics, int width, int justr);
 //atic const char   *scale_unum (unsigned long num, int type, int width, int justr);
 /*------  Fields Management support  -------------------------------------*/