stats: Provide a mechanism to get a callback when stats are dumped.
authorMitchell Hayenga <Mitchell.Hayenga@ARM.com>
Tue, 5 Jun 2012 05:23:08 +0000 (01:23 -0400)
committerMitchell Hayenga <Mitchell.Hayenga@ARM.com>
Tue, 5 Jun 2012 05:23:08 +0000 (01:23 -0400)
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
src/base/statistics.hh
src/python/m5/stats/__init__.py
src/python/swig/stats.i

index 545d08cabeb89a8d5417f72cdf75067faa95dd29..8034625beee105a67d7729bd3579127804c10779 100644 (file)
@@ -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
index 67c09bb6ac3914263653a9bf492d86ba8f424149..c36f8f4614ebfe3c9b4b97e5c5173bb60b05ae70 100644 (file)
@@ -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
index 1d7e3bc5d2284bb9ed832f9032f6c75459dd003e..765f9a634581d4d1161cef98bae7f238a05a7a56 100644 (file)
@@ -103,6 +103,8 @@ def dump():
         return
     lastDump = curTick
 
+    internal.stats.processDumpQueue()
+
     prepare()
 
     for output in outputList:
index 14a6966b127a3d07c6ba7f1bb0990bb1d92150b6..5a6910fa6c7a024b7c0689c39bacfef6737c2ce3 100644 (file)
@@ -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();