]> gitweb.factorcode.org Git - factor.git/blobdiff - vm/to_tenured_collector.cpp
io.streams.256color: faster by caching styles
[factor.git] / vm / to_tenured_collector.cpp
index d4b2b51d655b234936b93e47224b4eb4df5e6aad..532dcaeade453bfa737850f20742910f5f0b1c9e 100644 (file)
@@ -3,31 +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,
-                                                        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.visitor.visit_cards(data->tenured, card_points_to_aging, 0xff);
+  visitor.visit_cards(data->tenured, card_points_to_aging, 0xff);
   if (event) {
-    event->ended_card_scan(collector.visitor.cards_scanned,
-                           collector.visitor.decks_scanned);
+    event->ended_phase(PHASE_CARD_SCAN);
+    event->cards_scanned += visitor.cards_scanned;
+    event->decks_scanned += visitor.decks_scanned;
   }
 
   if (event)
     event->reset_timer();
-  collector.visitor.visit_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();