X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2FTask.c;fp=rts%2FTask.c;h=e77a030f39ba565eb89a0c8132ede83e6e923612;hb=1fb38442d3a55ac92795aa6c5ed4df82011df724;hp=a5de804418ab2eeefbfc16bcad39e3fbc4a8c540;hpb=7bf5bf37e7f4f140c883016e9da50106535d2a94;p=ghc-hetmet.git diff --git a/rts/Task.c b/rts/Task.c index a5de804..e77a030 100644 --- a/rts/Task.c +++ b/rts/Task.c @@ -318,25 +318,30 @@ void taskTimeStamp (Task *task USED_IF_THREADS) { #if defined(THREADED_RTS) - Ticks currentElapsedTime, currentUserTime, elapsedGCTime; + Ticks currentElapsedTime, currentUserTime; currentUserTime = getThreadCPUTime(); currentElapsedTime = getProcessElapsedTime(); - // XXX this is wrong; we want elapsed GC time since the - // Task started. - elapsedGCTime = stat_getElapsedGCTime(); - - task->mut_time = + task->mut_time = currentUserTime - task->muttimestart - task->gc_time; task->mut_etime = - currentElapsedTime - task->elapsedtimestart - elapsedGCTime; + currentElapsedTime - task->elapsedtimestart - task->gc_etime; + if (task->gc_time < 0) { task->gc_time = 0; } + if (task->gc_etime < 0) { task->gc_etime = 0; } if (task->mut_time < 0) { task->mut_time = 0; } if (task->mut_etime < 0) { task->mut_etime = 0; } #endif } +void +taskDoneGC (Task *task, Ticks cpu_time, Ticks elapsed_time) +{ + task->gc_time += cpu_time; + task->gc_etime += elapsed_time; +} + #if defined(THREADED_RTS) void