summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Binkert <nate@binkert.org>2009-04-22 13:38:00 -0700
committerNathan Binkert <nate@binkert.org>2009-04-22 13:38:00 -0700
commit8c3eb1a1922a1129a398a6b6f1d5b11de66ff263 (patch)
tree27973e8f65d7e22767d41851a817cfefaacaa86a
parent4d9f25b75cf09760f008cdb393f54a2e5d0029c7 (diff)
downloadgem5-8c3eb1a1922a1129a398a6b6f1d5b11de66ff263.tar.xz
stats: Shuffle around info stuff so it can be accessed separately
-rw-r--r--src/base/statistics.hh190
-rw-r--r--src/base/stats/info.hh220
-rw-r--r--src/base/stats/mysql.cc2
-rw-r--r--src/base/stats/text.cc11
4 files changed, 233 insertions, 190 deletions
diff --git a/src/base/statistics.hh b/src/base/statistics.hh
index 6758a6489..62f24b4b3 100644
--- a/src/base/statistics.hh
+++ b/src/base/statistics.hh
@@ -65,8 +65,9 @@
#include "base/refcnt.hh"
#include "base/str.hh"
#include "base/stats/flags.hh"
-#include "base/stats/visit.hh"
+#include "base/stats/info.hh"
#include "base/stats/types.hh"
+#include "base/stats/visit.hh"
#include "sim/host.hh"
class Callback;
@@ -77,92 +78,6 @@ extern Tick curTick;
/* A namespace for all of the Statistics */
namespace Stats {
-struct StorageParams
-{
- virtual ~StorageParams();
-};
-
-//////////////////////////////////////////////////////////////////////
-//
-// Statistics Framework Base classes
-//
-//////////////////////////////////////////////////////////////////////
-class Info
-{
- public:
- /** The name of the stat. */
- std::string name;
- /** The description of the stat. */
- std::string desc;
- /** The formatting flags. */
- StatFlags flags;
- /** The display precision. */
- int precision;
- /** A pointer to a prerequisite Stat. */
- const Info *prereq;
- /**
- * 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();
-
- /** Set the name of this statistic */
- void setName(const std::string &name);
-
- /**
- * Check that this stat has been set up properly and is ready for
- * use
- * @return true for success
- */
- virtual bool check() const = 0;
- bool baseCheck() const;
-
- /**
- * Enable the stat for use
- */
- virtual void enable();
-
- /**
- * Prepare the stat for dumping.
- */
- virtual void prepare() = 0;
-
- /**
- * Reset the stat to the default state.
- */
- virtual void reset() = 0;
-
- /**
- * @return true if this stat has a value and satisfies its
- * requirement as a prereq
- */
- virtual bool zero() const = 0;
-
- /**
- * Visitor entry for outputing statistics data
- */
- virtual void visit(Visit &visitor) = 0;
-
- /**
- * Checks if the first stat's name is alphabetically less than the second.
- * This function breaks names up at periods and considers each subname
- * separately.
- * @param stat1 The first stat.
- * @param stat2 The second stat.
- * @return stat1's name is alphabetically before stat2's
- */
- static bool less(Info *stat1, Info *stat2);
-};
-struct StorageParams;
-
template <class Stat, class Base>
class InfoProxy : public Base
{
@@ -183,14 +98,6 @@ class InfoProxy : public Base
bool zero() const { return s.zero(); }
};
-class ScalarInfo : public Info
-{
- public:
- virtual Counter value() const = 0;
- virtual Result result() const = 0;
- virtual Result total() const = 0;
-};
-
template <class Stat>
class ScalarInfoProxy : public InfoProxy<Stat, ScalarInfo>
{
@@ -202,23 +109,6 @@ class ScalarInfoProxy : public InfoProxy<Stat, ScalarInfo>
Result total() const { return this->s.total(); }
};
-class VectorInfo : public Info
-{
- public:
- /** Names and descriptions of subfields. */
- std::vector<std::string> subnames;
- std::vector<std::string> subdescs;
-
- public:
- void enable();
-
- public:
- virtual size_type size() const = 0;
- virtual const VCounter &value() const = 0;
- virtual const VResult &result() const = 0;
- virtual Result total() const = 0;
-};
-
template <class Stat>
class VectorInfoProxy : public InfoProxy<Stat, VectorInfo>
{
@@ -248,25 +138,6 @@ class VectorInfoProxy : public InfoProxy<Stat, VectorInfo>
Result total() const { return this->s.total(); }
};
-struct DistData
-{
- Counter min_val;
- Counter max_val;
- Counter underflow;
- Counter overflow;
- VCounter cvec;
- Counter sum;
- Counter squares;
- Counter samples;
-};
-
-class DistInfo : public Info
-{
- public:
- /** Local storage for the entry values, used for printing. */
- DistData data;
-};
-
template <class Stat>
class DistInfoProxy : public InfoProxy<Stat, DistInfo>
{
@@ -274,24 +145,6 @@ class DistInfoProxy : public InfoProxy<Stat, DistInfo>
DistInfoProxy(Stat &stat) : InfoProxy<Stat, DistInfo>(stat) {}
};
-class VectorDistInfo : public Info
-{
- public:
- std::vector<DistData> data;
-
- /** Names and descriptions of subfields. */
- std::vector<std::string> subnames;
- std::vector<std::string> subdescs;
- void enable();
-
- protected:
- /** Local storage for the entry values, used for printing. */
- mutable VResult rvec;
-
- public:
- virtual size_type size() const = 0;
-};
-
template <class Stat>
class VectorDistInfoProxy : public InfoProxy<Stat, VectorDistInfo>
{
@@ -301,23 +154,6 @@ class VectorDistInfoProxy : public InfoProxy<Stat, VectorDistInfo>
size_type size() const { return this->s.size(); }
};
-class Vector2dInfo : public Info
-{
- public:
- /** Names and descriptions of subfields. */
- std::vector<std::string> subnames;
- std::vector<std::string> subdescs;
- std::vector<std::string> y_subnames;
-
- size_type x;
- size_type y;
-
- /** Local storage for the entry values, used for printing. */
- mutable VCounter cvec;
-
- void enable();
-};
-
template <class Stat>
class Vector2dInfoProxy : public InfoProxy<Stat, Vector2dInfo>
{
@@ -1427,22 +1263,6 @@ class Vector2dBase : public DataWrapVec2d<Derived, Vector2dInfoProxy>
//
//////////////////////////////////////////////////////////////////////
-struct DistParams : public StorageParams
-{
- const bool fancy;
-
- /** The minimum value to track. */
- Counter min;
- /** The maximum value to track. */
- Counter max;
- /** The number of entries in each bucket. */
- Counter bucket_size;
- /** The number of buckets. Equal to (max-min)/bucket_size. */
- size_type buckets;
-
- explicit DistParams(bool f) : fancy(f) {}
-};
-
/**
* Templatized storage and interface for a distrbution stat.
*/
@@ -2555,12 +2375,6 @@ class VectorAverageDeviation
}
};
-class FormulaInfo : public VectorInfo
-{
- public:
- virtual std::string str() const = 0;
-};
-
template <class Stat>
class FormulaInfoProxy : public InfoProxy<Stat, FormulaInfo>
{
diff --git a/src/base/stats/info.hh b/src/base/stats/info.hh
new file mode 100644
index 000000000..d0ff6b170
--- /dev/null
+++ b/src/base/stats/info.hh
@@ -0,0 +1,220 @@
+/*
+ * Copyright (c) 2003-2005 The Regents of The University of Michigan
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Nathan Binkert
+ */
+
+#include "base/stats/flags.hh"
+#include "base/stats/types.hh"
+
+namespace Stats {
+
+struct StorageParams
+{
+ virtual ~StorageParams();
+};
+
+struct Visit;
+
+class Info
+{
+ public:
+ /** The name of the stat. */
+ std::string name;
+ /** The description of the stat. */
+ std::string desc;
+ /** The formatting flags. */
+ StatFlags flags;
+ /** The display precision. */
+ int precision;
+ /** A pointer to a prerequisite Stat. */
+ const Info *prereq;
+ /**
+ * 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();
+
+ /** Set the name of this statistic */
+ void setName(const std::string &name);
+
+ /**
+ * Check that this stat has been set up properly and is ready for
+ * use
+ * @return true for success
+ */
+ virtual bool check() const = 0;
+ bool baseCheck() const;
+
+ /**
+ * Enable the stat for use
+ */
+ virtual void enable();
+
+ /**
+ * Prepare the stat for dumping.
+ */
+ virtual void prepare() = 0;
+
+ /**
+ * Reset the stat to the default state.
+ */
+ virtual void reset() = 0;
+
+ /**
+ * @return true if this stat has a value and satisfies its
+ * requirement as a prereq
+ */
+ virtual bool zero() const = 0;
+
+ /**
+ * Visitor entry for outputing statistics data
+ */
+ virtual void visit(Visit &visitor) = 0;
+
+ /**
+ * Checks if the first stat's name is alphabetically less than the second.
+ * This function breaks names up at periods and considers each subname
+ * separately.
+ * @param stat1 The first stat.
+ * @param stat2 The second stat.
+ * @return stat1's name is alphabetically before stat2's
+ */
+ static bool less(Info *stat1, Info *stat2);
+};
+
+class ScalarInfo : public Info
+{
+ public:
+ virtual Counter value() const = 0;
+ virtual Result result() const = 0;
+ virtual Result total() const = 0;
+};
+
+class VectorInfo : public Info
+{
+ public:
+ /** Names and descriptions of subfields. */
+ std::vector<std::string> subnames;
+ std::vector<std::string> subdescs;
+
+ public:
+ void enable();
+
+ public:
+ virtual size_type size() const = 0;
+ virtual const VCounter &value() const = 0;
+ virtual const VResult &result() const = 0;
+ virtual Result total() const = 0;
+};
+
+struct DistData
+{
+ Counter min_val;
+ Counter max_val;
+ Counter underflow;
+ Counter overflow;
+ VCounter cvec;
+ Counter sum;
+ Counter squares;
+ Counter samples;
+};
+
+struct DistParams : public StorageParams
+{
+ const bool fancy;
+
+ /** The minimum value to track. */
+ Counter min;
+ /** The maximum value to track. */
+ Counter max;
+ /** The number of entries in each bucket. */
+ Counter bucket_size;
+ /** The number of buckets. Equal to (max-min)/bucket_size. */
+ size_type buckets;
+
+ explicit DistParams(bool f) : fancy(f) {}
+};
+
+class DistInfo : public Info
+{
+ public:
+ /** Local storage for the entry values, used for printing. */
+ DistData data;
+};
+
+class VectorDistInfo : public Info
+{
+ public:
+ std::vector<DistData> data;
+
+ /** Names and descriptions of subfields. */
+ std::vector<std::string> subnames;
+ std::vector<std::string> subdescs;
+ void enable();
+
+ protected:
+ /** Local storage for the entry values, used for printing. */
+ mutable VResult rvec;
+
+ public:
+ virtual size_type size() const = 0;
+};
+
+class Vector2dInfo : public Info
+{
+ public:
+ /** Names and descriptions of subfields. */
+ std::vector<std::string> subnames;
+ std::vector<std::string> subdescs;
+ std::vector<std::string> y_subnames;
+
+ size_type x;
+ size_type y;
+
+ /** Local storage for the entry values, used for printing. */
+ mutable VCounter cvec;
+
+ void enable();
+};
+
+class FormulaInfo : public VectorInfo
+{
+ public:
+ virtual std::string str() const = 0;
+};
+
+
+/* namespace Stats */ }
diff --git a/src/base/stats/mysql.cc b/src/base/stats/mysql.cc
index dff9a0ee0..84e131e4f 100644
--- a/src/base/stats/mysql.cc
+++ b/src/base/stats/mysql.cc
@@ -36,8 +36,8 @@
#include "base/misc.hh"
#include "base/mysql.hh"
-#include "base/statistics.hh"
#include "base/stats/flags.hh"
+#include "base/stats/info.hh"
#include "base/stats/mysql.hh"
#include "base/stats/mysql_run.hh"
#include "base/stats/types.hh"
diff --git a/src/base/stats/text.cc b/src/base/stats/text.cc
index 8502ec747..fbb1ad1e6 100644
--- a/src/base/stats/text.cc
+++ b/src/base/stats/text.cc
@@ -36,13 +36,20 @@
#include <math.h>
#endif
+#include <cassert>
+#ifdef __SUNPRO_CC
+#include <math.h>
+#endif
+#include <cmath>
#include <iostream>
#include <sstream>
#include <fstream>
#include <string>
+#include "base/cast.hh"
#include "base/misc.hh"
-#include "base/statistics.hh"
+#include "base/str.hh"
+#include "base/stats/info.hh"
#include "base/stats/text.hh"
#include "base/stats/visit.hh"
@@ -72,6 +79,8 @@ __nan()
namespace Stats {
+std::list<Info *> &statsList();
+
Text::Text()
: mystream(false), stream(NULL), descriptions(false)
{