summaryrefslogtreecommitdiff
path: root/src/base
diff options
context:
space:
mode:
Diffstat (limited to 'src/base')
-rw-r--r--src/base/statistics.cc40
-rw-r--r--src/base/statistics.hh19
2 files changed, 59 insertions, 0 deletions
diff --git a/src/base/statistics.cc b/src/base/statistics.cc
index 2bd34d3db..5ab837410 100644
--- a/src/base/statistics.cc
+++ b/src/base/statistics.cc
@@ -462,10 +462,32 @@ Formula::str() const
return root ? root->str() : "";
}
+Handler resetHandler = NULL;
+Handler dumpHandler = NULL;
+
+void
+registerHandlers(Handler reset_handler, Handler dump_handler)
+{
+ resetHandler = reset_handler;
+ dumpHandler = dump_handler;
+}
+
CallbackQueue dumpQueue;
CallbackQueue resetQueue;
void
+processResetQueue()
+{
+ resetQueue.process();
+}
+
+void
+processDumpQueue()
+{
+ dumpQueue.process();
+}
+
+void
registerResetCallback(Callback *cb)
{
resetQueue.add(cb);
@@ -489,6 +511,24 @@ enable()
}
void
+dump()
+{
+ if (dumpHandler)
+ dumpHandler();
+ else
+ fatal("No registered Stats::dump handler");
+}
+
+void
+reset()
+{
+ if (resetHandler)
+ resetHandler();
+ else
+ fatal("No registered Stats::reset handler");
+}
+
+void
registerDumpCallback(Callback *cb)
{
dumpQueue.add(cb);
diff --git a/src/base/statistics.hh b/src/base/statistics.hh
index a6edde2f9..f4b12e847 100644
--- a/src/base/statistics.hh
+++ b/src/base/statistics.hh
@@ -3209,6 +3209,15 @@ void enable();
bool enabled();
/**
+ * Register reset and dump handlers. These are the functions which
+ * will actually perform the whole statistics reset/dump actions
+ * including processing the reset/dump callbacks
+ */
+typedef void (*Handler)();
+
+void registerHandlers(Handler reset_handler, Handler dump_handler);
+
+/**
* Register a callback that should be called whenever statistics are
* reset
*/
@@ -3220,6 +3229,16 @@ void registerResetCallback(Callback *cb);
*/
void registerDumpCallback(Callback *cb);
+/**
+ * Process all the callbacks in the reset callbacks queue
+ */
+void processResetQueue();
+
+/**
+ * Process all the callbacks in the dump callbacks queue
+ */
+void processDumpQueue();
+
std::list<Info *> &statsList();
typedef std::map<const void *, Info *> MapType;