From 8294d49bb6f787bbe5b05a4a5c52d1d26a2289af Mon Sep 17 00:00:00 2001 From: Mitchell Hayenga Date: Tue, 5 Jun 2012 01:23:08 -0400 Subject: 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. --- src/base/statistics.cc | 7 +++++++ src/base/statistics.hh | 6 ++++++ src/python/m5/stats/__init__.py | 2 ++ src/python/swig/stats.i | 8 ++++++++ 4 files changed, 23 insertions(+) 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 &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(); -- cgit v1.2.3