147a148,149
> self.printProfileDumperCC(path)
> self.printProfileDumperHH(path)
210a213
> #include "mem/protocol/${ident}_ProfileDumper.hh"
280c283,284
< ${ident}_Profiler s_profiler;
---
> static ${ident}_ProfileDumper s_profileDumper;
> ${ident}_Profiler m_profiler;
359a364
> ${ident}_ProfileDumper $c_ident::s_profileDumper;
437c442,443
< s_profiler.setVersion(m_version);
---
> m_profiler.setVersion(m_version);
> s_profileDumper.registerProfiler(&m_profiler);
557c563
< code('s_profiler.possibleTransition($state, $event);')
---
> code('m_profiler.possibleTransition($state, $event);')
661c667,669
< s_profiler.dumpStats(out);
---
> if (m_version == 0) {
> s_profileDumper.dumpStats(out);
> }
677c685
< s_profiler.clearStats();
---
> m_profiler.clearStats();
807c815
< s_profiler.countTransition(state, event);
---
> m_profiler.countTransition(state, event);
930a939,1033
> def printProfileDumperHH(self, path):
> code = self.symtab.codeFormatter()
> ident = self.ident
>
> code('''
> // Auto generated C++ code started by $__file__:$__line__
> // ${ident}: ${{self.short}}
>
> #ifndef __${ident}_PROFILE_DUMPER_HH__
> #define __${ident}_PROFILE_DUMPER_HH__
>
> #include <iostream>
> #include <vector>
>
> #include "${ident}_Profiler.hh"
> #include "${ident}_Event.hh"
>
> typedef std::vector<${ident}_Profiler *> ${ident}_profilers;
>
> class ${ident}_ProfileDumper
> {
> public:
> ${ident}_ProfileDumper();
> void registerProfiler(${ident}_Profiler* profiler);
> void dumpStats(std::ostream& out) const;
>
> private:
> ${ident}_profilers m_profilers;
> };
>
> #endif // __${ident}_PROFILE_DUMPER_HH__
> ''')
> code.write(path, "%s_ProfileDumper.hh" % self.ident)
>
> def printProfileDumperCC(self, path):
> code = self.symtab.codeFormatter()
> ident = self.ident
>
> code('''
> // Auto generated C++ code started by $__file__:$__line__
> // ${ident}: ${{self.short}}
>
> #include "mem/protocol/${ident}_ProfileDumper.hh"
>
> ${ident}_ProfileDumper::${ident}_ProfileDumper()
> {
> }
>
> void
> ${ident}_ProfileDumper::registerProfiler(${ident}_Profiler* profiler)
> {
> m_profilers.push_back(profiler);
> }
>
> void
> ${ident}_ProfileDumper::dumpStats(std::ostream& out) const
> {
> out << " --- ${ident} ---\\n";
> out << " - Event Counts -\\n";
> for (${ident}_Event event = ${ident}_Event_FIRST;
> event < ${ident}_Event_NUM;
> ++event) {
> out << (${ident}_Event) event << " [";
> uint64 total = 0;
> for (int i = 0; i < m_profilers.size(); i++) {
> out << m_profilers[i]->getEventCount(event) << " ";
> total += m_profilers[i]->getEventCount(event);
> }
> out << "] " << total << "\\n";
> }
> out << "\\n";
> out << " - Transitions -\\n";
> for (${ident}_State state = ${ident}_State_FIRST;
> state < ${ident}_State_NUM;
> ++state) {
> for (${ident}_Event event = ${ident}_Event_FIRST;
> event < ${ident}_Event_NUM;
> ++event) {
> if (m_profilers[0]->isPossible(state, event)) {
> out << (${ident}_State) state << " "
> << (${ident}_Event) event << " [";
> uint64 total = 0;
> for (int i = 0; i < m_profilers.size(); i++) {
> out << m_profilers[i]->getTransitionCount(state, event) << " ";
> total += m_profilers[i]->getTransitionCount(state, event);
> }
> out << "] " << total << "\\n";
> }
> }
> out << "\\n";
> }
> }
> ''')
> code.write(path, "%s_ProfileDumper.cc" % self.ident)
>
939,940c1042,1043
< #ifndef __${ident}_PROFILER_HH_
< #define __${ident}_PROFILER_HH_
---
> #ifndef __${ident}_PROFILER_HH__
> #define __${ident}_PROFILER_HH__
955c1058,1060
< void dumpStats(std::ostream& out) const;
---
> uint64 getEventCount(${ident}_Event event);
> bool isPossible(${ident}_State state, ${ident}_Event event);
> uint64 getTransitionCount(${ident}_State state, ${ident}_Event event);
1025,1026c1130,1131
< void
< ${ident}_Profiler::dumpStats(std::ostream& out) const
---
> uint64
> ${ident}_Profiler::getEventCount(${ident}_Event event)
1028c1133,1134
< using namespace std;
---
> return m_event_counters[event];
> }
1030,1051c1136,1139
< out << " --- ${ident} " << m_version << " ---" << endl;
< out << " - Event Counts -" << endl;
< for (int event = 0; event < ${ident}_Event_NUM; event++) {
< int count = m_event_counters[event];
< out << (${ident}_Event) event << " " << count << endl;
< }
< out << endl;
< out << " - Transitions -" << endl;
< for (int state = 0; state < ${ident}_State_NUM; state++) {
< for (int event = 0; event < ${ident}_Event_NUM; event++) {
< if (m_possible[state][event]) {
< int count = m_counters[state][event];
< out << (${ident}_State) state << " "
< << (${ident}_Event) event << " " << count;
< if (count == 0) {
< out << " <-- ";
< }
< out << endl;
< }
< }
< out << endl;
< }
---
> bool
> ${ident}_Profiler::isPossible(${ident}_State state, ${ident}_Event event)
> {
> return m_possible[state][event];
1052a1141,1148
>
> uint64
> ${ident}_Profiler::getTransitionCount(${ident}_State state,
> ${ident}_Event event)
> {
> return m_counters[state][event];
> }
>