*
* ---------------------------------------------------------------------------*/
+#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;
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;
}
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);
}