diff options
author | donnie@darthik.com <unknown> | 2009-04-13 01:14:44 +0000 |
---|---|---|
committer | donnie@darthik.com <unknown> | 2009-04-13 01:14:44 +0000 |
commit | 6f045438008234fe58c7629ce1b33e3524fc9006 (patch) | |
tree | 2b99561222ef103bbda1ac70ab1275495c69da9d /rts | |
parent | c29305dadcb245bb080f65d946d92d0035243b6c (diff) | |
download | haskell-6f045438008234fe58c7629ce1b33e3524fc9006.tar.gz |
Added new EventLog event: Spark to Thread.
Diffstat (limited to 'rts')
-rw-r--r-- | rts/Sparks.c | 7 | ||||
-rw-r--r-- | rts/eventlog/EventLog.c | 15 |
2 files changed, 21 insertions, 1 deletions
diff --git a/rts/Sparks.c b/rts/Sparks.c index aed75e52ab..75464d925b 100644 --- a/rts/Sparks.c +++ b/rts/Sparks.c @@ -58,6 +58,13 @@ createSparkThread (Capability *cap) tso = createIOThread (cap, RtsFlags.GcFlags.initialStkSize, &base_GHCziConc_runSparks_closure); + if (cap->r.rCurrentTSO != NULL) + // Capability in a bound thread? + postEvent(cap, EVENT_SPARK_TO_THREAD, cap->r.rCurrentTSO->id, tso->id); + else + // Capability in a worker thread? + postEvent(cap, EVENT_SPARK_TO_THREAD, 0, tso->id); + appendToRunQueue(cap,tso); } diff --git a/rts/eventlog/EventLog.c b/rts/eventlog/EventLog.c index 141b8852cf..d44460a83d 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. @@ -188,6 +189,11 @@ initEventLogging(void) 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) @@ -312,6 +318,13 @@ postEvent_(Capability *cap, EventTypeNum tag, StgThreadID thread, StgWord64 othe break; } + case EVENT_SPARK_TO_THREAD: // (cap, thread, spark_thread) + { + postThreadID(eb,thread); + postThreadID(eb,other /* spark_thread */); + 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) |