]> 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 b18f9417b871431ba8cf57a9c6187a3436adf071..532dcaeade453bfa737850f20742910f5f0b1c9e 100644 (file)
@@ -3,29 +3,31 @@
 namespace factor {
 
 void factor_vm::collect_to_tenured() {
-  /* Copy live objects from aging space to tenured space. */
-  collector<tenured_space, to_tenured_policy> collector(this,
-                                                        this->data->tenured,
-                                                        to_tenured_policy(this));
-
+  // 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));
 
-  collector.visitor.visit_all_roots();
+  visitor.visit_all_roots();
   gc_event* event = current_gc->event;
 
   if (event)
     event->reset_timer();
-  collector.trace_cards(data->tenured, card_points_to_aging, 0xff);
-  if (event)
-    event->ended_card_scan(collector.cards_scanned, collector.decks_scanned);
+  visitor.visit_cards(data->tenured, card_points_to_aging, 0xff);
+  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();
-  collector.trace_code_heap_roots(&code->points_to_aging);
-  if (event)
-    event->ended_code_scan(code->points_to_aging.size());
-
-  collector.visitor.visit_mark_stack(&mark_stack);
+  visitor.visit_code_heap_roots(&code->points_to_aging);
+  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();
   data->reset_aging();