Perform full GC in background idle notification.
authorulan <ulan@chromium.org>
Tue, 4 Aug 2015 12:41:39 +0000 (05:41 -0700)
committerCommit bot <commit-bot@chromium.org>
Tue, 4 Aug 2015 12:42:10 +0000 (12:42 +0000)
BUG=chromium:515873
LOG=NO

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

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

src/heap/memory-reducer.cc

index 634220d..634c625 100644 (file)
@@ -95,13 +95,20 @@ void MemoryReducer::NotifyBackgroundIdleNotification(const Event& event) {
   if (old_action == kWait && state_.action == kWait &&
       old_started_gcs + 1 == state_.started_gcs) {
     DCHECK(heap()->incremental_marking()->IsStopped());
-    DCHECK(FLAG_incremental_marking);
-    heap()->StartIdleIncrementalMarking();
-    if (FLAG_trace_gc_verbose) {
-      PrintIsolate(heap()->isolate(),
-                   "Memory reducer: started GC #%d"
-                   " (background idle)\n",
-                   state_.started_gcs);
+    // TODO(ulan): Replace it with incremental marking GC once
+    // chromium:490559 is fixed.
+    if (event.time_ms > state_.last_gc_time_ms + kLongDelayMs) {
+      heap()->CollectAllGarbage(Heap::kReduceMemoryFootprintMask,
+                                "memory reducer background GC");
+    } else {
+      DCHECK(FLAG_incremental_marking);
+      heap()->StartIdleIncrementalMarking();
+      if (FLAG_trace_gc_verbose) {
+        PrintIsolate(heap()->isolate(),
+                     "Memory reducer: started GC #%d"
+                     " (background idle)\n",
+                     state_.started_gcs);
+      }
     }
   }
 }