changeset 02e5bc7ca9ba in /z/repo/m5
details: http://repo.m5sim.org/m5?cmd=changeset;node=02e5bc7ca9ba
description:
        stats: reorganize how parameters are stored and accessed.

diffstat:

4 files changed, 209 insertions(+), 197 deletions(-)
src/base/statistics.cc  |   24 ++-
src/base/statistics.hh  |  337 ++++++++++++++++++++++-------------------------
src/base/stats/mysql.cc |   18 +-
src/base/stats/text.cc  |   27 ++-

diffs (truncated from 1139 to 300 lines):

diff -r 9775f70fbe66 -r 02e5bc7ca9ba src/base/statistics.cc
--- a/src/base/statistics.cc    Mon Feb 23 12:22:18 2009 -0800
+++ b/src/base/statistics.cc    Mon Feb 23 12:22:19 2009 -0800
@@ -36,6 +36,7 @@
 
 #include "base/callback.hh"
 #include "base/cprintf.hh"
+#include "base/debug.hh"
 #include "base/hostinfo.hh"
 #include "base/misc.hh"
 #include "base/statistics.hh"
@@ -81,6 +82,12 @@
 }
 
 void
+InfoAccess::setParams(const StorageParams *params)
+{
+    info()->storageParams = params;
+}
+
+void
 InfoAccess::setInit()
 {
     info()->flags |= init;
@@ -102,11 +109,20 @@
     return (*i).second;
 }
 
+StorageParams::~StorageParams()
+{
+}
+
+int Info::id_count = 0;
+
+int debug_break_id = -1;
+
 Info::Info()
-    : flags(none), precision(-1), prereq(0)
+    : flags(none), precision(-1), prereq(0), storageParams(NULL)
 {
-    static int count = 0;
-    id = count++;
+    id = id_count++;
+    if (debug_break_id >= 0 and debug_break_id == id)
+        debug_break();
 }
 
 Info::~Info()
@@ -249,7 +265,7 @@
         Info *info = *i;
         assert(info);
         if (!info->check() || !info->baseCheck())
-            panic("stat check failed for %s\n", info->name);
+            panic("stat check failed for '%s' %d\n", info->name, info->id);
     }
 
     off_t j = 0;
diff -r 9775f70fbe66 -r 02e5bc7ca9ba src/base/statistics.hh
--- a/src/base/statistics.hh    Mon Feb 23 12:22:18 2009 -0800
+++ b/src/base/statistics.hh    Mon Feb 23 12:22:19 2009 -0800
@@ -77,6 +77,10 @@
 /* A namespace for all of the Statistics */
 namespace Stats {
 
+struct StorageParams
+{
+    virtual ~StorageParams();
+};
 
 //////////////////////////////////////////////////////////////////////
 //
@@ -100,9 +104,13 @@
      * A unique stat ID for each stat in the simulator.
      * Can be used externally for lookups as well as for debugging.
      */
+    static int id_count;
     int id;
 
   public:
+    const StorageParams *storageParams;
+
+  public:
     Info();
     virtual ~Info();
 
@@ -247,10 +255,6 @@
     Counter squares;
     Counter samples;
 
-    Counter min;
-    Counter max;
-    Counter bucket_size;
-    size_type size;
     bool fancy;
 };
 
@@ -383,9 +387,13 @@
     /** Set up an info class for this statistic */
     void setInfo(Info *info);
     /** Save Storage class parameters if any */
+    void setParams(const StorageParams *params);
+    /** Save Storage class parameters if any */
     void setInit();
 
+    /** Grab the information class for this statistic */
     Info *info();
+    /** Grab the information class for this statistic */
     const Info *info() const;
 };
 
@@ -591,55 +599,51 @@
  */
 class StatStor
 {
-  public:
-    /** The paramaters for this storage type, none for a scalar. */
-    struct Params { };
-
   private:
     /** The statistic value. */
     Counter data;
 
   public:
+    struct Params : public StorageParams {};
+
+  public:
     /**
      * Builds this storage element and calls the base constructor of the
      * datatype.
      */
-    StatStor(const Params &) : data(Counter()) {}
+    StatStor(Info *info)
+        : data(Counter())
+    { }
 
     /**
      * The the stat to the given value.
      * @param val The new value.
-     * @param p The paramters of this storage type.
      */
-    void set(Counter val, const Params &p) { data = val; }
+    void set(Counter val) { data = val; }
     /**
      * Increment the stat by the given value.
      * @param val The new value.
-     * @param p The paramters of this storage type.
      */
-    void inc(Counter val, const Params &p) { data += val; }
+    void inc(Counter val) { data += val; }
     /**
      * Decrement the stat by the given value.
      * @param val The new value.
-     * @param p The paramters of this storage type.
      */
-    void dec(Counter val, const Params &p) { data -= val; }
+    void dec(Counter val) { data -= val; }
     /**
      * Return the value of this stat as its base type.
-     * @param p The params of this storage type.
      * @return The value of this stat.
      */
-    Counter value(const Params &p) const { return data; }
+    Counter value() const { return data; }
     /**
      * Return the value of this stat as a result type.
-     * @param p The parameters of this storage type.
      * @return The value of this stat.
      */
-    Result result(const Params &p) const { return (Result)data; }
+    Result result() const { return (Result)data; }
     /**
      * Reset stat value to default
      */
-    void reset() { data = Counter(); }
+    void reset(Info *info) { data = Counter(); }
 
     /**
      * @return true if zero value
@@ -656,10 +660,6 @@
  */
 class AvgStor
 {
-  public:
-    /** The paramaters for this storage type */
-    struct Params { };
-
   private:
     /** The current count. */
     Counter current;
@@ -669,19 +669,23 @@
     mutable Tick last;
 
   public:
+    struct Params : public StorageParams {};
+
+  public:
     /**
      * Build and initializes this stat storage.
      */
-    AvgStor(Params &p) : current(0), total(0), last(0) { }
+    AvgStor(Info *info)
+        : current(0), total(0), last(0)
+    { }
 
     /**
      * Set the current count to the one provided, update the total and last
      * set values.
      * @param val The new count.
-     * @param p The parameters for this storage.
      */
     void
-    set(Counter val, Params &p)
+    set(Counter val)
     {
         total += current * (curTick - last);
         last = curTick;
@@ -691,31 +695,27 @@
     /**
      * Increment the current count by the provided value, calls set.
      * @param val The amount to increment.
-     * @param p The parameters for this storage.
      */
-    void inc(Counter val, Params &p) { set(current + val, p); }
+    void inc(Counter val) { set(current + val); }
 
     /**
      * Deccrement the current count by the provided value, calls set.
      * @param val The amount to decrement.
-     * @param p The parameters for this storage.
      */
-    void dec(Counter val, Params &p) { set(current - val, p); }
+    void dec(Counter val) { set(current - val); }
 
     /**
      * Return the current count.
-     * @param p The parameters for this storage.
      * @return The current count.
      */
-    Counter value(const Params &p) const { return current; }
+    Counter value() const { return current; }
 
     /**
      * Return the current average.
-     * @param p The parameters for this storage.
      * @return The current average.
      */
     Result
-    result(const Params &p) const
+    result() const
     {
         total += current * (curTick - last);
         last = curTick;
@@ -726,7 +726,7 @@
      * Reset stat value to default
      */
     void
-    reset()
+    reset(Info *info)
     {
         total = 0;
         last = curTick;
@@ -747,17 +747,12 @@
 {
   public:
     typedef Stor Storage;
-
-    /** Define the params of the storage class. */
-    typedef typename Storage::Params Params;
+    typedef typename Stor::Params Params;
 
   protected:
     /** The storage of this stat. */
     char storage[sizeof(Storage)] __attribute__ ((aligned (8)));
 
-    /** The parameters for this stat. */
-    Params params;
-
   protected:
     /**
      * Retrieve the storage.
@@ -785,7 +780,7 @@
     void
     doInit()
     {
-        new (storage) Storage(params);
+        new (storage) Storage(info());
         setInit();
     }
 
@@ -794,14 +789,10 @@
      * Return the current value of this stat as its base type.
      * @return The current value.
      */
-    Counter value() const { return data()->value(params); }
+    Counter value() const { return data()->value(); }
 
   public:
-    /**
-     * Create and initialize this stat, register it with the database.
-     */
_______________________________________________
m5-dev mailing list
m5-dev@m5sim.org
http://m5sim.org/mailman/listinfo/m5-dev

Reply via email to