Revision: 10625
Author:   [email protected]
Date:     Tue Feb  7 06:43:51 2012
Log:      Try enabling (non-incremental) code compaction again.

This time include slot-recording fixes in code flushing that were accidentally omitted from the previous commit.

[email protected]

Review URL: https://chromiumcodereview.appspot.com/9348018
http://code.google.com/p/v8/source/detail?r=10625

Modified:
 /branches/bleeding_edge/src/flag-definitions.h
 /branches/bleeding_edge/src/mark-compact.cc

=======================================
--- /branches/bleeding_edge/src/flag-definitions.h      Tue Feb  7 02:03:08 2012
+++ /branches/bleeding_edge/src/flag-definitions.h      Tue Feb  7 06:43:51 2012
@@ -307,7 +307,7 @@
             "Flush code caches in maps during mark compact cycle.")
 DEFINE_bool(never_compact, false,
             "Never perform compaction on full GC - testing only")
-DEFINE_bool(compact_code_space, false,
+DEFINE_bool(compact_code_space, true,
             "Compact code space on full non-incremental collections")
 DEFINE_bool(cleanup_code_caches_at_gc, true,
             "Flush inline caches prior to mark compact collection and "
=======================================
--- /branches/bleeding_edge/src/mark-compact.cc Tue Feb  7 02:03:08 2012
+++ /branches/bleeding_edge/src/mark-compact.cc Tue Feb  7 06:43:51 2012
@@ -809,6 +809,8 @@
       isolate_->heap()->mark_compact_collector()->
           RecordCodeEntrySlot(slot, target);

+      RecordSharedFunctionInfoCodeSlot(shared);
+
       candidate = next_candidate;
     }

@@ -830,12 +832,21 @@
       if (!code_mark.Get()) {
         candidate->set_code(lazy_compile);
       }
+
+      RecordSharedFunctionInfoCodeSlot(candidate);

       candidate = next_candidate;
     }

     shared_function_info_candidates_head_ = NULL;
   }
+
+  void RecordSharedFunctionInfoCodeSlot(SharedFunctionInfo* shared) {
+    Object** slot = HeapObject::RawField(shared,
+                                         SharedFunctionInfo::kCodeOffset);
+    isolate_->heap()->mark_compact_collector()->
+        RecordSlot(slot, slot, HeapObject::cast(*slot));
+  }

   static JSFunction** GetNextCandidateField(JSFunction* candidate) {
     return reinterpret_cast<JSFunction**>(

--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to