{ "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 ] }
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
{ 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:
};
void factor_vm::collect_mark_impl() {
+ gc_event* event = current_gc->event;
+ if (event)
+ event->reset_timer();
+
slot_visitor<full_collection_copier>
visitor(this, full_collection_copier(data->tenured, code, &mark_stack));
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();
PHASE_DATA_SWEEP,
PHASE_CODE_SWEEP,
PHASE_DATA_COMPACTION,
+ PHASE_MARKING
};
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);