]> granicus.if.org Git - procps-ng/commitdiff
top: give inspect display page algorithm a small boost
authorJim Warner <james.warner@comcast.net>
Wed, 28 Nov 2012 06:00:00 +0000 (00:00 -0600)
committerCraig Small <csmall@enc.com.au>
Sun, 2 Dec 2012 02:39:52 +0000 (13:39 +1100)
This commit improves display performance when the user
has scrolled horizontally past the end of a top 'row'.

We can avoid the need to memset our buffer with spaces
and putp those spaces individually by exploiting logic
that already exists. If one '\n' character is inserted
into the buffer instead, the next terminfo string sent
will be Cap_clr_eol achieving exactly the same effect!

(now that we know a '.' + 2 spaces is squeezed to one)
(everything's perfectly justified, but it's just luck)

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

index cfa98b82204e5a6fb32d36610be094b03548d7e6..cd5785b3e64f4ff0222dd43981466380533c3662 100644 (file)
--- a/top/top.c
+++ b/top/top.c
@@ -2514,7 +2514,7 @@ static void insp_find (int ch, int *col, int *row) {
 
         /*
          * This guy is an insp_view_this() *Helper* function responsible
-         * for positioning us in both the x/y axes within the former glob
+         * for positioning us in both the x/y axes within the current glob
          * and displaying a page worth of damages.  Along the way, he makes
          * sure that any control characters and/or unprintable characters
          * use a less-like approach which distinguishes between two forms
@@ -2550,10 +2550,11 @@ static inline void insp_show_pg (int col, int row, int max) {
 
       capNO;
       putp("\n");
-      memset(tline, ' ', sizeof(tline));
       len = INSP_RLEN(row);
       if (col < len)
          memcpy(tline, Insp_p[row] + col, sizeof(tline));
+      else tline[0] = '\n';
+
       for (fr = 0, to = 0; fr < len && to < Screen_cols; fr++) {
          unsigned char uch = tline[fr];
          if (uch == '\n')   break;     // a no show  (he,he)