chromium/chromecast/browser/memory_pressure_controller_impl.h

// Copyright 2017 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROMECAST_BROWSER_MEMORY_PRESSURE_CONTROLLER_IMPL_H_
#define CHROMECAST_BROWSER_MEMORY_PRESSURE_CONTROLLER_IMPL_H_

#include "base/memory/memory_pressure_listener.h"
#include "chromecast/common/mojom/memory_pressure.mojom.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/receiver_set.h"
#include "mojo/public/cpp/bindings/remote_set.h"

namespace chromecast {

class MemoryPressureControllerImpl : public mojom::MemoryPressureController {
 public:
  MemoryPressureControllerImpl();

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

  ~MemoryPressureControllerImpl() override;

  void AddReceiver(
      mojo::PendingReceiver<mojom::MemoryPressureController> receiver);

 private:
  // chromecast::mojom::MemoryPressure implementation.
  void AddObserver(
      mojo::PendingRemote<mojom::MemoryPressureObserver> observer) override;

  void OnMemoryPressure(
      base::MemoryPressureListener::MemoryPressureLevel level);

  mojo::RemoteSet<mojom::MemoryPressureObserver> observers_;
  mojo::ReceiverSet<mojom::MemoryPressureController> receivers_;

  std::unique_ptr<base::MemoryPressureListener> memory_pressure_listener_;
};

}  // namespace chromecast

#endif  // CHROMECAST_BROWSER_MEMORY_PRESSURE_CONTROLLER_IMPL_H_