From: Steve Reinhardt Date: Tue, 6 Feb 2007 06:05:00 +0000 (-0800) Subject: Use an instance counter to give Events repeatable IDs X-Git-Tag: m5_2.0_beta3~223 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=f5a803f56e6057a9d908c47aa05fbbfb98a575b5;p=gem5.git Use an instance counter to give Events repeatable IDs in debugging mode (especially valuable for tracediff). --HG-- extra : convert_revision : 227434a06b5271a8300f2f6861bd06c4ac19e6c4 --- diff --git a/src/sim/eventq.cc b/src/sim/eventq.cc index 6ae838897..de3050d8c 100644 --- a/src/sim/eventq.cc +++ b/src/sim/eventq.cc @@ -53,6 +53,8 @@ using namespace std; // EventQueue mainEventQueue("MainEventQueue"); +Counter Event::instanceCounter = 0; + void EventQueue::insert(Event *event) { diff --git a/src/sim/eventq.hh b/src/sim/eventq.hh index fa65b08af..1aeb26e25 100644 --- a/src/sim/eventq.hh +++ b/src/sim/eventq.hh @@ -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