]> granicus.if.org Git - procps-ng/commitdiff
make top go faster
authoralbert <>
Sun, 13 Oct 2002 08:53:06 +0000 (08:53 +0000)
committeralbert <>
Sun, 13 Oct 2002 08:53:06 +0000 (08:53 +0000)
top.c

diff --git a/top.c b/top.c
index 9a65aa3884ad1acea37a0349139c3d709bab199c..7644d4a8f569e0d3d9139f5b343aae4375102e48 100644 (file)
--- a/top.c
+++ b/top.c
@@ -1741,17 +1741,25 @@ static void cpudo (CPUS_t *cpu, const char *pfx)
 static void frame_states (proc_t **ppt, int show)
 {
    static HIST_t   *hist_sav;
+   static HIST_t   *hist_new;
    static unsigned  hist_siz; // number of structs
-   HIST_t          *hist_new;
    unsigned         total, running, sleeping, stopped, zombie;
+   HIST_t          *hist_tmp;
 
-   if (!hist_sav) {
+   if (!hist_sav) {           // 1st time through
       Frame_maxtask = 0;
       hist_siz = 100;
       hist_sav = alloc_c(sizeof(HIST_t)*hist_siz);
+      hist_new = alloc_c(sizeof(HIST_t)*hist_siz);
    }
-   hist_new = alloc_c(sizeof(HIST_t)*hist_siz);
+
+   // reuse memory each time around
+   hist_tmp = hist_sav;
+   hist_sav = hist_new;
+   hist_new = tmp;
+
    total = running = sleeping = stopped = zombie = 0;
+
    time_elapsed();
 
       /* make a pass through the data to get stats */
@@ -1800,9 +1808,6 @@ static void frame_states (proc_t **ppt, int show)
       total++;
    } /* end: while 'pids' */
 
-
-   free(hist_sav);
-   hist_sav = hist_new;
       /* shout results to the world (and us too, the next time around) */
    Frame_maxtask = total;