]> gitweb.factorcode.org Git - factor.git/blobdiff - vm/to_tenured_collector.cpp
webapps.wiki: adding search bar
[factor.git] / vm / to_tenured_collector.cpp
index 6490984c6e43a2c978b5a984fa03c1a8dd2297d3..532dcaeade453bfa737850f20742910f5f0b1c9e 100644 (file)
@@ -3,13 +3,10 @@
 namespace factor {
 
 void factor_vm::collect_to_tenured() {
-  /* Copy live objects from aging space to tenured space. */
-  gc_workhorse<tenured_space, to_tenured_policy>
-      workhorse(this, data->tenured, to_tenured_policy(this));
-  slot_visitor<gc_workhorse<tenured_space, to_tenured_policy>>
-      visitor(this, workhorse);
-
+  // Copy live objects from aging space to tenured space.
   mark_stack.clear();
+  slot_visitor<from_tenured_refs_copier>
+      visitor(this, from_tenured_refs_copier(data->tenured, &mark_stack));
 
   visitor.visit_all_roots();
   gc_event* event = current_gc->event;
@@ -17,15 +14,19 @@ void factor_vm::collect_to_tenured() {
   if (event)
     event->reset_timer();
   visitor.visit_cards(data->tenured, card_points_to_aging, 0xff);
-  if (event)
-    event->ended_card_scan(visitor.cards_scanned, visitor.decks_scanned);
+  if (event) {
+    event->ended_phase(PHASE_CARD_SCAN);
+    event->cards_scanned += visitor.cards_scanned;
+    event->decks_scanned += visitor.decks_scanned;
+  }
 
   if (event)
     event->reset_timer();
   visitor.visit_code_heap_roots(&code->points_to_aging);
-  if (event)
-    event->ended_code_scan(code->points_to_aging.size());
-
+  if (event) {
+    event->ended_phase(PHASE_CODE_SCAN);
+    event->code_blocks_scanned += code->points_to_aging.size();
+  }
   visitor.visit_mark_stack(&mark_stack);
 
   data->reset_nursery();