Better gc stats
This commit is contained in:
8
src/gc.c
8
src/gc.c
@ -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);
|
||||
|
||||
Reference in New Issue
Block a user