[heap] Let caller figure out target space for evacuation when compacting.
authormlippautz <mlippautz@chromium.org>
Tue, 15 Sep 2015 11:44:48 +0000 (04:44 -0700)
committerCommit bot <commit-bot@chromium.org>
Tue, 15 Sep 2015 11:45:01 +0000 (11:45 +0000)
R=hpayer@chromium.org
BUG=chromium:524425
LOG=N

Review URL: https://codereview.chromium.org/1340253004

Cr-Commit-Position: refs/heads/master@{#30742}

src/heap/mark-compact.cc
src/heap/mark-compact.h

index 7757b2c..09e4de4 100644 (file)
@@ -3176,9 +3176,9 @@ void MarkCompactCollector::EvacuateNewSpace() {
 }
 
 
-void MarkCompactCollector::EvacuateLiveObjectsFromPage(Page* p) {
+void MarkCompactCollector::EvacuateLiveObjectsFromPage(
+    Page* p, PagedSpace* target_space) {
   AlwaysAllocateScope always_allocate(isolate());
-  PagedSpace* space = static_cast<PagedSpace*>(p->owner());
   DCHECK(p->IsEvacuationCandidate() && !p->WasSwept());
   p->SetWasSwept();
 
@@ -3199,12 +3199,12 @@ void MarkCompactCollector::EvacuateLiveObjectsFromPage(Page* p) {
       int size = object->Size();
       AllocationAlignment alignment = object->RequiredAlignment();
       HeapObject* target_object = nullptr;
-      AllocationResult allocation = space->AllocateRaw(size, alignment);
+      AllocationResult allocation = target_space->AllocateRaw(size, alignment);
       if (!allocation.To(&target_object)) {
         // If allocation failed, use emergency memory and re-try allocation.
-        CHECK(space->HasEmergencyMemory());
-        space->UseEmergencyMemory();
-        allocation = space->AllocateRaw(size, alignment);
+        CHECK(target_space->HasEmergencyMemory());
+        target_space->UseEmergencyMemory();
+        allocation = target_space->AllocateRaw(size, alignment);
       }
       if (!allocation.To(&target_object)) {
         // OS refused to give us memory.
@@ -3212,7 +3212,7 @@ void MarkCompactCollector::EvacuateLiveObjectsFromPage(Page* p) {
         return;
       }
 
-      MigrateObject(target_object, object, size, space->identity());
+      MigrateObject(target_object, object, size, target_space->identity());
       DCHECK(object->map_word().IsForwardingAddress());
     }
 
@@ -3256,7 +3256,7 @@ void MarkCompactCollector::EvacuatePages() {
       // up a page.  Check that we actually got an emergency page above so we
       // can guarantee that this succeeds.
       if (space->HasEmergencyMemory()) {
-        EvacuateLiveObjectsFromPage(p);
+        EvacuateLiveObjectsFromPage(p, static_cast<PagedSpace*>(p->owner()));
         // Unlink the page from the list of pages here. We must not iterate
         // over that page later (e.g. when scan on scavenge pages are
         // processed). The page itself will be freed later and is still
index 7c43813..447535d 100644 (file)
@@ -881,7 +881,7 @@ class MarkCompactCollector {
 
   void EvacuateNewSpace();
 
-  void EvacuateLiveObjectsFromPage(Page* p);
+  void EvacuateLiveObjectsFromPage(Page* p, PagedSpace* target_space);
 
   void EvacuatePages();