| // Copyright 2012 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_HEAP_CONTROLLER_H_ |
| #define V8_HEAP_HEAP_CONTROLLER_H_ |
| |
| #include <cstddef> |
| #include "src/heap/heap.h" |
| #include "src/utils/allocation.h" |
| #include "testing/gtest/include/gtest/gtest_prod.h" // nogncheck |
| |
| namespace v8 { |
| namespace internal { |
| |
| struct BaseControllerTrait { |
| static constexpr size_t kMinSize = 128u * Heap::kHeapLimitMultiplier * MB; |
| static constexpr size_t kMaxSize = 1024u * Heap::kHeapLimitMultiplier * MB; |
| |
| static constexpr double kMinGrowingFactor = 1.1; |
| static constexpr double kMaxGrowingFactor = 4.0; |
| static constexpr double kConservativeGrowingFactor = 1.3; |
| static constexpr double kTargetMutatorUtilization = 0.97; |
| }; |
| |
| struct V8HeapTrait : public BaseControllerTrait { |
| static const char* kName; |
| }; |
| |
| struct GlobalMemoryTrait : public BaseControllerTrait { |
| static const char* kName; |
| }; |
| |
| template <typename Trait> |
| class V8_EXPORT_PRIVATE MemoryController : public AllStatic { |
| public: |
| // Computes the growing step when the limit increases. |
| static size_t MinimumAllocationLimitGrowingStep( |
| Heap::HeapGrowingMode growing_mode); |
| |
| static double GrowingFactor(Heap* heap, size_t max_heap_size, double gc_speed, |
| double mutator_speed); |
| |
| static size_t CalculateAllocationLimit(Heap* heap, size_t current_size, |
| size_t min_size, size_t max_size, |
| size_t new_space_capacity, |
| double factor, |
| Heap::HeapGrowingMode growing_mode); |
| |
| private: |
| static double MaxGrowingFactor(size_t max_heap_size); |
| static double DynamicGrowingFactor(double gc_speed, double mutator_speed, |
| double max_factor); |
| |
| FRIEND_TEST(MemoryControllerTest, HeapGrowingFactor); |
| FRIEND_TEST(MemoryControllerTest, MaxHeapGrowingFactor); |
| }; |
| |
| } // namespace internal |
| } // namespace v8 |
| |
| #endif // V8_HEAP_HEAP_CONTROLLER_H_ |