Revision: 14559
Author:   [email protected]
Date:     Mon May  6 09:17:49 2013
Log: Fix incremental marking speed accelleration and start incremental marking when old space is almost full when pretenuring objects.

BUG=

Review URL: https://codereview.chromium.org/14714004
http://code.google.com/p/v8/source/detail?r=14559

Modified:
 /branches/bleeding_edge/src/incremental-marking.cc
 /branches/bleeding_edge/src/incremental-marking.h

=======================================
--- /branches/bleeding_edge/src/incremental-marking.cc Mon May 6 06:39:54 2013 +++ /branches/bleeding_edge/src/incremental-marking.cc Mon May 6 09:17:49 2013
@@ -566,7 +566,11 @@
     PrintF("[IncrementalMarking] Start\n");
   }
   ASSERT(FLAG_incremental_marking);
+  ASSERT(FLAG_incremental_marking_steps);
   ASSERT(state_ == STOPPED);
+  ASSERT(heap_->gc_state() == Heap::NOT_IN_GC);
+  ASSERT(!Serializer::enabled());
+  ASSERT(heap_->isolate()->IsInitialized());

   ResetStepCounters();

@@ -858,6 +862,25 @@
     heap_->isolate()->stack_guard()->RequestGC();
   }
 }
+
+
+void IncrementalMarking::OldSpaceStep(intptr_t allocated) {
+ if (IsStopped() && WorthActivating() && heap_->NextGCIsLikelyToBeFull()) { + // Only start incremental marking in a save state: 1) when we are not in
+    // a GC, 2) when we turned-on incremental marking, 3) when we are
+    // currently not serializing or deserializing the heap.
+    if (heap_->gc_state() != Heap::NOT_IN_GC ||
+        !FLAG_incremental_marking ||
+        !FLAG_incremental_marking_steps ||
+        Serializer::enabled() ||
+        !heap_->isolate()->IsInitialized()) {
+      return;
+    }
+    Start();
+  } else {
+ Step(allocated * kFastMarking / kInitialMarkingSpeed, GC_VIA_STACK_GUARD);
+  }
+}


 void IncrementalMarking::Step(intptr_t allocated_bytes,
@@ -965,7 +988,7 @@
         PrintPID("Postponing speeding up marking until marking starts\n");
       }
     } else {
-      marking_speed_ += kMarkingSpeedAccellerationInterval;
+      marking_speed_ += kMarkingSpeedAccelleration;
       marking_speed_ = static_cast<int>(
           Min(kMaxMarkingSpeed,
               static_cast<intptr_t>(marking_speed_ * 1.3)));
=======================================
--- /branches/bleeding_edge/src/incremental-marking.h Mon May 6 06:39:54 2013 +++ /branches/bleeding_edge/src/incremental-marking.h Mon May 6 09:17:49 2013
@@ -110,10 +110,7 @@
   static const intptr_t kMarkingSpeedAccelleration = 2;
   static const intptr_t kMaxMarkingSpeed = 1000;

-  void OldSpaceStep(intptr_t allocated) {
-    Step(allocated * kFastMarking / kInitialMarkingSpeed,
-         GC_VIA_STACK_GUARD);
-  }
+  void OldSpaceStep(intptr_t allocated);

   void Step(intptr_t allocated, CompletionAction action);

--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to