Reviewers: ulan,

Description:
GC: Refactor incremental marking steps w/ deadline into a separate call

BUG=

Please review this at https://codereview.chromium.org/1270873002/

Base URL: https://chromium.googlesource.com/v8/v8.git@master

Affected files (+25, -13 lines):
  M src/heap/heap.h
  M src/heap/heap.cc


Index: src/heap/heap.cc
diff --git a/src/heap/heap.cc b/src/heap/heap.cc
index 4f5a064cca37a0f51ce644a815da5786008d664a..064ac32f58f36315f288bebb1ee6a26e6bfb5cfb 100644
--- a/src/heap/heap.cc
+++ b/src/heap/heap.cc
@@ -4886,6 +4886,24 @@ GCIdleTimeHandler::HeapState Heap::ComputeHeapState() {
 }


+double Heap::AdvanceIncrementalMarking(
+    double step_size_in_bytes, double deadline_in_ms,
+    IncrementalMarking::ForceCompletionAction completion) {
+  DCHECK(!incremental_marking()->IsStopped());
+  double remaining_time_in_ms = 0.0;
+  do {
+    incremental_marking()->Step(step_size_in_bytes,
+                                IncrementalMarking::NO_GC_VIA_STACK_GUARD,
+ IncrementalMarking::FORCE_MARKING, completion); + remaining_time_in_ms = deadline_in_ms - MonotonicallyIncreasingTimeInMs();
+  } while (remaining_time_in_ms >=
+               2.0 * GCIdleTimeHandler::kIncrementalMarkingStepTimeInMs &&
+           !incremental_marking()->IsComplete() &&
+           !mark_compact_collector_.marking_deque()->IsEmpty());
+  return remaining_time_in_ms;
+}
+
+
 bool Heap::PerformIdleTimeAction(GCIdleTimeAction action,
                                  GCIdleTimeHandler::HeapState heap_state,
                                  double deadline_in_ms) {
@@ -4895,19 +4913,9 @@ bool Heap::PerformIdleTimeAction(GCIdleTimeAction action,
       result = true;
       break;
     case DO_INCREMENTAL_MARKING: {
-      DCHECK(!incremental_marking()->IsStopped());
-      double remaining_idle_time_in_ms = 0.0;
-      do {
-        incremental_marking()->Step(
-            action.parameter, IncrementalMarking::NO_GC_VIA_STACK_GUARD,
-            IncrementalMarking::FORCE_MARKING,
-            IncrementalMarking::DO_NOT_FORCE_COMPLETION);
-        remaining_idle_time_in_ms =
-            deadline_in_ms - MonotonicallyIncreasingTimeInMs();
-      } while (remaining_idle_time_in_ms >=
- 2.0 * GCIdleTimeHandler::kIncrementalMarkingStepTimeInMs &&
-               !incremental_marking()->IsComplete() &&
-               !mark_compact_collector_.marking_deque()->IsEmpty());
+      const double remaining_idle_time_in_ms = AdvanceIncrementalMarking(
+          action.parameter, deadline_in_ms,
+          IncrementalMarking::DO_NOT_FORCE_COMPLETION);
       if (remaining_idle_time_in_ms > 0.0) {
         action.additional_work = TryFinalizeIdleIncrementalMarking(
             remaining_idle_time_in_ms, heap_state.size_of_objects,
Index: src/heap/heap.h
diff --git a/src/heap/heap.h b/src/heap/heap.h
index 089fe7878c7a2baf6fc279d9e54c30aff2c4d6e8..97ff187326832ba2d62366bccb9f67ef8401f6ba 100644
--- a/src/heap/heap.h
+++ b/src/heap/heap.h
@@ -2291,6 +2291,10 @@ class Heap {

   GCIdleTimeHandler::HeapState ComputeHeapState();

+  double AdvanceIncrementalMarking(
+      double step_size_in_bytes, double deadline_in_ms,
+      IncrementalMarking::ForceCompletionAction completion);
+
   bool PerformIdleTimeAction(GCIdleTimeAction action,
                              GCIdleTimeHandler::HeapState heap_state,
                              double deadline_in_ms);


--
--
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/d/optout.

Reply via email to