Use an instance counter to give Events repeatable IDs
authorSteve Reinhardt <stever@eecs.umich.edu>
Tue, 6 Feb 2007 06:05:00 +0000 (22:05 -0800)
committerSteve Reinhardt <stever@eecs.umich.edu>
Tue, 6 Feb 2007 06:05:00 +0000 (22:05 -0800)
in debugging mode (especially valuable for tracediff).

--HG--
extra : convert_revision : 227434a06b5271a8300f2f6861bd06c4ac19e6c4

src/sim/eventq.cc
src/sim/eventq.hh

index 6ae838897b46f58e5054de7e061192d8416a3d5a..de3050d8cb74511400e9a81a4373505ae9c79b28 100644 (file)
@@ -53,6 +53,8 @@ using namespace std;
 //
 EventQueue mainEventQueue("MainEventQueue");
 
+Counter Event::instanceCounter = 0;
+
 void
 EventQueue::insert(Event *event)
 {
index fa65b08afd9e5c978f8741c3f4dd8e9af8b7a806..1aeb26e25ec0f8d9cc54747d5e209b683cb7bb89 100644 (file)
@@ -75,6 +75,18 @@ class Event : public Serializable, public FastAlloc
     friend class EventQueue;
 
   private:
+
+#ifndef NDEBUG
+    /// Global counter to generate unique IDs for Event instances
+    static Counter instanceCounter;
+
+    /// This event's unique ID.  We can also use pointer values for
+    /// this but they're not consistent across runs making debugging
+    /// more difficult.  Thus we use a global counter value when
+    /// debugging.
+    Counter instanceId;
+#endif // NDEBUG
+
     /// queue to which this event belongs (though it may or may not be
     /// scheduled on this queue yet)
     EventQueue *queue;
@@ -173,12 +185,19 @@ class Event : public Serializable, public FastAlloc
 #endif
           annotated_value(0)
     {
+#ifndef NDEBUG
+        instanceId = ++instanceCounter;
+#endif
     }
 
     ~Event() {}
 
     virtual const std::string name() const {
+#ifndef NDEBUG
+        return csprintf("Event_%d", instanceId);
+#else
         return csprintf("Event_%x", (uintptr_t)this);
+#endif
     }
 
     /// Determine if the current event is scheduled