summaryrefslogtreecommitdiff
path: root/libguile/gc-segment.c
diff options
context:
space:
mode:
authorHan-Wen Nienhuys <hanwen@lilypond.org>2002-08-04 14:09:14 +0000
committerHan-Wen Nienhuys <hanwen@lilypond.org>2002-08-04 14:09:14 +0000
commitc2cbcc57687ca716fb3e2166859b7be5880d80e2 (patch)
treea4a1b07da9a3bbded9d64ba5fd8b9a91bcf444ab /libguile/gc-segment.c
parentc7743d027a335eae585335b959e483c5a6c38d36 (diff)
downloadguile-c2cbcc57687ca716fb3e2166859b7be5880d80e2.tar.gz
gc statistic tweaks
Diffstat (limited to 'libguile/gc-segment.c')
-rw-r--r--libguile/gc-segment.c15
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;