From 742117e7a3855efe98ed1ce96b5f71fa45a8f172 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Thu, 11 Jun 2020 16:02:27 +0900 Subject: Reorganize gray mark functions in GC. --- src/gc.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/gc.c b/src/gc.c index da04d7349..b2d782073 100644 --- a/src/gc.c +++ b/src/gc.c @@ -960,13 +960,12 @@ root_scan_phase(mrb_state *mrb, mrb_gc *gc) } } +/* rough estimation of number of GC marks (non recursive) */ static size_t -gc_gray_mark(mrb_state *mrb, mrb_gc *gc, struct RBasic *obj) +gc_gray_counts(mrb_state *mrb, mrb_gc *gc, struct RBasic *obj) { size_t children = 0; - gc_mark_children(mrb, gc, obj); - switch (obj->tt) { case MRB_TT_ICLASS: children++; @@ -1064,7 +1063,9 @@ incremental_marking_phase(mrb_state *mrb, mrb_gc *gc, size_t limit) size_t tried_marks = 0; while (gc->gray_list && tried_marks < limit) { - tried_marks += gc_gray_mark(mrb, gc, gc->gray_list); + struct RBasic *obj = gc->gray_list; + gc_mark_children(mrb, gc, obj); + tried_marks += gc_gray_counts(mrb, gc, obj); } return tried_marks; -- cgit v1.2.3