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

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

Issue 2329993002: [heap] Decouple old generation allocation limit from external memory. (Closed)
Patch Set: Created 4 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/heap-inl.h ('k') | 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 1084 matching lines...) Expand 10 before | Expand all | Expand 10 after
1095 1095
1096 if (space_left_is_very_small || 1096 if (space_left_is_very_small ||
1097 only_1_nth_of_space_that_was_available_still_left) { 1097 only_1_nth_of_space_that_was_available_still_left) {
1098 if (FLAG_trace_incremental_marking) 1098 if (FLAG_trace_incremental_marking)
1099 heap()->isolate()->PrintWithTimestamp( 1099 heap()->isolate()->PrintWithTimestamp(
1100 "[IncrementalMarking] Speed up marking because of low space left\n"); 1100 "[IncrementalMarking] Speed up marking because of low space left\n");
1101 speed_up = true; 1101 speed_up = true;
1102 } 1102 }
1103 1103
1104 bool size_of_old_space_multiplied_by_n_during_marking = 1104 bool size_of_old_space_multiplied_by_n_during_marking =
1105 (heap_->PromotedTotalSize() > 1105 (heap_->PromotedSpaceSizeOfObjects() >
1106 (marking_speed_ + 1) * 1106 (marking_speed_ + 1) *
1107 old_generation_space_used_at_start_of_incremental_); 1107 old_generation_space_used_at_start_of_incremental_);
1108 if (size_of_old_space_multiplied_by_n_during_marking) { 1108 if (size_of_old_space_multiplied_by_n_during_marking) {
1109 speed_up = true; 1109 speed_up = true;
1110 if (FLAG_trace_incremental_marking) { 1110 if (FLAG_trace_incremental_marking) {
1111 heap()->isolate()->PrintWithTimestamp( 1111 heap()->isolate()->PrintWithTimestamp(
1112 "[IncrementalMarking] Speed up marking because of heap size " 1112 "[IncrementalMarking] Speed up marking because of heap size "
1113 "increase\n"); 1113 "increase\n");
1114 } 1114 }
1115 } 1115 }
1116 1116
1117 int64_t promoted_during_marking = 1117 int64_t promoted_during_marking =
1118 heap_->PromotedTotalSize() - 1118 heap_->PromotedSpaceSizeOfObjects() -
1119 old_generation_space_used_at_start_of_incremental_; 1119 old_generation_space_used_at_start_of_incremental_;
1120 intptr_t delay = marking_speed_ * MB; 1120 intptr_t delay = marking_speed_ * MB;
1121 intptr_t scavenge_slack = heap_->MaxSemiSpaceSize(); 1121 intptr_t scavenge_slack = heap_->MaxSemiSpaceSize();
1122 1122
1123 // We try to scan at at least twice the speed that we are allocating. 1123 // We try to scan at at least twice the speed that we are allocating.
1124 if (promoted_during_marking > bytes_scanned_ / 2 + scavenge_slack + delay) { 1124 if (promoted_during_marking > bytes_scanned_ / 2 + scavenge_slack + delay) {
1125 if (FLAG_trace_incremental_marking) { 1125 if (FLAG_trace_incremental_marking) {
1126 heap()->isolate()->PrintWithTimestamp( 1126 heap()->isolate()->PrintWithTimestamp(
1127 "[IncrementalMarking] Speed up marking because marker was not " 1127 "[IncrementalMarking] Speed up marking because marker was not "
1128 "keeping up\n"); 1128 "keeping up\n");
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
1283 duration); 1283 duration);
1284 } 1284 }
1285 } 1285 }
1286 1286
1287 1287
1288 void IncrementalMarking::ResetStepCounters() { 1288 void IncrementalMarking::ResetStepCounters() {
1289 steps_count_ = 0; 1289 steps_count_ = 0;
1290 old_generation_space_available_at_start_of_incremental_ = 1290 old_generation_space_available_at_start_of_incremental_ =
1291 SpaceLeftInOldSpace(); 1291 SpaceLeftInOldSpace();
1292 old_generation_space_used_at_start_of_incremental_ = 1292 old_generation_space_used_at_start_of_incremental_ =
1293 heap_->PromotedTotalSize(); 1293 heap_->PromotedSpaceSizeOfObjects();
1294 bytes_rescanned_ = 0; 1294 bytes_rescanned_ = 0;
1295 marking_speed_ = kInitialMarkingSpeed; 1295 marking_speed_ = kInitialMarkingSpeed;
1296 bytes_scanned_ = 0; 1296 bytes_scanned_ = 0;
1297 write_barriers_invoked_since_last_step_ = 0; 1297 write_barriers_invoked_since_last_step_ = 0;
1298 bytes_marked_ahead_of_schedule_ = 0; 1298 bytes_marked_ahead_of_schedule_ = 0;
1299 } 1299 }
1300 1300
1301 1301
1302 int64_t IncrementalMarking::SpaceLeftInOldSpace() { 1302 int64_t IncrementalMarking::SpaceLeftInOldSpace() {
1303 return heap_->MaxOldGenerationSize() - heap_->PromotedSpaceSizeOfObjects(); 1303 return heap_->MaxOldGenerationSize() - heap_->PromotedSpaceSizeOfObjects();
1304 } 1304 }
1305 1305
1306 1306
1307 bool IncrementalMarking::IsIdleMarkingDelayCounterLimitReached() { 1307 bool IncrementalMarking::IsIdleMarkingDelayCounterLimitReached() {
1308 return idle_marking_delay_counter_ > kMaxIdleMarkingDelayCounter; 1308 return idle_marking_delay_counter_ > kMaxIdleMarkingDelayCounter;
1309 } 1309 }
1310 1310
1311 1311
1312 void IncrementalMarking::IncrementIdleMarkingDelayCounter() { 1312 void IncrementalMarking::IncrementIdleMarkingDelayCounter() {
1313 idle_marking_delay_counter_++; 1313 idle_marking_delay_counter_++;
1314 } 1314 }
1315 1315
1316 1316
1317 void IncrementalMarking::ClearIdleMarkingDelayCounter() { 1317 void IncrementalMarking::ClearIdleMarkingDelayCounter() {
1318 idle_marking_delay_counter_ = 0; 1318 idle_marking_delay_counter_ = 0;
1319 } 1319 }
1320 1320
1321 } // namespace internal 1321 } // namespace internal
1322 } // namespace v8 1322 } // namespace v8
OLDNEW
« no previous file with comments | « src/heap/heap-inl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698