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)) {
|
while (!OBJECT_PROCESS_STACK_EMPTY_P(&stack)) {
|
||||||
LispVal *cur = object_process_stack_pop(&stack);
|
LispVal *cur = object_process_stack_pop(&stack);
|
||||||
if (!OBJECT_GC_SET_P(cur, GC_BLACK)) {
|
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);
|
gc_move_to_set(cur, GC_BLACK);
|
||||||
object_process_stack_push_held_objects(&stack, cur);
|
object_process_stack_push_held_objects(&stack, cur);
|
||||||
}
|
}
|
||||||
@ -370,7 +372,7 @@ void lisp_gc_now(LispGCStats *restrict stats) {
|
|||||||
stats = &backup_stats;
|
stats = &backup_stats;
|
||||||
}
|
}
|
||||||
stats->objects_cleaned = 0;
|
stats->objects_cleaned = 0;
|
||||||
stats->objects_searched = 0;
|
stats->non_statics_kept = 0;
|
||||||
struct timespec start_time;
|
struct timespec start_time;
|
||||||
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &start_time);
|
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &start_time);
|
||||||
mark_statics(stats);
|
mark_statics(stats);
|
||||||
@ -388,7 +390,7 @@ void lisp_gc_now(LispGCStats *restrict stats) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void debug_print_gc_stats(FILE *stream, const LispGCStats *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);
|
fprintf(stream, "Objects Cleaned: %zu\n", stats->objects_cleaned);
|
||||||
double time = stats->ellapsed_time.tv_sec * 1000
|
double time = stats->ellapsed_time.tv_sec * 1000
|
||||||
+ (stats->ellapsed_time.tv_nsec / 1000000.0);
|
+ (stats->ellapsed_time.tv_nsec / 1000000.0);
|
||||||
|
|||||||
2
src/gc.h
2
src/gc.h
@ -41,7 +41,7 @@ extern struct timespec total_gc_time;
|
|||||||
extern size_t total_gc_count;
|
extern size_t total_gc_count;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
size_t objects_searched;
|
size_t non_statics_kept;
|
||||||
size_t objects_cleaned;
|
size_t objects_cleaned;
|
||||||
struct timespec ellapsed_time;
|
struct timespec ellapsed_time;
|
||||||
} LispGCStats;
|
} LispGCStats;
|
||||||
|
|||||||
Reference in New Issue
Block a user