X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2Fsm%2FSweep.c;h=81a41182b19fc00cf8b178f3472fe7775b1db6d8;hb=26f4bfc82f2b2359259578e9c54d476fc2de650f;hp=873944ce24e1a4e399664aad2a92c8cde1b90078;hpb=301afae5ce9fd9fde20da4cb12b4b19d98ec53da;p=ghc-hetmet.git diff --git a/rts/sm/Sweep.c b/rts/sm/Sweep.c index 873944c..81a4118 100644 --- a/rts/sm/Sweep.c +++ b/rts/sm/Sweep.c @@ -11,26 +11,28 @@ * * ---------------------------------------------------------------------------*/ +#include "PosixSource.h" #include "Rts.h" + +#include "BlockAlloc.h" #include "Sweep.h" -#include "Block.h" #include "Trace.h" void -sweep(step *step) +sweep(generation *gen) { bdescr *bd, *prev, *next; nat i; nat freed, resid, fragd, blocks, live; - ASSERT(countBlocks(step->old_blocks) == step->n_old_blocks); + ASSERT(countBlocks(gen->old_blocks) == gen->n_old_blocks); live = 0; // estimate of live data in this gen freed = 0; fragd = 0; blocks = 0; prev = NULL; - for (bd = step->old_blocks; bd != NULL; bd = next) + for (bd = gen->old_blocks; bd != NULL; bd = next) { next = bd->link; @@ -50,9 +52,9 @@ sweep(step *step) if (resid == 0) { freed++; - step->n_old_blocks--; + gen->n_old_blocks--; if (prev == NULL) { - step->old_blocks = next; + gen->old_blocks = next; } else { prev->link = next; } @@ -65,18 +67,20 @@ sweep(step *step) fragd++; bd->flags |= BF_FRAGMENTED; } + + bd->flags |= BF_SWEPT; } } - step->live_estimate = live; + gen->live_estimate = live; - trace(DEBUG_gc|TRACE_gc, "sweeping: %d blocks, %d were copied, %d freed (%d%%), %d are fragmented, live estimate: %ld%%", - step->n_old_blocks + freed, - step->n_old_blocks - blocks + freed, + debugTrace(DEBUG_gc, "sweeping: %d blocks, %d were copied, %d freed (%d%%), %d are fragmented, live estimate: %ld%%", + gen->n_old_blocks + freed, + gen->n_old_blocks - blocks + freed, freed, blocks == 0 ? 0 : (freed * 100) / blocks, fragd, - (blocks - freed) == 0 ? 0 : ((live / BLOCK_SIZE_W) * 100) / (blocks - freed)); + (unsigned long)((blocks - freed) == 0 ? 0 : ((live / BLOCK_SIZE_W) * 100) / (blocks - freed))); - ASSERT(countBlocks(step->old_blocks) == step->n_old_blocks); + ASSERT(countBlocks(gen->old_blocks) == gen->n_old_blocks); }