910e62b5创建于 1月15日历史提交
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef SERVICES_DEVICE_COMPUTE_PRESSURE_VIRTUAL_CPU_PROBE_MANAGER_H_
#define SERVICES_DEVICE_COMPUTE_PRESSURE_VIRTUAL_CPU_PROBE_MANAGER_H_

#include <memory>

#include "base/functional/callback_forward.h"
#include "base/time/time.h"
#include "services/device/compute_pressure/cpu_probe_manager.h"
#include "services/device/public/cpp/compute_pressure/cpu_pressure_converter.h"
#include "services/device/public/mojom/pressure_update.mojom-shared.h"

namespace device {

// CpuProbeManager subclass that with a custom CpuProbe implementation that
// receives its sample updates from user-provided input.
class VirtualCpuProbeManager final : public CpuProbeManager {
 public:
  static std::unique_ptr<VirtualCpuProbeManager> Create(
      base::TimeDelta sampling_interval,
      base::RepeatingCallback<void(mojom::PressureDataPtr)> sampling_callback);

  ~VirtualCpuProbeManager() final;

  void OnCpuSampleAvailable(std::optional<system_cpu::CpuSample>) override;

  // Creates a system_cpu::CpuSample that corresponds to |desired_state| and
  // provides it to this class' custom CpuProbe. The CpuSample instance will
  // eventually reach CpuProbeManager::OnCpuSampleAvailable() and cause
  // |desired_state| to be reported.
  void SetPressureState(mojom::PressureState desired_state);

  // Set the own_contribution_estimate to desired_estimate.
  // The CpuSample instance will eventually reach
  // CpuProbeManager::OnCpuSampleAvailable() and cause |desired_estimate| to be
  // reported.
  void SetOwnContributionEstimate(double desired_estimate);

 private:
  VirtualCpuProbeManager(
      base::TimeDelta sampling_interval,
      base::RepeatingCallback<void(mojom::PressureDataPtr)> sampling_callback);

  // Handles break calibration mitigation and conversion from PressureSample
  // to PressureState.
  device::CpuPressureConverter converter_;

  // Virtual own_contribution_estimate.
  double own_contribution_estimate_;
};

}  // namespace device

#endif  // SERVICES_DEVICE_COMPUTE_PRESSURE_VIRTUAL_CPU_PROBE_MANAGER_H_