blob: 2227eef82d474ff0f331ef7b1d5037146f4fc761 [file] [log] [blame]
// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "partition_alloc/starscan/pcscan.h"
#include "partition_alloc/partition_alloc_base/compiler_specific.h"
#include "partition_alloc/starscan/pcscan_internal.h"
namespace partition_alloc::internal {
void PCScan::Initialize(InitConfig config) {
PCScanInternal::Instance().Initialize(config);
}
bool PCScan::IsInitialized() {
return PCScanInternal::Instance().is_initialized();
}
void PCScan::Disable() {
auto& instance = PCScan::Instance();
instance.scheduler().scheduling_backend().DisableScheduling();
}
bool PCScan::IsEnabled() {
auto& instance = PCScan::Instance();
return instance.scheduler().scheduling_backend().is_scheduling_enabled();
}
void PCScan::Reenable() {
auto& instance = PCScan::Instance();
instance.scheduler().scheduling_backend().EnableScheduling();
}
void PCScan::RegisterScannableRoot(Root* root) {
PCScanInternal::Instance().RegisterScannableRoot(root);
}
void PCScan::RegisterNonScannableRoot(Root* root) {
PCScanInternal::Instance().RegisterNonScannableRoot(root);
}
void PCScan::RegisterNewSuperPage(Root* root, uintptr_t super_page_base) {
PCScanInternal::Instance().RegisterNewSuperPage(root, super_page_base);
}
void PCScan::PerformScan(InvocationMode invocation_mode) {
PCScanInternal::Instance().PerformScan(invocation_mode);
}
void PCScan::PerformScanIfNeeded(InvocationMode invocation_mode) {
PCScanInternal::Instance().PerformScanIfNeeded(invocation_mode);
}
void PCScan::PerformDelayedScan(int64_t delay_in_microseconds) {
PCScanInternal::Instance().PerformDelayedScan(
base::Microseconds(delay_in_microseconds));
}
void PCScan::JoinScan() {
PCScanInternal::Instance().JoinScan();
}
void PCScan::SetProcessName(const char* process_name) {
PCScanInternal::Instance().SetProcessName(process_name);
}
void PCScan::EnableStackScanning() {
PCScanInternal::Instance().EnableStackScanning();
}
void PCScan::DisableStackScanning() {
PCScanInternal::Instance().DisableStackScanning();
}
bool PCScan::IsStackScanningEnabled() {
return PCScanInternal::Instance().IsStackScanningEnabled();
}
void PCScan::EnableImmediateFreeing() {
PCScanInternal::Instance().EnableImmediateFreeing();
}
void PCScan::NotifyThreadCreated(void* stack_top) {
PCScanInternal::Instance().NotifyThreadCreated(stack_top);
}
void PCScan::NotifyThreadDestroyed() {
PCScanInternal::Instance().NotifyThreadDestroyed();
}
void PCScan::SetClearType(ClearType clear_type) {
PCScan& instance = Instance();
instance.clear_type_ = clear_type;
}
void PCScan::UninitForTesting() {
PCScanInternal::Instance().ClearRootsForTesting(); // IN-TEST
ReinitPCScanMetadataAllocatorForTesting(); // IN-TEST
}
void PCScan::ReinitForTesting(InitConfig config) {
PCScanInternal::Instance().ReinitForTesting(config); // IN-TEST
}
void PCScan::FinishScanForTesting() {
PCScanInternal::Instance().FinishScanForTesting(); // IN-TEST
}
void PCScan::RegisterStatsReporter(partition_alloc::StatsReporter* reporter) {
PCScanInternal::Instance().RegisterStatsReporter(reporter);
}
PCScan PCScan::instance_ PA_CONSTINIT;
} // namespace partition_alloc::internal