summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMitchell Hayenga <Mitchell.Hayenga@ARM.com>2012-06-05 01:23:08 -0400
committerMitchell Hayenga <Mitchell.Hayenga@ARM.com>2012-06-05 01:23:08 -0400
commit8294d49bb6f787bbe5b05a4a5c52d1d26a2289af (patch)
treec3bca35253d157c9187167ddbdeed93a8dad70f2
parent0b0c5621eea48a79d1d17e494fa99ea34ad8fad0 (diff)
downloadgem5-8294d49bb6f787bbe5b05a4a5c52d1d26a2289af.tar.xz
stats: Provide a mechanism to get a callback when stats are dumped.
This mechanism is useful for dumping output that is correlated with stats dumping, but isn't tracked by the gem5 statistics.
-rw-r--r--src/base/statistics.cc7
-rw-r--r--src/base/statistics.hh6
-rw-r--r--src/python/m5/stats/__init__.py2
-rw-r--r--src/python/swig/stats.i8
4 files changed, 23 insertions, 0 deletions
diff --git a/src/base/statistics.cc b/src/base/statistics.cc
index 545d08cab..8034625be 100644
--- a/src/base/statistics.cc
+++ b/src/base/statistics.cc
@@ -433,6 +433,7 @@ Formula::str() const
return root ? root->str() : "";
}
+CallbackQueue dumpQueue;
CallbackQueue resetQueue;
void
@@ -458,6 +459,12 @@ enable()
_enabled = true;
}
+void
+registerDumpCallback(Callback *cb)
+{
+ dumpQueue.add(cb);
+}
+
} // namespace Stats
void
diff --git a/src/base/statistics.hh b/src/base/statistics.hh
index 67c09bb6a..c36f8f461 100644
--- a/src/base/statistics.hh
+++ b/src/base/statistics.hh
@@ -3135,6 +3135,12 @@ bool enabled();
*/
void registerResetCallback(Callback *cb);
+/**
+ * Register a callback that should be called whenever statistics are
+ * about to be dumped
+ */
+void registerDumpCallback(Callback *cb);
+
std::list<Info *> &statsList();
} // namespace Stats
diff --git a/src/python/m5/stats/__init__.py b/src/python/m5/stats/__init__.py
index 1d7e3bc5d..765f9a634 100644
--- a/src/python/m5/stats/__init__.py
+++ b/src/python/m5/stats/__init__.py
@@ -103,6 +103,8 @@ def dump():
return
lastDump = curTick
+ internal.stats.processDumpQueue()
+
prepare()
for output in outputList:
diff --git a/src/python/swig/stats.i b/src/python/swig/stats.i
index 14a6966b1..5a6910fa6 100644
--- a/src/python/swig/stats.i
+++ b/src/python/swig/stats.i
@@ -71,6 +71,13 @@ processResetQueue()
resetQueue.process();
}
+inline void
+processDumpQueue()
+{
+ extern CallbackQueue dumpQueue;
+ dumpQueue.process();
+}
+
inline char *
PCC(const char *string)
{
@@ -146,6 +153,7 @@ void schedStatEvent(bool dump, bool reset,
Tick when = curTick(), Tick repeat = 0);
void processResetQueue();
+void processDumpQueue();
void enable();
bool enabled();