| // Copyright 2020 the V8 project authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef V8_HEAP_CPPGC_HEAP_GROWING_H_ |
| #define V8_HEAP_CPPGC_HEAP_GROWING_H_ |
| |
| #include "include/cppgc/heap.h" |
| #include "src/base/macros.h" |
| #include "src/heap/cppgc/globals.h" |
| #include "src/heap/cppgc/raw-heap.h" |
| |
| namespace cppgc { |
| |
| class Platform; |
| |
| namespace internal { |
| |
| class GarbageCollector; |
| class StatsCollector; |
| |
| // Growing strategy that invokes garbage collection using GarbageCollector based |
| // on allocation statistics provided by StatsCollector and ResourceConstraints. |
| // |
| // Implements a fixed-ratio growing strategy with an initial heap size that the |
| // GC can ignore to avoid excessive GCs for smaller heaps. |
| class V8_EXPORT_PRIVATE HeapGrowing final { |
| public: |
| // Constant growing factor for growing the heap limit. |
| static constexpr double kGrowingFactor = 1.5; |
| // For smaller heaps, allow allocating at least LAB in each regular space |
| // before triggering GC again. |
| static constexpr size_t kMinLimitIncrease = |
| kPageSize * RawHeap::kNumberOfRegularSpaces; |
| |
| HeapGrowing(GarbageCollector*, StatsCollector*, |
| cppgc::Heap::ResourceConstraints); |
| ~HeapGrowing(); |
| |
| HeapGrowing(const HeapGrowing&) = delete; |
| HeapGrowing& operator=(const HeapGrowing&) = delete; |
| |
| size_t limit_for_atomic_gc() const; |
| size_t limit_for_incremental_gc() const; |
| |
| void DisableForTesting(); |
| |
| private: |
| class HeapGrowingImpl; |
| std::unique_ptr<HeapGrowingImpl> impl_; |
| }; |
| |
| } // namespace internal |
| } // namespace cppgc |
| |
| #endif // V8_HEAP_CPPGC_HEAP_GROWING_H_ |