| // 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_GARBAGE_COLLECTOR_H_ |
| #define V8_HEAP_CPPGC_GARBAGE_COLLECTOR_H_ |
| |
| #include "src/heap/cppgc/marker.h" |
| #include "src/heap/cppgc/sweeper.h" |
| |
| namespace cppgc { |
| namespace internal { |
| |
| // GC interface that allows abstraction over the actual GC invocation. This is |
| // needed to mock/fake GC for testing. |
| class GarbageCollector { |
| public: |
| struct Config { |
| using CollectionType = Marker::MarkingConfig::CollectionType; |
| using StackState = cppgc::Heap::StackState; |
| using MarkingType = Marker::MarkingConfig::MarkingType; |
| using SweepingType = Sweeper::SweepingConfig::SweepingType; |
| |
| static constexpr Config ConservativeAtomicConfig() { |
| return {CollectionType::kMajor, StackState::kMayContainHeapPointers, |
| MarkingType::kAtomic, SweepingType::kAtomic}; |
| } |
| |
| static constexpr Config PreciseAtomicConfig() { |
| return {CollectionType::kMajor, StackState::kNoHeapPointers, |
| MarkingType::kAtomic, SweepingType::kAtomic}; |
| } |
| |
| static constexpr Config ConservativeIncrementalConfig() { |
| return {CollectionType::kMajor, StackState::kMayContainHeapPointers, |
| MarkingType::kIncremental, SweepingType::kAtomic}; |
| } |
| |
| static constexpr Config PreciseIncrementalConfig() { |
| return {CollectionType::kMajor, StackState::kNoHeapPointers, |
| MarkingType::kIncremental, SweepingType::kAtomic}; |
| } |
| |
| static constexpr Config MinorPreciseAtomicConfig() { |
| return {CollectionType::kMinor, StackState::kNoHeapPointers, |
| MarkingType::kAtomic, SweepingType::kAtomic}; |
| } |
| |
| CollectionType collection_type = CollectionType::kMajor; |
| StackState stack_state = StackState::kMayContainHeapPointers; |
| MarkingType marking_type = MarkingType::kAtomic; |
| SweepingType sweeping_type = SweepingType::kAtomic; |
| }; |
| |
| // Executes a garbage collection specified in config. |
| virtual void CollectGarbage(Config) = 0; |
| virtual void StartIncrementalGarbageCollection(Config) = 0; |
| |
| // The current epoch that the GC maintains. The epoch is increased on every |
| // GC invocation. |
| virtual size_t epoch() const = 0; |
| }; |
| |
| } // namespace internal |
| } // namespace cppgc |
| |
| #endif // V8_HEAP_CPPGC_GARBAGE_COLLECTOR_H_ |