X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=rts%2Fsm%2FBlockAlloc.c;h=898624a2670d70e5bb97a77839a151e945ff331b;hp=d30d29b2f548837e5b26e30e64a8b07673a7f9dd;hb=f6013eedb4dea47afac8167dfa08561ae90454db;hpb=51741bdea146fbc65ad3509c8f97a5ebff1433de diff --git a/rts/sm/BlockAlloc.c b/rts/sm/BlockAlloc.c index d30d29b..898624a 100644 --- a/rts/sm/BlockAlloc.c +++ b/rts/sm/BlockAlloc.c @@ -629,6 +629,40 @@ initMBlock(void *mblock) } /* ----------------------------------------------------------------------------- + Stats / metrics + -------------------------------------------------------------------------- */ + +nat +countBlocks(bdescr *bd) +{ + nat n; + for (n=0; bd != NULL; bd=bd->link) { + n += bd->blocks; + } + return n; +} + +// (*1) Just like countBlocks, except that we adjust the count for a +// megablock group so that it doesn't include the extra few blocks +// that would be taken up by block descriptors in the second and +// subsequent megablock. This is so we can tally the count with the +// number of blocks allocated in the system, for memInventory(). +nat +countAllocdBlocks(bdescr *bd) +{ + nat n; + for (n=0; bd != NULL; bd=bd->link) { + n += bd->blocks; + // hack for megablock groups: see (*1) above + if (bd->blocks > BLOCKS_PER_MBLOCK) { + n -= (MBLOCK_SIZE / BLOCK_SIZE - BLOCKS_PER_MBLOCK) + * (bd->blocks/(MBLOCK_SIZE/BLOCK_SIZE)); + } + } + return n; +} + +/* ----------------------------------------------------------------------------- Debugging -------------------------------------------------------------------------- */