Better gc stats

This commit is contained in:
2026-01-22 07:51:22 -08:00
parent 6cc85491cf
commit eca8ae3d3e
2 changed files with 6 additions and 4 deletions

View File

@ -289,7 +289,9 @@ static void mark_object_recurse(LispGCStats *restrict stats, LispVal *val) {
while (!OBJECT_PROCESS_STACK_EMPTY_P(&stack)) {
LispVal *cur = object_process_stack_pop(&stack);
if (!OBJECT_GC_SET_P(cur, GC_BLACK)) {
++stats->objects_searched;
if (!OBJECT_STATIC_P(val)) {
++stats->non_statics_kept;
}
gc_move_to_set(cur, GC_BLACK);
object_process_stack_push_held_objects(&stack, cur);
}
@ -370,7 +372,7 @@ void lisp_gc_now(LispGCStats *restrict stats) {
stats = &backup_stats;
}
stats->objects_cleaned = 0;
stats->objects_searched = 0;
stats->non_statics_kept = 0;
struct timespec start_time;
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &start_time);
mark_statics(stats);
@ -388,7 +390,7 @@ void lisp_gc_now(LispGCStats *restrict stats) {
}
void debug_print_gc_stats(FILE *stream, const LispGCStats *stats) {
fprintf(stream, "Objects Searched: %zu\n", stats->objects_searched);
fprintf(stream, "Non-Statics Kept: %zu\n", stats->non_statics_kept);
fprintf(stream, "Objects Cleaned: %zu\n", stats->objects_cleaned);
double time = stats->ellapsed_time.tv_sec * 1000
+ (stats->ellapsed_time.tv_nsec / 1000000.0);

View File

@ -41,7 +41,7 @@ extern struct timespec total_gc_time;
extern size_t total_gc_count;
typedef struct {
size_t objects_searched;
size_t non_statics_kept;
size_t objects_cleaned;
struct timespec ellapsed_time;
} LispGCStats;