X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2Fsm%2FSweep.c;h=81a41182b19fc00cf8b178f3472fe7775b1db6d8;hb=eff182c31745b958d627d4feb1e53c09298c6836;hp=9251290c90544eaa9b546aeb993edf94641dac3b;hpb=7e09fadd0a587f7555db5b966af594419800b534;p=ghc-hetmet.git diff --git a/rts/sm/Sweep.c b/rts/sm/Sweep.c index 9251290..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, (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); }