summaryrefslogtreecommitdiff
path: root/rts/Task.c
diff options
context:
space:
mode:
authorSimon Marlow <simonmar@microsoft.com>2006-06-07 12:44:07 +0000
committerSimon Marlow <simonmar@microsoft.com>2006-06-07 12:44:07 +0000
commita91cc8496bf4ea7fe1e3ad9d97836152f3939ffa (patch)
treee7b25c3ce7293d0569da142f7928fde9a9257359 /rts/Task.c
parent90d88088ee8b3697ce68f7b1e07506bc4f33687d (diff)
downloadhaskell-a91cc8496bf4ea7fe1e3ad9d97836152f3939ffa.tar.gz
Gather timing stats for a Task when it completes.
Previously we did this just for workers, now we do it for the main thread and for forkOS threads too.
Diffstat (limited to 'rts/Task.c')
-rw-r--r--rts/Task.c31
1 files changed, 19 insertions, 12 deletions
diff --git a/rts/Task.c b/rts/Task.c
index 7366480094..9923609884 100644
--- a/rts/Task.c
+++ b/rts/Task.c
@@ -99,10 +99,10 @@ newTask (void)
#if defined(THREADED_RTS)
currentUserTime = getThreadCPUTime();
currentElapsedTime = getProcessElapsedTime();
- task->mut_time = 0.0;
- task->mut_etime = 0.0;
- task->gc_time = 0.0;
- task->gc_etime = 0.0;
+ task->mut_time = 0;
+ task->mut_etime = 0;
+ task->gc_time = 0;
+ task->gc_etime = 0;
task->muttimestart = currentUserTime;
task->elapsedtimestart = currentElapsedTime;
#endif
@@ -193,16 +193,11 @@ discardTask (Task *task)
}
void
-taskStop (Task *task)
+taskTimeStamp (Task *task USED_IF_THREADS)
{
#if defined(THREADED_RTS)
- OSThreadId id;
Ticks currentElapsedTime, currentUserTime, elapsedGCTime;
- id = osThreadId();
- ASSERT(task->id == id);
- ASSERT(myTask() == task);
-
currentUserTime = getThreadCPUTime();
currentElapsedTime = getProcessElapsedTime();
@@ -215,10 +210,22 @@ taskStop (Task *task)
task->mut_etime =
currentElapsedTime - task->elapsedtimestart - elapsedGCTime;
- if (task->mut_time < 0.0) { task->mut_time = 0.0; }
- if (task->mut_etime < 0.0) { task->mut_etime = 0.0; }
+ if (task->mut_time < 0) { task->mut_time = 0; }
+ if (task->mut_etime < 0) { task->mut_etime = 0; }
+#endif
+}
+
+void
+workerTaskStop (Task *task)
+{
+#if defined(THREADED_RTS)
+ OSThreadId id;
+ id = osThreadId();
+ ASSERT(task->id == id);
+ ASSERT(myTask() == task);
#endif
+ taskTimeStamp(task);
task->stopped = rtsTrue;
tasksRunning--;
}