X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2Fsm%2FSweep.c;h=81a41182b19fc00cf8b178f3472fe7775b1db6d8;hb=7d9eb2e45b4a9ff4cb053b1ec37602be88528b62;hp=444c3d51116487f56ed33757c655dc46f2dcbc83;hpb=8b18faef8aeaf40150c208272a2fc117611e8ae8;p=ghc-hetmet.git diff --git a/rts/sm/Sweep.c b/rts/sm/Sweep.c index 444c3d5..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; debugTrace(DEBUG_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, + 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); }