X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2Feventlog%2FEventLog.c;h=d44460a83d55ae13fc4c6f338a6fe6ac18946209;hb=9211ec0183bbe923ec6c5997fa695e5f5a3eefab;hp=98ccaa578b1a62d357194140a18ffa0aa495951c;hpb=0292156b69dbbf7ee2b494ba26ca1b7f28182ab6;p=ghc-hetmet.git diff --git a/rts/eventlog/EventLog.c b/rts/eventlog/EventLog.c index 98ccaa5..d44460a 100644 --- a/rts/eventlog/EventLog.c +++ b/rts/eventlog/EventLog.c @@ -49,7 +49,8 @@ char *EventDesc[] = { "Finished GC", "Request sequential GC", "Request parallel GC", - "Create spark" + "Create spark", + "Spark to thread" }; // Event type. @@ -111,6 +112,12 @@ static inline void postEventTypeID(EventsBuf *eb, StgWord16 etID) static inline void postTimestamp(EventsBuf *eb, Timestamp t) { postWord64(eb,t); } +static inline void postThreadID(EventsBuf *eb, ThreadID id) +{ postWord32(eb,id); } + +static inline void postCapNo(EventsBuf *eb, CapNo no) +{ postWord16(eb,no); } + static inline void postInt8(EventsBuf *eb, StgInt8 i) { postWord8(eb, (StgWord8)i); } @@ -179,20 +186,24 @@ initEventLogging(void) case EVENT_THREAD_RUNNABLE: // (cap, thread) case EVENT_CREATE_SPARK: // (cap, thread) case EVENT_RUN_SPARK: // (cap, thread) - eventTypes[t].size = sizeof(CapabilityNum) + sizeof(ThreadID); + eventTypes[t].size = sizeof(CapNo) + sizeof(ThreadID); + break; + + case EVENT_SPARK_TO_THREAD: // (cap, thread, spark_thread) + eventTypes[t].size = + sizeof(CapNo) + sizeof(ThreadID) + sizeof(ThreadID); break; case EVENT_MIGRATE_THREAD: // (cap, thread, new_cap) case EVENT_STEAL_SPARK: // (cap, thread, victim_cap) case EVENT_THREAD_WAKEUP: // (cap, thread, other_cap) eventTypes[t].size = - sizeof(CapabilityNum) + sizeof(ThreadID) + - sizeof(CapabilityNum); + sizeof(CapNo) + sizeof(ThreadID) + sizeof(CapNo); break; case EVENT_STOP_THREAD: // (cap, thread, status) eventTypes[t].size = - sizeof(CapabilityNum) + sizeof(ThreadID) + sizeof(StgWord16); + sizeof(CapNo) + sizeof(ThreadID) + sizeof(StgWord16); break; case EVENT_SHUTDOWN: // (cap) @@ -200,7 +211,7 @@ initEventLogging(void) case EVENT_REQUEST_PAR_GC: // (cap) case EVENT_GC_START: // (cap) case EVENT_GC_END: // (cap) - eventTypes[t].size = sizeof(CapabilityNum); + eventTypes[t].size = sizeof(CapNo); break; } @@ -279,7 +290,7 @@ freeEventLogging(void) * If the buffer is full, prints out the buffer and clears it. */ void -postEvent_(Capability *cap, EventTypeNum tag, StgThreadID thread, nat other_cap) +postEvent_(Capability *cap, EventTypeNum tag, StgThreadID thread, StgWord64 other) { EventsBuf *eb; @@ -294,7 +305,7 @@ postEvent_(Capability *cap, EventTypeNum tag, StgThreadID thread, nat other_cap) postEventTypeNum(eb, tag); postTimestamp(eb, stat_getElapsedTime() * (1000000000LL/TICKS_PER_SECOND)); - postWord16(eb, cap->no); + postCapNo(eb, cap->no); switch (tag) { case EVENT_CREATE_THREAD: // (cap, thread) @@ -303,7 +314,14 @@ postEvent_(Capability *cap, EventTypeNum tag, StgThreadID thread, nat other_cap) case EVENT_CREATE_SPARK: // (cap, thread) case EVENT_RUN_SPARK: // (cap, thread) { - postWord64(eb,thread); + postThreadID(eb,thread); + break; + } + + case EVENT_SPARK_TO_THREAD: // (cap, thread, spark_thread) + { + postThreadID(eb,thread); + postThreadID(eb,other /* spark_thread */); break; } @@ -311,15 +329,15 @@ postEvent_(Capability *cap, EventTypeNum tag, StgThreadID thread, nat other_cap) case EVENT_STEAL_SPARK: // (cap, thread, victim_cap) case EVENT_THREAD_WAKEUP: // (cap, thread, other_cap) { - postWord64(eb,thread); - postWord16(eb,other_cap); + postThreadID(eb,thread); + postCapNo(eb,other /* new_cap | victim_cap | other_cap */); break; } case EVENT_STOP_THREAD: // (cap, thread, status) { - postWord64(eb,thread); - postWord16(eb,other_cap); + postThreadID(eb,thread); + postWord16(eb,other /* status */); break; }