Use an instance counter to give Events repeatable IDs

in debugging mode (especially valuable for tracediff).

--HG--
extra : convert_revision : 227434a06b5271a8300f2f6861bd06c4ac19e6c4
This commit is contained in:
Steve Reinhardt
2007-02-05 22:05:00 -08:00
parent 17cbfe55fd
commit f5a803f56e
2 changed files with 21 additions and 0 deletions

View File

@@ -53,6 +53,8 @@ using namespace std;
//
EventQueue mainEventQueue("MainEventQueue");
Counter Event::instanceCounter = 0;
void
EventQueue::insert(Event *event)
{

View 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