Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(272)

Side by Side Diff: src/heap/memory-reducer.cc

Issue 1311993003: Reland "Make sure that memory reducer makes progress in incremental marking"" (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Address comments Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/heap/incremental-marking.cc ('k') | test/cctest/test-heap.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/heap/memory-reducer.h" 5 #include "src/heap/memory-reducer.h"
6 6
7 #include "src/flags.h" 7 #include "src/flags.h"
8 #include "src/heap/gc-tracer.h" 8 #include "src/heap/gc-tracer.h"
9 #include "src/heap/heap-inl.h" 9 #include "src/heap/heap-inl.h"
10 #include "src/utils.h" 10 #include "src/utils.h"
(...skipping 28 matching lines...) Expand all
39 } 39 }
40 40
41 41
42 void MemoryReducer::NotifyTimer(const Event& event) { 42 void MemoryReducer::NotifyTimer(const Event& event) {
43 DCHECK_EQ(kTimer, event.type); 43 DCHECK_EQ(kTimer, event.type);
44 DCHECK_EQ(kWait, state_.action); 44 DCHECK_EQ(kWait, state_.action);
45 state_ = Step(state_, event); 45 state_ = Step(state_, event);
46 if (state_.action == kRun) { 46 if (state_.action == kRun) {
47 DCHECK(heap()->incremental_marking()->IsStopped()); 47 DCHECK(heap()->incremental_marking()->IsStopped());
48 DCHECK(FLAG_incremental_marking); 48 DCHECK(FLAG_incremental_marking);
49 heap()->StartIdleIncrementalMarking();
50 if (FLAG_trace_gc_verbose) { 49 if (FLAG_trace_gc_verbose) {
51 PrintIsolate(heap()->isolate(), "Memory reducer: started GC #%d\n", 50 PrintIsolate(heap()->isolate(), "Memory reducer: started GC #%d\n",
52 state_.started_gcs); 51 state_.started_gcs);
53 } 52 }
53 if (heap()->ShouldOptimizeForMemoryUsage()) {
54 // Do full GC if memory usage has higher priority than latency. This is
55 // important for background tabs that do not send idle notifications.
56 heap()->CollectAllGarbage(Heap::kReduceMemoryFootprintMask,
57 "memory reducer");
58 } else {
59 heap()->StartIdleIncrementalMarking();
60 }
54 } else if (state_.action == kWait) { 61 } else if (state_.action == kWait) {
62 if (!heap()->incremental_marking()->IsStopped() &&
63 heap()->ShouldOptimizeForMemoryUsage()) {
64 // Make progress with pending incremental marking if memory usage has
65 // higher priority than latency. This is important for background tabs
66 // that do not send idle notifications.
67 const int kIncrementalMarkingDelayMs = 500;
68 double deadline = heap()->MonotonicallyIncreasingTimeInMs() +
69 kIncrementalMarkingDelayMs;
70 heap()->AdvanceIncrementalMarking(
71 0, deadline, i::IncrementalMarking::StepActions(
72 i::IncrementalMarking::NO_GC_VIA_STACK_GUARD,
73 i::IncrementalMarking::FORCE_MARKING,
74 i::IncrementalMarking::FORCE_COMPLETION));
75 heap()->FinalizeIncrementalMarkingIfComplete(
76 "Memory reducer: finalize incremental marking");
77 }
55 // Re-schedule the timer. 78 // Re-schedule the timer.
56 ScheduleTimer(state_.next_gc_start_ms - event.time_ms); 79 ScheduleTimer(state_.next_gc_start_ms - event.time_ms);
57 if (FLAG_trace_gc_verbose) { 80 if (FLAG_trace_gc_verbose) {
58 PrintIsolate(heap()->isolate(), "Memory reducer: waiting for %.f ms\n", 81 PrintIsolate(heap()->isolate(), "Memory reducer: waiting for %.f ms\n",
59 state_.next_gc_start_ms - event.time_ms); 82 state_.next_gc_start_ms - event.time_ms);
60 } 83 }
61 } 84 }
62 } 85 }
63 86
64 87
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
197 auto timer_task = new MemoryReducer::TimerTask(this); 220 auto timer_task = new MemoryReducer::TimerTask(this);
198 V8::GetCurrentPlatform()->CallDelayedOnForegroundThread( 221 V8::GetCurrentPlatform()->CallDelayedOnForegroundThread(
199 isolate, timer_task, (delay_ms + kSlackMs) / 1000.0); 222 isolate, timer_task, (delay_ms + kSlackMs) / 1000.0);
200 } 223 }
201 224
202 225
203 void MemoryReducer::TearDown() { state_ = State(kDone, 0, 0, 0.0); } 226 void MemoryReducer::TearDown() { state_ = State(kDone, 0, 0, 0.0); }
204 227
205 } // internal 228 } // internal
206 } // v8 229 } // v8
OLDNEW
« no previous file with comments | « src/heap/incremental-marking.cc ('k') | test/cctest/test-heap.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698