diff options
author | Andreas Sandberg <andreas.sandberg@arm.com> | 2019-09-24 10:41:17 +0100 |
---|---|---|
committer | Andreas Sandberg <andreas.sandberg@arm.com> | 2019-09-26 10:05:03 +0000 |
commit | 7e52bf014adefe6be8ea0da53192bf77f6131c9b (patch) | |
tree | 4a10bd17bcdcc1091021964a1d1b8c3bdce72640 | |
parent | 4f52287500cca19325cc58e9cbef374526572e44 (diff) | |
download | gem5-7e52bf014adefe6be8ea0da53192bf77f6131c9b.tar.xz |
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>
-rw-r--r-- | src/base/stats/group.cc | 10 | ||||
-rw-r--r-- | src/base/stats/group.hh | 7 | ||||
-rw-r--r-- | src/python/m5/stats/__init__.py | 4 | ||||
-rw-r--r-- | src/python/pybind11/stats.cc | 1 |
4 files changed, 22 insertions, 0 deletions
diff --git a/src/base/stats/group.cc b/src/base/stats/group.cc index b1504275a..d7c244225 100644 --- a/src/base/stats/group.cc +++ b/src/base/stats/group.cc @@ -94,6 +94,16 @@ Group::resetStats() } 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 f65e46448..96743a811 100644 --- a/src/base/stats/group.hh +++ b/src/base/stats/group.hh @@ -128,6 +128,13 @@ class Group 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 e2e1909f7..6a7c14d00 100644 --- a/src/python/m5/stats/__init__.py +++ b/src/python/m5/stats/__init__.py @@ -371,6 +371,10 @@ def dump(root=None): # 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 190c78d52..b1f420978 100644 --- a/src/python/pybind11/stats.cc +++ b/src/python/pybind11/stats.cc @@ -127,6 +127,7 @@ pybind_init_stats(py::module &m_native) 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) |