blob: cb5824cc8c1b208fcef3faf8412b85031511d4fb [file] [log] [blame]
// 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_SWEEPER_H_
#define V8_HEAP_CPPGC_SWEEPER_H_
#include <memory>
#include "src/base/macros.h"
namespace cppgc {
class Platform;
namespace internal {
class StatsCollector;
class RawHeap;
class ConcurrentSweeperTest;
class V8_EXPORT_PRIVATE Sweeper final {
public:
struct SweepingConfig {
enum class SweepingType : uint8_t { kAtomic, kIncrementalAndConcurrent };
enum class CompactableSpaceHandling { kSweep, kIgnore };
SweepingType sweeping_type = SweepingType::kIncrementalAndConcurrent;
CompactableSpaceHandling compactable_space_handling =
CompactableSpaceHandling::kSweep;
};
Sweeper(RawHeap*, cppgc::Platform*, StatsCollector*);
~Sweeper();
Sweeper(const Sweeper&) = delete;
Sweeper& operator=(const Sweeper&) = delete;
// Sweeper::Start assumes the heap holds no linear allocation buffers.
void Start(SweepingConfig);
void FinishIfRunning();
private:
void WaitForConcurrentSweepingForTesting();
class SweeperImpl;
std::unique_ptr<SweeperImpl> impl_;
friend class ConcurrentSweeperTest;
};
} // namespace internal
} // namespace cppgc
#endif // V8_HEAP_CPPGC_SWEEPER_H_