summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordonnie@darthik.com <unknown>2009-04-13 01:14:44 +0000
committerdonnie@darthik.com <unknown>2009-04-13 01:14:44 +0000
commit6f045438008234fe58c7629ce1b33e3524fc9006 (patch)
tree2b99561222ef103bbda1ac70ab1275495c69da9d
parentc29305dadcb245bb080f65d946d92d0035243b6c (diff)
downloadhaskell-6f045438008234fe58c7629ce1b33e3524fc9006.tar.gz
Added new EventLog event: Spark to Thread.
-rw-r--r--includes/EventLogFormat.h31
-rw-r--r--rts/Sparks.c7
-rw-r--r--rts/eventlog/EventLog.c15
3 files changed, 37 insertions, 16 deletions
diff --git a/includes/EventLogFormat.h b/includes/EventLogFormat.h
index 7b95ad7cb0..dd9b212837 100644
--- a/includes/EventLogFormat.h
+++ b/includes/EventLogFormat.h
@@ -96,22 +96,23 @@
/*
* Types of event
*/
-#define EVENT_CREATE_THREAD 0 /* (cap, thread) */
-#define EVENT_RUN_THREAD 1 /* (cap, thread) */
-#define EVENT_STOP_THREAD 2 /* (cap, thread, status) */
-#define EVENT_THREAD_RUNNABLE 3 /* (cap, thread) */
-#define EVENT_MIGRATE_THREAD 4 /* (cap, thread, new_cap) */
-#define EVENT_RUN_SPARK 5 /* (cap, thread) */
-#define EVENT_STEAL_SPARK 6 /* (cap, thread, victim_cap) */
-#define EVENT_SHUTDOWN 7 /* (cap) */
-#define EVENT_THREAD_WAKEUP 8 /* (cap, thread, other_cap) */
-#define EVENT_GC_START 9 /* (cap) */
-#define EVENT_GC_END 10 /* (cap) */
-#define EVENT_REQUEST_SEQ_GC 11 /* (cap) */
-#define EVENT_REQUEST_PAR_GC 12 /* (cap) */
-#define EVENT_CREATE_SPARK 13 /* (cap, thread) */
+#define EVENT_CREATE_THREAD 0 /* (cap, thread) */
+#define EVENT_RUN_THREAD 1 /* (cap, thread) */
+#define EVENT_STOP_THREAD 2 /* (cap, thread, status) */
+#define EVENT_THREAD_RUNNABLE 3 /* (cap, thread) */
+#define EVENT_MIGRATE_THREAD 4 /* (cap, thread, new_cap) */
+#define EVENT_RUN_SPARK 5 /* (cap, thread) */
+#define EVENT_STEAL_SPARK 6 /* (cap, thread, victim_cap) */
+#define EVENT_SHUTDOWN 7 /* (cap) */
+#define EVENT_THREAD_WAKEUP 8 /* (cap, thread, other_cap) */
+#define EVENT_GC_START 9 /* (cap) */
+#define EVENT_GC_END 10 /* (cap) */
+#define EVENT_REQUEST_SEQ_GC 11 /* (cap) */
+#define EVENT_REQUEST_PAR_GC 12 /* (cap) */
+#define EVENT_CREATE_SPARK 13 /* (cap, thread) */
+#define EVENT_SPARK_TO_THREAD 14 /* (cap, thread, spark_thread) */
-#define NUM_EVENT_TAGS 14
+#define NUM_EVENT_TAGS 15
/*
* Status values for EVENT_STOP_THREAD
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)