Random cleanup to make things work a bit better
authorNathan Binkert <binkertn@umich.edu>
Wed, 24 Dec 2003 06:45:56 +0000 (01:45 -0500)
committerNathan Binkert <binkertn@umich.edu>
Wed, 24 Dec 2003 06:45:56 +0000 (01:45 -0500)
base/statistics.cc:
    -  give an internal name to statistics that aren't printable
    -  speed up reset a tad
    -  Make sure that the original value of the current bin is restored properly
    -  check for the case where there are no subnames so we don't have an error
    -  check to make sure that the formula's root is set before accessing it
base/statistics.hh:
    -  clean up includes a bit
    -  deal with the case where there are no subnames
    -  get rid of remnants of FS_MEASURE stuff

--HG--
extra : convert_revision : 1e4338fc2b225647df47641b04c13b7046b2e114

base/statistics.cc
base/statistics.hh

index 9f528e7125280a0734cc218ffe2daa06f6368f2f..191a72b070ea647e0e68baed4cae036a66b2a3b0 100644 (file)
@@ -168,9 +168,18 @@ Data::check()
     list_t::iterator end = allStats.end();
 
     while (i != end) {
-        StatData *stat = *i;
-        assert(stat);
-        stat->check();
+        StatData *data = *i;
+        assert(data);
+        data->check();
+        ++i;
+    }
+
+    i = allStats.begin();
+    int j = 0;
+    while (i != end) {
+        StatData *data = *i;
+        if (!(data->flags & print))
+            data->name = "__Stat" + to_string(j++);
         ++i;
     }
 }
@@ -178,16 +187,20 @@ Data::check()
 void
 Data::reset()
 {
+    // reset non-binned stats
     list_t::iterator i = allStats.begin();
     list_t::iterator end = allStats.end();
     while (i != end) {
-        StatData *stat = *i;
-        stat->reset();
+        StatData *data = *i;
+        if (!data->binned())
+            data->reset();
         ++i;
     }
 
+    // save the bin so we can go back to where we were
     MainBin *orig = MainBin::curBin();
 
+    // reset binned stats
     list<MainBin *>::iterator bi = bins.begin();
     list<MainBin *>::iterator be = bins.end();
     while (bi != be) {
@@ -196,15 +209,16 @@ Data::reset()
 
         i = allStats.begin();
         while (i != end) {
-            StatData *stat = *i;
-            stat->reset();
+            StatData *data = *i;
+            if (data->binned())
+                data->reset();
             ++i;
         }
         ++bi;
     }
 
-    if (orig)
-        orig->activate();
+    // restore bin
+    MainBin::curBin() = orig;
 }
 
 void
@@ -751,22 +765,23 @@ VectorDataBase::display(ostream &stream, DisplayMode mode) const
     print.vec = val();
     print.total = total();
 
-    for (int i = 0; i < size; ++i) {
-        if (!subnames[i].empty()) {
-            print.subnames = subnames;
-            print.subnames.resize(size);
-            for (int i = 0; i < size; ++i) {
-                if (!subnames[i].empty() && !subdescs[i].empty()) {
-                    print.subdescs = subdescs;
-                    print.subdescs.resize(size);
-                    break;
+    if (!subnames.empty()) {
+        for (int i = 0; i < size; ++i) {
+            if (!subnames[i].empty()) {
+                print.subnames = subnames;
+                print.subnames.resize(size);
+                for (int i = 0; i < size; ++i) {
+                    if (!subnames[i].empty() && !subdescs[i].empty()) {
+                        print.subdescs = subdescs;
+                        print.subdescs.resize(size);
+                        break;
+                    }
                 }
+                break;
             }
-            break;
         }
     }
 
-
     print(stream);
 }
 
@@ -911,7 +926,7 @@ FormulaBase::size() const
 bool
 FormulaBase::binned() const
 {
-    return root->binned();
+    return root && root->binned();
 }
 
 void
index 2aeae9e7fe772d8473a609ce467365efa44faa86..6fe14dc7ff756ca6883adf6c0e327379618c3cac 100644 (file)
 #define __STATISTICS_HH__
 
 #include <algorithm>
+#include <cassert>
+#include <cmath>
 #include <functional>
 #include <iosfwd>
 #include <sstream>
 #include <string>
 #include <vector>
 
-#include <assert.h>
-
+#include "base/cprintf.hh"
+#include "base/intmath.hh"
 #include "base/refcnt.hh"
 #include "base/str.hh"
-#include "base/intmath.hh"
-#include <math.h>
 #include "sim/host.hh"
 
-#ifdef FS_MEASURE
-#include "base/trace.hh"
-#endif
 //
 //  Un-comment this to enable weirdo-stat debugging
 //
@@ -235,12 +232,14 @@ struct VectorDataBase : public StatData
     virtual result_t total() const  = 0;
     virtual void update()
     {
-        int s = size();
-        if (subnames.size() < s)
-            subnames.resize(s);
+        if (!subnames.empty()) {
+            int s = size();
+            if (subnames.size() < s)
+                subnames.resize(s);
 
-        if (subdescs.size() < s)
-            subdescs.resize(s);
+            if (subdescs.size() < s)
+                subdescs.resize(s);
+        }
     }
 };
 
@@ -273,7 +272,6 @@ class VectorData : public VectorDataBase
     }
 };
 
-
 struct DistDataData
 {
     result_t min_val;
@@ -2178,9 +2176,6 @@ struct MainBin
     activate()
     {
         setCurBin(this);
-#ifdef FS_MEASURE
-        DPRINTF(TCPIP, "activating %s Bin\n", name());
-#endif
     }
 
     class BinBase