Revision: 6461
Author: [email protected]
Date: Tue Jan 25 04:35:06 2011
Log: Adding GC hooks to support LiveObjectList functionality.

Patch by Mark Lam from Hewlett-Packard Development Company, LP

Review URL: http://codereview.chromium.org/6287004

http://code.google.com/p/v8/source/detail?r=6461

Modified:
 /branches/bleeding_edge/src/heap.cc
 /branches/bleeding_edge/src/mark-compact.cc
 /branches/bleeding_edge/src/spaces.cc

=======================================
--- /branches/bleeding_edge/src/heap.cc Thu Jan 13 06:16:08 2011
+++ /branches/bleeding_edge/src/heap.cc Tue Jan 25 04:35:06 2011
@@ -35,6 +35,7 @@
 #include "debug.h"
 #include "heap-profiler.h"
 #include "global-handles.h"
+#include "liveobjectlist-inl.h"
 #include "mark-compact.h"
 #include "natives.h"
 #include "objects-visiting.h"
@@ -400,6 +401,8 @@
 #if defined(DEBUG) || defined(ENABLE_LOGGING_AND_PROFILING)
   ReportStatisticsBeforeGC();
 #endif
+
+  LiveObjectList::GCPrologue();
 }

 intptr_t Heap::SizeOfObjects() {
@@ -412,6 +415,7 @@
 }

 void Heap::GarbageCollectionEpilogue() {
+  LiveObjectList::GCEpilogue();
 #ifdef DEBUG
   allow_allocation(true);
   ZapFromSpace();
@@ -1066,6 +1070,8 @@
   UpdateNewSpaceReferencesInExternalStringTable(
       &UpdateNewSpaceReferenceInExternalStringTableEntry);

+  LiveObjectList::UpdateReferencesForScavengeGC();
+
   ASSERT(new_space_front == new_space_.top());

   // Set age mark.
=======================================
--- /branches/bleeding_edge/src/mark-compact.cc Tue Jan 18 08:11:01 2011
+++ /branches/bleeding_edge/src/mark-compact.cc Tue Jan 25 04:35:06 2011
@@ -33,6 +33,7 @@
 #include "gdb-jit.h"
 #include "global-handles.h"
 #include "ic-inl.h"
+#include "liveobjectlist-inl.h"
 #include "mark-compact.h"
 #include "objects-visiting.h"
 #include "stub-cache.h"
@@ -1660,6 +1661,7 @@
         free_start = current;
         is_prev_alive = false;
       }
+      LiveObjectList::ProcessNonLive(object);
     }
   }

@@ -1880,6 +1882,9 @@
                     size,
                     false);
     } else {
+      // Process the dead object before we write a NULL into its header.
+      LiveObjectList::ProcessNonLive(object);
+
       size = object->Size();
       Memory::Address_at(current) = NULL;
     }
@@ -1899,6 +1904,7 @@

   // Update roots.
   Heap::IterateRoots(&updating_visitor, VISIT_ALL_IN_SCAVENGE);
+  LiveObjectList::IterateElements(&updating_visitor);

   // Update pointers in old spaces.
   Heap::IterateDirtyRegions(Heap::old_pointer_space(),
@@ -1986,6 +1992,7 @@
           free_start = current;
           is_previous_alive = false;
         }
+        LiveObjectList::ProcessNonLive(object);
       }
// The object is now unmarked for the call to Size() at the top of the
       // loop.
@@ -2164,6 +2171,7 @@
   void UpdateMapPointersInRoots() {
     Heap::IterateRoots(&map_updating_visitor_, VISIT_ONLY_STRONG);
     GlobalHandles::IterateWeakRoots(&map_updating_visitor_);
+    LiveObjectList::IterateElements(&map_updating_visitor_);
   }

   void UpdateMapPointersInPagedSpace(PagedSpace* space) {
@@ -2533,6 +2541,8 @@
   // Update the pointer to the head of the weak list of global contexts.
   updating_visitor.VisitPointer(&Heap::global_contexts_list_);

+  LiveObjectList::IterateElements(&updating_visitor);
+
   int live_maps_size = IterateLiveObjects(Heap::map_space(),
                                           &UpdatePointersInOldObject);
int live_pointer_olds_size = IterateLiveObjects(Heap::old_pointer_space(),
=======================================
--- /branches/bleeding_edge/src/spaces.cc       Fri Dec 17 06:50:24 2010
+++ /branches/bleeding_edge/src/spaces.cc       Tue Jan 25 04:35:06 2011
@@ -27,6 +27,7 @@

 #include "v8.h"

+#include "liveobjectlist-inl.h"
 #include "macro-assembler.h"
 #include "mark-compact.h"
 #include "platform.h"
@@ -3125,6 +3126,8 @@

       // Free the chunk.
       MarkCompactCollector::ReportDeleteIfNeeded(object);
+      LiveObjectList::ProcessNonLive(object);
+
       size_ -= static_cast<int>(chunk_size);
       objects_size_ -= object->Size();
       page_count_--;

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

Reply via email to