projects
/
ghc-hetmet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
update submodule pointers
[ghc-hetmet.git]
/
rts
/
sm
/
Sweep.c
diff --git
a/rts/sm/Sweep.c
b/rts/sm/Sweep.c
index
444c3d5
..
81a4118
100644
(file)
--- a/
rts/sm/Sweep.c
+++ b/
rts/sm/Sweep.c
@@
-11,26
+11,28
@@
*
* ---------------------------------------------------------------------------*/
*
* ---------------------------------------------------------------------------*/
+#include "PosixSource.h"
#include "Rts.h"
#include "Rts.h"
+
+#include "BlockAlloc.h"
#include "Sweep.h"
#include "Sweep.h"
-#include "Block.h"
#include "Trace.h"
void
#include "Trace.h"
void
-sweep(step *step)
+sweep(generation *gen)
{
bdescr *bd, *prev, *next;
nat i;
nat freed, resid, fragd, blocks, live;
{
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;
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;
{
next = bd->link;
@@
-50,9
+52,9
@@
sweep(step *step)
if (resid == 0)
{
freed++;
if (resid == 0)
{
freed++;
- step->n_old_blocks--;
+ gen->n_old_blocks--;
if (prev == NULL) {
if (prev == NULL) {
- step->old_blocks = next;
+ gen->old_blocks = next;
} else {
prev->link = next;
}
} else {
prev->link = next;
}
@@
-65,18
+67,20
@@
sweep(step *step)
fragd++;
bd->flags |= BF_FRAGMENTED;
}
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%%",
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)));
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);
}
}