// 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_PERFORMANCE_MANAGER_TEST_SUPPORT_RESOURCE_ATTRIBUTION_MEASUREMENT_DELEGATES_H_ #define COMPONENTS_PERFORMANCE_MANAGER_TEST_SUPPORT_RESOURCE_ATTRIBUTION_MEASUREMENT_DELEGATES_H_ #include <map> #include <memory> #include <optional> #include <vector> #include "base/functional/callback_forward.h" #include "base/memory/safe_ref.h" #include "base/memory/weak_ptr.h" #include "base/time/time.h" #include "base/types/expected.h" #include "base/types/pass_key.h" #include "components/performance_manager/public/resource_attribution/cpu_measurement_delegate.h" #include "components/performance_manager/public/resource_attribution/memory_measurement_delegate.h" namespace performance_manager { class ProcessNode; } namespace resource_attribution { class SimulatedCPUMeasurementDelegate; // The proportion of CPU used over time as a fraction, on the same scale as // ProcessMetrics::GetPlatformIndependentCPUUsage: 0% to 100% * // SysInfo::NumberOfProcessors(). // // Since tests should be independent of the number of processors, it's usually // convenient to use a range of 0.0 to 1.0 (for 100%), simulating a // single-processor system. But if the code under test scales CPU measurements // by SysInfo::NumberOfProcessors(), it's better to set the simulated usage to // SysInfo::NumberOfProcessors() * a fraction, so that the code under test // gets the same results after scaling on every system. SimulatedCPUUsage; // A factory that manages SimulatedCPUMeasurementDelegate instances. Embed an // instance of this in a unit test, and pass it to // CPUMeasurementDelegate::SetDelegateFactoryForTesting(). The caller must // ensure that the SimulatedCPUMeasurementDelegateFactory outlives all callers // of CreateDelegateForProcess(). class SimulatedCPUMeasurementDelegateFactory final : public CPUMeasurementDelegate::Factory { … }; // State of a simulated process for CPU measurements. class SimulatedCPUMeasurementDelegate final : public CPUMeasurementDelegate { … }; // A factory that manages FakeMemoryMeasurementDelegate instances. Embed an // instance of this in a unit test, and pass it to // MemoryMeasurementDelegate::SetDelegateFactoryForTesting(). The caller must // ensure that the FakeMemoryMeasurementDelegateFactory outlives all callers // of CreateDelegate(). class FakeMemoryMeasurementDelegateFactory final : public MemoryMeasurementDelegate::Factory { … }; // A MemoryMeasurementDelegate that returns fake results. class FakeMemoryMeasurementDelegate final : public MemoryMeasurementDelegate { … }; } // namespace resource_attribution #endif // COMPONENTS_PERFORMANCE_MANAGER_TEST_SUPPORT_RESOURCE_ATTRIBUTION_MEASUREMENT_DELEGATES_H_