blob: 4e693e4d9247ff68aa5a16d55460195ffd6fe5f2 [file] [log] [blame]
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_MEMORY_SYSTEM_INITIALIZER_H_
#define COMPONENTS_MEMORY_SYSTEM_INITIALIZER_H_
#include "base/strings/string_piece.h"
#include "components/memory_system/parameters.h"
#include "components/metrics/call_stack_profile_params.h"
#include "components/version_info/channel.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
namespace memory_system {
class MemorySystem;
// A convenience class which allows different parts of the configuration being
// set in an expressive way and handing them over to the memory system upon
// initialization.
class Initializer {
public:
Initializer();
~Initializer();
Initializer& SetGwpAsanParameters(bool boost_sampling,
base::StringPiece process_type);
Initializer& SetProfilingClientParameters(
version_info::Channel channel,
metrics::CallStackProfileParams::Process process_type);
Initializer& SetDispatcherParameters(
DispatcherParameters::PoissonAllocationSamplerInclusion
poisson_allocation_sampler_inclusion,
DispatcherParameters::AllocationTraceRecorderInclusion
allocation_trace_recorder_inclusion);
void Initialize(MemorySystem& memory_system) const;
private:
absl::optional<GwpAsanParameters> gwp_asan_parameters_;
absl::optional<ProfilingClientParameters> profiling_client_parameters_;
absl::optional<DispatcherParameters> dispatcher_parameters_;
};
} // namespace memory_system
#endif // COMPONENTS_MEMORY_SYSTEM_INITIALIZER_H_