diff options
author | Han-Wen Nienhuys <hanwen@lilypond.org> | 2002-08-04 14:09:14 +0000 |
---|---|---|
committer | Han-Wen Nienhuys <hanwen@lilypond.org> | 2002-08-04 14:09:14 +0000 |
commit | c2cbcc57687ca716fb3e2166859b7be5880d80e2 (patch) | |
tree | a4a1b07da9a3bbded9d64ba5fd8b9a91bcf444ab /libguile/gc-segment.c | |
parent | c7743d027a335eae585335b959e483c5a6c38d36 (diff) | |
download | guile-c2cbcc57687ca716fb3e2166859b7be5880d80e2.tar.gz |
gc statistic tweaks
Diffstat (limited to 'libguile/gc-segment.c')
-rw-r--r-- | libguile/gc-segment.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/libguile/gc-segment.c b/libguile/gc-segment.c index a3859df7b..d3a48f2ab 100644 --- a/libguile/gc-segment.c +++ b/libguile/gc-segment.c @@ -195,7 +195,12 @@ scm_i_sweep_some_cards (scm_t_heap_segment *seg) scm_gc_cells_swept += cards_swept * (SCM_GC_CARD_N_CELLS - SCM_GC_CARD_N_HEADER_CELLS); scm_gc_cells_collected += collected * seg->span; + + if (!seg->first_time) + scm_cells_allocated -= collected * seg->span; + seg->freelist->collected += collected * seg->span; + if(next_free == seg->bounds[1]) { @@ -212,8 +217,10 @@ scm_i_sweep_some_cards (scm_t_heap_segment *seg) statistics, it just frees the memory pointed to by to-be-swept cells. - Implementation is slightly ugh, and how do we handle the swept_cells - statistic? + Implementation is slightly ugh. + + FIXME: if you do scm_i_sweep_segment(), and then allocate from this + segment again, the statistics are off. */ void scm_i_sweep_segment (scm_t_heap_segment * seg) @@ -221,11 +228,13 @@ scm_i_sweep_segment (scm_t_heap_segment * seg) scm_t_cell * p = seg->next_free_card; int yield = scm_gc_cells_collected; int coll = seg->freelist->collected; - + int alloc = scm_cells_allocated ; + while (scm_i_sweep_some_cards (seg) != SCM_EOL) ; scm_gc_cells_collected = yield; + scm_cells_allocated = alloc; seg->freelist->collected = coll; seg->next_free_card =p; |