]> gitweb.factorcode.org Git - factor.git/blobdiff - vm/to_tenured_collector.cpp
audio.engine.test: cleanup using
[factor.git] / vm / to_tenured_collector.cpp
index 42883292815e15f09a3bffb8b0584316628265f8..532dcaeade453bfa737850f20742910f5f0b1c9e 100644 (file)
@@ -2,33 +2,32 @@
 
 namespace factor {
 
-to_tenured_collector::to_tenured_collector(factor_vm* parent)
-    : collector<tenured_space, to_tenured_policy>(parent,
-                                                  parent->data->tenured,
-                                                  to_tenured_policy(parent)) {}
-
 void factor_vm::collect_to_tenured() {
-  /* Copy live objects from aging space to tenured space. */
-  to_tenured_collector collector(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->started_card_scan();
-  collector.trace_cards(data->tenured, card_points_to_aging, full_unmarker());
-  if (event)
-    event->ended_card_scan(collector.cards_scanned, collector.decks_scanned);
+    event->reset_timer();
+  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->started_code_scan();
-  collector.trace_code_heap_roots(&code->points_to_aging);
-  if (event)
-    event->ended_code_scan(collector.code_blocks_scanned);
-
-  collector.visitor.visit_mark_stack(&mark_stack);
+    event->reset_timer();
+  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();