stats: Add a preDumpStats() callback to Stats::Group
Some objects need to know that we are about to dump stats to perform
prepare statistics. This is currently done by registering a callback
with the stat system. Expose this callback as a virtual method
in Stats::Group to make this pattern more convenient.
Change-Id: I5aa475b7d04c288e45f5f413ab7a1907b971dae5
Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/21139
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Daniel Carvalho <odanrc@yahoo.com.br>
diff --git a/src/base/stats/group.cc b/src/base/stats/group.cc
index b150427..d7c2442 100644
--- a/src/base/stats/group.cc
+++ b/src/base/stats/group.cc
@@ -94,6 +94,16 @@
}
void
+Group::preDumpStats()
+{
+ for (auto &g : mergedStatGroups)
+ g->preDumpStats();
+
+ for (auto &g : statGroups)
+ g.second->preDumpStats();
+}
+
+void
Group::addStat(Stats::Info *info)
{
stats.push_back(info);
diff --git a/src/base/stats/group.hh b/src/base/stats/group.hh
index f65e464..96743a8 100644
--- a/src/base/stats/group.hh
+++ b/src/base/stats/group.hh
@@ -128,6 +128,13 @@
virtual void resetStats();
/**
+ * Callback before stats are dumped. This can be overridden by
+ * objects that need to perform calculations in addition to the
+ * capabiltiies implemented in the stat framework.
+ */
+ virtual void preDumpStats();
+
+ /**
* Register a stat with this group. This method is normally called
* automatically when a stat is instantiated.
*/
diff --git a/src/python/m5/stats/__init__.py b/src/python/m5/stats/__init__.py
index e2e1909..6a7c14d 100644
--- a/src/python/m5/stats/__init__.py
+++ b/src/python/m5/stats/__init__.py
@@ -371,6 +371,10 @@
# Only prepare stats the first time we dump them in the same tick.
if new_dump:
_m5.stats.processDumpQueue()
+ # Notify new-style stats group that we are about to dump stats.
+ sim_root = Root.getInstance()
+ if sim_root:
+ sim_root.preDumpStats();
prepare()
for output in outputList:
diff --git a/src/python/pybind11/stats.cc b/src/python/pybind11/stats.cc
index 190c78d..b1f4209 100644
--- a/src/python/pybind11/stats.cc
+++ b/src/python/pybind11/stats.cc
@@ -127,6 +127,7 @@
m, "Group")
.def("regStats", &Stats::Group::regStats)
.def("resetStats", &Stats::Group::resetStats)
+ .def("preDumpStats", &Stats::Group::preDumpStats)
.def("getStats", &Stats::Group::getStats)
.def("getStatGroups", &Stats::Group::getStatGroups)
.def("addStatGroup", &Stats::Group::addStatGroup)