| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |