diff --git a/basis/tools/memory/memory.factor b/basis/tools/memory/memory.factor index e07de9bbfb..3dc4100c4b 100644 --- a/basis/tools/memory/memory.factor +++ b/basis/tools/memory/memory.factor @@ -197,6 +197,7 @@ SYMBOL: gc-events { "Total time:" [ [ total-time>> ] map-sum nanos>string ] } { "Card scan time:" [ PHASE-CARD-SCAN sum-phase-times ] } { "Code block scan time:" [ PHASE-CODE-SCAN sum-phase-times ] } + { "Marking time:" [ PHASE-MARKING sum-phase-times ] } { "Data heap sweep time:" [ PHASE-DATA-SWEEP sum-phase-times ] } { "Code heap sweep time:" [ PHASE-CODE-SWEEP sum-phase-times ] } { "Data compaction time:" [ PHASE-DATA-COMPACTION sum-phase-times ] } diff --git a/basis/vm/vm.factor b/basis/vm/vm.factor index 4b89fa6f98..0b7dbfe6bc 100644 --- a/basis/vm/vm.factor +++ b/basis/vm/vm.factor @@ -86,6 +86,7 @@ CONSTANT: PHASE-CODE-SCAN 1 CONSTANT: PHASE-DATA-SWEEP 2 CONSTANT: PHASE-CODE-SWEEP 3 CONSTANT: PHASE-DATA-COMPACTION 4 +CONSTANT: PHASE-MARKING 5 ! gc-event should be kept in sync with: ! vm/gc.hpp @@ -100,7 +101,7 @@ STRUCT: gc-event { code-blocks-scanned cell_t } { start-time ulonglong } { total-time cell_t } - { times cell_t[5] } + { times cell_t[6] } { temp-time ulonglong } ; ! gc-info should be kept in sync with: diff --git a/vm/full_collector.cpp b/vm/full_collector.cpp index 3c87cdb6d1..58f352d2f3 100644 --- a/vm/full_collector.cpp +++ b/vm/full_collector.cpp @@ -57,6 +57,10 @@ struct full_collection_copier : no_fixup { }; void factor_vm::collect_mark_impl() { + gc_event* event = current_gc->event; + if (event) + event->reset_timer(); + slot_visitor visitor(this, full_collection_copier(data->tenured, code, &mark_stack)); @@ -75,11 +79,13 @@ void factor_vm::collect_mark_impl() { data->reset_aging(); data->reset_nursery(); code->clear_remembered_set(); + + if (event) + event->ended_phase(PHASE_MARKING); } void factor_vm::collect_sweep_impl() { gc_event* event = current_gc->event; - if (event) event->reset_timer(); data->tenured->sweep(); diff --git a/vm/gc.hpp b/vm/gc.hpp index 0941415580..b28038e802 100644 --- a/vm/gc.hpp +++ b/vm/gc.hpp @@ -19,6 +19,7 @@ enum gc_phase { PHASE_DATA_SWEEP, PHASE_CODE_SWEEP, PHASE_DATA_COMPACTION, + PHASE_MARKING }; struct gc_event { @@ -32,7 +33,7 @@ struct gc_event { cell code_blocks_scanned; uint64_t start_time; cell total_time; - cell times[5]; + cell times[6]; uint64_t temp_time; gc_event(gc_op op, factor_vm* parent);