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

Side by Side Diff: src/heap/incremental-marking.cc

Issue 1853463004: [heap] Abort AdvanceIncrementalMarking when we do not make marking progress. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 8 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 | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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/incremental-marking.h" 5 #include "src/heap/incremental-marking.h"
6 6
7 #include "src/code-stubs.h" 7 #include "src/code-stubs.h"
8 #include "src/compilation-cache.h" 8 #include "src/compilation-cache.h"
9 #include "src/conversions.h" 9 #include "src/conversions.h"
10 #include "src/heap/gc-idle-time-handler.h" 10 #include "src/heap/gc-idle-time-handler.h"
(...skipping 1012 matching lines...) Expand 10 before | Expand all | Expand 10 after
1023 1023
1024 if (step_size_in_bytes == 0) { 1024 if (step_size_in_bytes == 0) {
1025 step_size_in_bytes = GCIdleTimeHandler::EstimateMarkingStepSize( 1025 step_size_in_bytes = GCIdleTimeHandler::EstimateMarkingStepSize(
1026 GCIdleTimeHandler::kIncrementalMarkingStepTimeInMs, 1026 GCIdleTimeHandler::kIncrementalMarkingStepTimeInMs,
1027 heap() 1027 heap()
1028 ->tracer() 1028 ->tracer()
1029 ->FinalIncrementalMarkCompactSpeedInBytesPerMillisecond()); 1029 ->FinalIncrementalMarkCompactSpeedInBytesPerMillisecond());
1030 } 1030 }
1031 1031
1032 double remaining_time_in_ms = 0.0; 1032 double remaining_time_in_ms = 0.0;
1033 intptr_t bytes_processed = 0;
1033 do { 1034 do {
1034 Step(step_size_in_bytes, step_actions.completion_action, 1035 bytes_processed =
1035 step_actions.force_marking, step_actions.force_completion); 1036 Step(step_size_in_bytes, step_actions.completion_action,
1037 step_actions.force_marking, step_actions.force_completion);
1036 remaining_time_in_ms = 1038 remaining_time_in_ms =
1037 deadline_in_ms - heap()->MonotonicallyIncreasingTimeInMs(); 1039 deadline_in_ms - heap()->MonotonicallyIncreasingTimeInMs();
1038 } while (remaining_time_in_ms >= 1040 } while (bytes_processed > 0 &&
1041 remaining_time_in_ms >=
1039 2.0 * GCIdleTimeHandler::kIncrementalMarkingStepTimeInMs && 1042 2.0 * GCIdleTimeHandler::kIncrementalMarkingStepTimeInMs &&
1040 !IsComplete() && 1043 !IsComplete() &&
1041 !heap()->mark_compact_collector()->marking_deque()->IsEmpty()); 1044 !heap()->mark_compact_collector()->marking_deque()->IsEmpty());
1042 return remaining_time_in_ms; 1045 return remaining_time_in_ms;
1043 } 1046 }
1044 1047
1045 1048
1046 void IncrementalMarking::OldSpaceStep(intptr_t allocated) { 1049 void IncrementalMarking::OldSpaceStep(intptr_t allocated) {
1047 if (IsStopped() && ShouldActivateEvenWithoutIdleNotification()) { 1050 if (IsStopped() && ShouldActivateEvenWithoutIdleNotification()) {
1048 heap()->StartIncrementalMarking(Heap::kNoGCFlags, kNoGCCallbackFlags, 1051 heap()->StartIncrementalMarking(Heap::kNoGCFlags, kNoGCCallbackFlags,
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
1176 if (state_ == SWEEPING) { 1179 if (state_ == SWEEPING) {
1177 if (heap_->mark_compact_collector()->sweeping_in_progress() && 1180 if (heap_->mark_compact_collector()->sweeping_in_progress() &&
1178 (heap_->mark_compact_collector()->IsSweepingCompleted() || 1181 (heap_->mark_compact_collector()->IsSweepingCompleted() ||
1179 !FLAG_concurrent_sweeping)) { 1182 !FLAG_concurrent_sweeping)) {
1180 heap_->mark_compact_collector()->EnsureSweepingCompleted(); 1183 heap_->mark_compact_collector()->EnsureSweepingCompleted();
1181 } 1184 }
1182 if (!heap_->mark_compact_collector()->sweeping_in_progress()) { 1185 if (!heap_->mark_compact_collector()->sweeping_in_progress()) {
1183 bytes_scanned_ = 0; 1186 bytes_scanned_ = 0;
1184 StartMarking(); 1187 StartMarking();
1185 } 1188 }
1186 } else if (state_ == MARKING) { 1189 }
Hannes Payer (out of office) 2016/04/01 12:48:24 This is a slight policy change. However, I don't t
1190 if (state_ == MARKING) {
1187 bytes_processed = ProcessMarkingDeque(bytes_to_process); 1191 bytes_processed = ProcessMarkingDeque(bytes_to_process);
1188 if (heap_->mark_compact_collector()->marking_deque()->IsEmpty()) { 1192 if (heap_->mark_compact_collector()->marking_deque()->IsEmpty()) {
1189 if (completion == FORCE_COMPLETION || 1193 if (completion == FORCE_COMPLETION ||
1190 IsIdleMarkingDelayCounterLimitReached()) { 1194 IsIdleMarkingDelayCounterLimitReached()) {
1191 if (!finalize_marking_completed_) { 1195 if (!finalize_marking_completed_) {
1192 FinalizeMarking(action); 1196 FinalizeMarking(action);
1193 } else { 1197 } else {
1194 MarkingComplete(action); 1198 MarkingComplete(action);
1195 } 1199 }
1196 } else { 1200 } else {
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
1242 void IncrementalMarking::IncrementIdleMarkingDelayCounter() { 1246 void IncrementalMarking::IncrementIdleMarkingDelayCounter() {
1243 idle_marking_delay_counter_++; 1247 idle_marking_delay_counter_++;
1244 } 1248 }
1245 1249
1246 1250
1247 void IncrementalMarking::ClearIdleMarkingDelayCounter() { 1251 void IncrementalMarking::ClearIdleMarkingDelayCounter() {
1248 idle_marking_delay_counter_ = 0; 1252 idle_marking_delay_counter_ = 0;
1249 } 1253 }
1250 } // namespace internal 1254 } // namespace internal
1251 } // namespace v8 1255 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698