Ruby: Order profilers based on version
authorJoel Hestness <hestness@cs.wisc.edu>
Tue, 9 Apr 2013 21:25:29 +0000 (16:25 -0500)
committerJoel Hestness <hestness@cs.wisc.edu>
Tue, 9 Apr 2013 21:25:29 +0000 (16:25 -0500)
When Ruby stats are printed for events and transitions, they include stats
for all of the controllers of the same type, but they are not necessarily
printed in order of the controller ID "version", because of the way the
profilers were added to the profiler vector. This patch fixes the push order
problem so that the stats are printed in ascending order 0->(# controllers),
so statistics parsers may correctly assume the controller to which the stats
belong.

src/mem/slicc/symbols/StateMachine.py

index af1435ae852c3a09ba513f71f3a0ad1b3de235e6..f650f580920c4dd4d5e2da7cc9552bb1a003b97a 100644 (file)
@@ -1346,7 +1346,9 @@ ${ident}_ProfileDumper::${ident}_ProfileDumper()
 void
 ${ident}_ProfileDumper::registerProfiler(${ident}_Profiler* profiler)
 {
-    m_profilers.push_back(profiler);
+    if (profiler->getVersion() >= m_profilers.size())
+        m_profilers.resize(profiler->getVersion() + 1);
+    m_profilers[profiler->getVersion()] = profiler;
 }
 
 void
@@ -1413,6 +1415,7 @@ class ${ident}_Profiler
   public:
     ${ident}_Profiler();
     void setVersion(int version);
+    int getVersion();
     void countTransition(${ident}_State state, ${ident}_Event event);
     void possibleTransition(${ident}_State state, ${ident}_Event event);
     uint64 getEventCount(${ident}_Event event);
@@ -1462,6 +1465,12 @@ ${ident}_Profiler::setVersion(int version)
     m_version = version;
 }
 
+int
+${ident}_Profiler::getVersion()
+{
+    return m_version;
+}
+
 void
 ${ident}_Profiler::clearStats()
 {