| Index: src/heap/heap.h
|
| diff --git a/src/heap/heap.h b/src/heap/heap.h
|
| index 4d408b6e46cdb02213a494673edd7a78bf0c0a10..3c4057373906527ea89e862069d868f57b63932a 100644
|
| --- a/src/heap/heap.h
|
| +++ b/src/heap/heap.h
|
| @@ -1827,11 +1827,15 @@ class Heap {
|
| // performace reasons. If the overshoot is too large then we are more
|
| // eager to finalize incremental marking.
|
| inline bool AllocationLimitOvershotByLargeMargin() {
|
| + // This guards against too eager finalization in small heaps.
|
| + // The number is chosen based on v8.browsing_mobile on Nexus 7v2.
|
| + size_t kMarginForSmallHeaps = 32u * MB;
|
| if (old_generation_allocation_limit_ >= PromotedTotalSize()) return false;
|
| uint64_t overshoot = PromotedTotalSize() - old_generation_allocation_limit_;
|
| - // Overshoot margin is 50% of allocation limit or half-way to the max heap.
|
| + // Overshoot margin is 50% of allocation limit or half-way to the max heap
|
| + // with special handling of small heaps.
|
| uint64_t margin =
|
| - Min(old_generation_allocation_limit_ / 2,
|
| + Min(Max(old_generation_allocation_limit_ / 2, kMarginForSmallHeaps),
|
| (max_old_generation_size_ - old_generation_allocation_limit_) / 2);
|
| return overshoot >= margin;
|
| }
|
|
|