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_PROBES_MANAGER_H_
#define SERVICES_DEVICE_COMPUTE_PRESSURE_VIRTUAL_PROBES_MANAGER_H_

#include "base/containers/enum_set.h"
#include "base/sequence_checker.h"
#include "services/device/compute_pressure/probes_manager.h"
#include "services/device/public/mojom/pressure_manager.mojom-forward.h"
#include "services/device/public/mojom/pressure_update.mojom-shared.h"

namespace device {

class VirtualProbesManager final : public ProbesManager {
 public:
  explicit VirtualProbesManager(base::TimeDelta sampling_interval);
  ~VirtualProbesManager() override;

  VirtualProbesManager(const VirtualProbesManager&) = delete;
  VirtualProbesManager& operator=(const VirtualProbesManager&) = delete;

  // Creates a new VirtualProbe for |source| and adds it to the overrides
  // handled by this VirtualProbesManager instance. Returns false if |source|
  // is already being overridden.
  bool AddOverrideForSource(mojom::PressureSource source,
                            mojom::VirtualPressureSourceMetadataPtr metadata);

  // Removes the VirtualProbe override for |sources|. Does nothing if |source|
  // is not being overridden.
  void RemoveOverrideForSource(mojom::PressureSource source);

  // Adds a new sample and own contribution estimate for the given |source| and
  // updates any mojom::PressureClient instances waiting for updates.
  // Does nothing if |source| is not being overridden.
  void AddDataUpdate(mojom::PressureSource source,
                     mojom::PressureState state,
                     double own_contribution_estimate);

  // Returns true if |source| has a corresponding VirtualProbe instance, and
  // false otherwise.
  bool IsOverriding(mojom::PressureSource source) const;

 private:
  SEQUENCE_CHECKER(sequence_checker_);

  base::EnumSet<mojom::PressureSource,
                mojom::PressureSource::kMinValue,
                mojom::PressureSource::kMaxValue>
      overridden_sources_;
};

}  // namespace device

#endif  // SERVICES_DEVICE_COMPUTE_PRESSURE_VIRTUAL_PROBES_MANAGER_H_