diff -r d7b2b7524fe4 -r b928aace81fa src/python/m5/SimObject.py --- a/src/python/m5/SimObject.py Sun Jun 27 23:30:33 2010 -0700 +++ b/src/python/m5/SimObject.py Sun Jun 27 23:42:09 2010 -0700 @@ -764,6 +764,27 @@ % self.path() return self._ccObject + def iterChildren(self): + yield self + for child in self._children.itervalues(): + for obj in child.iterChildren(): + yield obj + + def init(self): + self._ccObject.init() + + def regStats(self): + self._ccObject.regStats() + + def regFormulas(self): + self._ccObject.regFormulas() + + def resetStats(self): + self._ccObject.resetStats() + + def startup(self): + self._ccObject.startup() + # Call C++ to create C++ object corresponding to this object and # (recursively) all its children def createCCObject(self): diff -r d7b2b7524fe4 -r b928aace81fa src/python/m5/core.py --- a/src/python/m5/core.py Sun Jun 27 23:30:33 2010 -0700 +++ b/src/python/m5/core.py Sun Jun 27 23:42:09 2010 -0700 @@ -27,14 +27,6 @@ # Authors: Nathan Binkert import internal -from internal.core import initAll, regAllStats def setOutputDir(dir): internal.core.setOutputDir(dir) - -def initAll(): - internal.core.initAll() - -def regAllStats(): - internal.core.regAllStats() - diff -r d7b2b7524fe4 -r b928aace81fa src/python/m5/simulate.py --- a/src/python/m5/simulate.py Sun Jun 27 23:30:33 2010 -0700 +++ b/src/python/m5/simulate.py Sun Jun 27 23:42:09 2010 -0700 @@ -81,10 +81,11 @@ root.connectPorts() # Do a second pass to finish initializing the sim objects - core.initAll() + for obj in root.iterChildren(): obj.init() # Do a third pass to initialize statistics - core.regAllStats() + for obj in root.iterChildren(): obj.regStats() + for obj in root.iterChildren(): obj.regFormulas() # We're done registering statistics. Enable the stats package now. stats.enable() @@ -108,7 +109,8 @@ global need_resume, need_startup if need_startup: - internal.core.startupAll() + root = objects.Root.getInstance() + for obj in root.iterChildren(): obj.startup() need_startup = False for root in need_resume: diff -r d7b2b7524fe4 -r b928aace81fa src/python/m5/stats.py --- a/src/python/m5/stats.py Sun Jun 27 23:30:33 2010 -0700 +++ b/src/python/m5/stats.py Sun Jun 27 23:42:09 2010 -0700 @@ -29,6 +29,7 @@ import internal from internal.stats import StatEvent as event +from objects import Root def initText(filename, desc=True): internal.stats.initText(filename, desc) @@ -56,4 +57,8 @@ internal.stats.dump() def reset(): + # call reset stats on all SimObjects + root = Root.getInstance() + for obj in root.iterChildren(): obj.resetStats() + # call any other registered stats reset callbacks internal.stats.reset() diff -r d7b2b7524fe4 -r b928aace81fa src/python/swig/core.i --- a/src/python/swig/core.i Sun Jun 27 23:30:33 2010 -0700 +++ b/src/python/swig/core.i Sun Jun 27 23:42:09 2010 -0700 @@ -78,10 +78,6 @@ void serializeAll(const std::string &cpt_dir); void unserializeAll(const std::string &cpt_dir); -void initAll(); -void regAllStats(); -void startupAll(); - bool want_warn, warn_verbose; bool want_info, info_verbose; bool want_hack, hack_verbose; diff -r d7b2b7524fe4 -r b928aace81fa src/python/swig/pyobject.hh --- a/src/python/swig/pyobject.hh Sun Jun 27 23:30:33 2010 -0700 +++ b/src/python/swig/pyobject.hh Sun Jun 27 23:42:09 2010 -0700 @@ -45,17 +45,6 @@ int connectPorts(SimObject *o1, const std::string &name1, int i1, SimObject *o2, const std::string &name2, int i2); -inline void -initAll() -{ - SimObject::initAll(); -} - -inline void -regAllStats() -{ - SimObject::regAllStats(); -} inline void serializeAll(const std::string &cpt_dir) @@ -68,9 +57,3 @@ { Serializable::unserializeAll(cpt_dir); } - -inline void -startupAll() -{ - SimObject::startupAll(); -} diff -r d7b2b7524fe4 -r b928aace81fa src/python/swig/sim_object.i --- a/src/python/swig/sim_object.i Sun Jun 27 23:30:33 2010 -0700 +++ b/src/python/swig/sim_object.i Sun Jun 27 23:42:09 2010 -0700 @@ -50,6 +50,12 @@ Drained }; + void init(); + void regStats(); + void regFormulas(); + void resetStats(); + void startup(); + unsigned int drain(Event *drain_event); void resume(); void switchOut(); diff -r d7b2b7524fe4 -r b928aace81fa src/sim/sim_object.hh --- a/src/sim/sim_object.hh Sun Jun 27 23:30:33 2010 -0700 +++ b/src/sim/sim_object.hh Sun Jun 27 23:42:09 2010 -0700 @@ -94,7 +94,6 @@ // initialization pass of all objects. // Gets invoked after construction, before unserialize. virtual void init(); - static void initAll(); // register statistics for this object virtual void regStats(); @@ -104,13 +103,6 @@ // final initialization before simulation // all state is unserialized so virtual void startup(); - static void startupAll(); - - // static: call reg_stats on all SimObjects - static void regAllStats(); - - // static: call resetStats on all SimObjects - static void resetAllStats(); // static: call nameOut() & serialize() on all SimObjects static void serializeAll(std::ostream &); diff -r d7b2b7524fe4 -r b928aace81fa src/sim/sim_object.cc --- a/src/sim/sim_object.cc Sun Jun 27 23:30:33 2010 -0700 +++ b/src/sim/sim_object.cc Sun Jun 27 23:42:09 2010 -0700 @@ -97,76 +97,6 @@ } // -// static function: -// call regStats() on all SimObjects and then regFormulas() on all -// SimObjects. -// -struct SimObjectResetCB : public Callback -{ - virtual void process() { SimObject::resetAllStats(); } -}; - -namespace { - static SimObjectResetCB StatResetCB; -} - -void -SimObject::regAllStats() -{ - SimObjectList::iterator i; - SimObjectList::iterator end = simObjectList.end(); - - /** - * @todo change cprintfs to DPRINTFs - */ - for (i = simObjectList.begin(); i != end; ++i) { -#ifdef STAT_DEBUG - cprintf("registering stats for %s\n", (*i)->name()); -#endif - (*i)->regStats(); - } - - for (i = simObjectList.begin(); i != end; ++i) { -#ifdef STAT_DEBUG - cprintf("registering formulas for %s\n", (*i)->name()); -#endif - (*i)->regFormulas(); - } - - Stats::registerResetCallback(&StatResetCB); -} - -// -// static function: call init() on all SimObjects. -// -void -SimObject::initAll() -{ - SimObjectList::iterator i = simObjectList.begin(); - SimObjectList::iterator end = simObjectList.end(); - - for (; i != end; ++i) { - SimObject *obj = *i; - obj->init(); - } -} - -// -// static function: call resetStats() on all SimObjects. -// -void -SimObject::resetAllStats() -{ - SimObjectList::iterator i = simObjectList.begin(); - SimObjectList::iterator end = simObjectList.end(); - - for (; i != end; ++i) { - SimObject *obj = *i; - obj->resetStats(); - } -} - -// // static function: serialize all SimObjects. // void @@ -201,18 +131,6 @@ } -void -SimObject::startupAll() -{ - SimObjectList::iterator i = simObjectList.begin(); - SimObjectList::iterator end = simObjectList.end(); - - while (i != end) { - (*i)->startup(); - ++i; - } -} - #ifdef DEBUG //