// 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 #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 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); scoped_ptr memory_level_event_source_; DISALLOW_COPY_AND_ASSIGN(MemoryPressureMonitor); }; } // namespace mac } // namespace base #endif // BASE_MEMORY_MEMORY_PRESSURE_MONITOR_MAC_H_