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

#ifndef BASE_MEMORY_MEMORY_PRESSURE_MONITOR_MAC_H_
#define BASE_MEMORY_MEMORY_PRESSURE_MONITOR_MAC_H_

#include <dispatch/dispatch.h>

#include "base/base_export.h"
#include "base/macros.h"
#include "base/memory/memory_pressure_listener.h"
#include "base/memory/memory_pressure_monitor.h"

// The following was added to <dispatch/source.h> after 10.8.
// TODO(shrike): Remove the DISPATCH_MEMORYPRESSURE_NORMAL ifndef once builders
// reach 10.9 or higher.
#ifndef DISPATCH_MEMORYPRESSURE_NORMAL

#define DISPATCH_MEMORYPRESSURE_NORMAL    0x01
#define DISPATCH_MEMORYPRESSURE_WARN      0x02
#define DISPATCH_MEMORYPRESSURE_CRITICAL  0x04

#endif  // DISPATCH_MEMORYPRESSURE_NORMAL

namespace base {
namespace mac {

class TestMemoryPressureMonitor;

struct DispatchSourceSDeleter {
  void operator()(dispatch_source_s* ptr) {
    dispatch_source_cancel(ptr);
    dispatch_release(ptr);
  }
};

// Declares the interface for the Mac MemoryPressureMonitor, which reports
// memory pressure events and status.
class BASE_EXPORT MemoryPressureMonitor : public base::MemoryPressureMonitor {
 public:
  MemoryPressureMonitor();
  ~MemoryPressureMonitor() override;

  // Returns the currently-observed memory pressure.
  MemoryPressureLevel GetCurrentPressureLevel() const override;

 private:
  friend TestMemoryPressureMonitor;

  static MemoryPressureLevel
      MemoryPressureLevelForMacMemoryPressure(int mac_memory_pressure);
  static void NotifyMemoryPressureChanged(dispatch_source_s* event_source);

  std::unique_ptr<dispatch_source_s, DispatchSourceSDeleter>
      memory_level_event_source_;

  DISALLOW_COPY_AND_ASSIGN(MemoryPressureMonitor);
};

}  // namespace mac
}  // namespace base

#endif  // BASE_MEMORY_MEMORY_PRESSURE_MONITOR_MAC_H_
