| Index: src/heap/incremental-marking.cc
|
| diff --git a/src/heap/incremental-marking.cc b/src/heap/incremental-marking.cc
|
| index 7662a334b308bf50bd4466bee69c3ee086aec6a0..024e110766f983ac28ec574b435b567331f78ace 100644
|
| --- a/src/heap/incremental-marking.cc
|
| +++ b/src/heap/incremental-marking.cc
|
| @@ -1024,17 +1024,20 @@
|
| heap()
|
| ->tracer()
|
| ->FinalIncrementalMarkCompactSpeedInBytesPerMillisecond());
|
| - double remaining_time_in_ms =
|
| - deadline_in_ms - heap()->MonotonicallyIncreasingTimeInMs();
|
| - while (remaining_time_in_ms >=
|
| - GCIdleTimeHandler::kMinIncrementalMarkingStepTimeInMs) {
|
| - intptr_t bytes_processed =
|
| + double remaining_time_in_ms = 0.0;
|
| + intptr_t bytes_processed = 0;
|
| +
|
| + do {
|
| + bytes_processed =
|
| Step(step_size_in_bytes, step_actions.completion_action,
|
| step_actions.force_marking, step_actions.force_completion);
|
| remaining_time_in_ms =
|
| deadline_in_ms - heap()->MonotonicallyIncreasingTimeInMs();
|
| - if (bytes_processed == 0) break;
|
| - }
|
| + } while (bytes_processed > 0 &&
|
| + remaining_time_in_ms >=
|
| + 2.0 * GCIdleTimeHandler::kIncrementalMarkingStepTimeInMs &&
|
| + !IsComplete() &&
|
| + !heap()->mark_compact_collector()->marking_deque()->IsEmpty());
|
| return remaining_time_in_ms;
|
| }
|
|
|
|
|