From 37ddcaf60653a77ff8c77bd271535ff832aa22ba Mon Sep 17 00:00:00 2001 From: Mikael Djurfeldt Date: Mon, 20 Mar 2000 14:57:04 +0000 Subject: [PATCH] * gc.c (scm_gc_stats): Inserted explanation of local_scm_mtrigger etc. (scm_gc_yield_1): New variable: Holds previous yield. Used to make better judgements. --- libguile/gc.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/libguile/gc.c b/libguile/gc.c index 292b6f04c..ba858d29e 100644 --- a/libguile/gc.c +++ b/libguile/gc.c @@ -42,6 +42,8 @@ /* Software engineering face-lift by Greg J. Badros, 11-Dec-1999, gjb@cs.washington.edu, http://www.cs.washington.edu/homes/gjb */ +/* #define DEBUGINFO */ + #include #include "_scm.h" @@ -255,6 +257,7 @@ long scm_mallocated = 0; unsigned long scm_gc_cells_collected; #ifdef GUILE_NEW_GC_SCHEME unsigned long scm_gc_yield; +static unsigned long scm_gc_yield_1 = 0; /* previous GC yield */ #endif unsigned long scm_gc_malloc_collected; unsigned long scm_gc_ports_collected; @@ -733,6 +736,7 @@ scm_gc_start (const char *what) scm_gc_rt = SCM_INUM (scm_get_internal_run_time ()); scm_gc_cells_collected = 0; #ifdef GUILE_NEW_GC_SCHEME + scm_gc_yield_1 = scm_gc_yield; scm_gc_yield = (scm_cells_allocated + master_cells_allocated (&scm_master_freelist) + master_cells_allocated (&scm_master_freelist2)); @@ -800,8 +804,12 @@ adjust_gc_trigger (scm_freelist_t *freelist) */ if (freelist->gc_trigger_fraction) { + /* Pick largest of last two yields. */ + int yield = (scm_gc_yield_1 > scm_gc_yield + ? scm_gc_yield_1 + : scm_gc_yield); int delta = ((SCM_HEAP_SIZE * freelist->gc_trigger_fraction / 100) - - scm_gc_yield); + - yield); #ifdef DEBUGINFO fprintf (stderr, " after GC = %d, delta = %d\n", scm_cells_allocated, @@ -832,6 +840,12 @@ scm_gc_for_newcell (scm_freelist_t *master, SCM *freelist) } else { +#ifdef DEBUGINFO + fprintf (stderr, "allocated = %d, ", + scm_cells_allocated + + master_cells_allocated (&scm_master_freelist) + + master_cells_allocated (&scm_master_freelist2)); +#endif scm_igc ("cells"); adjust_gc_trigger (master); }