diff --git a/src/base/statistics.cc b/src/base/statistics.cc index e3f3ad78b..545d08cab 100644 --- a/src/base/statistics.cc +++ b/src/base/statistics.cc @@ -441,6 +441,23 @@ registerResetCallback(Callback *cb) resetQueue.add(cb); } +bool _enabled = false; + +bool +enabled() +{ + return _enabled; +} + +void +enable() +{ + if (_enabled) + fatal("Stats are already enabled"); + + _enabled = true; +} + } // namespace Stats void diff --git a/src/base/statistics.hh b/src/base/statistics.hh index 1f8a59326..cb63af708 100644 --- a/src/base/statistics.hh +++ b/src/base/statistics.hh @@ -3126,6 +3126,8 @@ sum(Temp val) /** Dump all statistics data to the registered outputs */ void dump(); void reset(); +void enable(); +bool enabled(); /** * Register a callback that should be called whenever statistics are diff --git a/src/python/m5/stats/__init__.py b/src/python/m5/stats/__init__.py index 9b5af84fb..1d7e3bc5d 100644 --- a/src/python/m5/stats/__init__.py +++ b/src/python/m5/stats/__init__.py @@ -82,6 +82,8 @@ def enable(): stats_dict[stat.name] = stat stat.enable() + internal.stats.enable(); + def prepare(): '''Prepare all stats for data access. This must be done before dumping and serialization.''' diff --git a/src/python/swig/stats.i b/src/python/swig/stats.i index 87810d305..14a6966b1 100644 --- a/src/python/swig/stats.i +++ b/src/python/swig/stats.i @@ -146,6 +146,8 @@ void schedStatEvent(bool dump, bool reset, Tick when = curTick(), Tick repeat = 0); void processResetQueue(); +void enable(); +bool enabled(); std::list &statsList(); diff --git a/src/sim/system.cc b/src/sim/system.cc index 40f5ea0ce..815a4cf1c 100644 --- a/src/sim/system.cc +++ b/src/sim/system.cc @@ -410,10 +410,11 @@ System::getMasterId(std::string master_name) } } - // todo: Check if stats are enabled yet - // I just don't know a good way to do it + // Verify that the statistics haven't been enabled yet + // Otherwise objects will have sized their stat buckets and + // they will be too small - if (false) + if (Stats::enabled()) fatal("Can't request a masterId after regStats(). \ You must do so in init().\n");