diff options
author | Simon Marlow <simonmar@microsoft.com> | 2006-06-07 12:44:07 +0000 |
---|---|---|
committer | Simon Marlow <simonmar@microsoft.com> | 2006-06-07 12:44:07 +0000 |
commit | a91cc8496bf4ea7fe1e3ad9d97836152f3939ffa (patch) | |
tree | e7b25c3ce7293d0569da142f7928fde9a9257359 /rts/Task.c | |
parent | 90d88088ee8b3697ce68f7b1e07506bc4f33687d (diff) | |
download | haskell-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.c | 31 |
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--; } |