| Index: athena/resource_manager/memory_pressure_notifier.h
|
| diff --git a/athena/resource_manager/memory_pressure_notifier.h b/athena/resource_manager/memory_pressure_notifier.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..5a30f3eb906165eb8e02334a922eeb2b9145a3c4
|
| --- /dev/null
|
| +++ b/athena/resource_manager/memory_pressure_notifier.h
|
| @@ -0,0 +1,92 @@
|
| +// Copyright (c) 2014 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 ATHENA_RESOURCE_MANAGER_MEMORY_PRESSURE_NOTIFIER_H_
|
| +#define ATHENA_RESOURCE_MANAGER_MEMORY_PRESSURE_NOTIFIER_H_
|
| +
|
| +#include "base/memory/ref_counted.h"
|
| +#include "base/memory/scoped_ptr.h"
|
| +#include "base/timer/timer.h"
|
| +
|
| +namespace athena {
|
| +
|
| +class MemoryPressureNotifierImpl;
|
| +class ResourceManagerDelegate;
|
| +
|
| +////////////////////////////////////////////////////////////////////////////////
|
| +// MemoryPressureObserver
|
| +//
|
| +// This observer gets informed once about a |MEMORY_PRESSURE_LOW|. When the
|
| +// pressure exceeds, the observer will get polled until |MEMORY_PRESSURE_LOW| is
|
| +// reached again to counter memory consumption.
|
| +class MemoryPressureObserver {
|
| + public:
|
| + MemoryPressureObserver() {}
|
| + virtual ~MemoryPressureObserver() {}
|
| +
|
| + // The reported memory pressure. Note: The value is intentionally abstracted
|
| + // since the real amount of free memory is only estimated (due to e.g. zram).
|
| + enum MemoryPressure {
|
| + MEMORY_PRESSURE_UNKNOWN, // The memory pressure cannot be determined.
|
| + MEMORY_PRESSURE_LOW, // Single call if memory fill level is below 50%.
|
| + MEMORY_PRESSURE_MODERATE, // Polled for memory fill level of ~50 .. 75%.
|
| + MEMORY_PRESSURE_HIGH, // Polled for memory fill level of ~75% .. 90%.
|
| + MEMORY_PRESSURE_CRITICAL, // Polled for memory fill level of above ~90%.
|
| + };
|
| + // The observer.
|
| + virtual void OnMemoryPressure(MemoryPressure pressure) = 0;
|
| +
|
| + // OS system interface functions. The delegate remains owned by the Observer.
|
| + virtual ResourceManagerDelegate* GetDelegate() = 0;
|
| +};
|
| +
|
| +
|
| +////////////////////////////////////////////////////////////////////////////////
|
| +// MemoryPressureNotifier
|
| +//
|
| +// Class to handle the observation of our free memory. It notifies the owner of
|
| +// memory fill level changes, so that it can take action to reduce memory by
|
| +// reducing active activities.
|
| +//
|
| +// The observer will use 3 different fill levels: 50% full, 75% full and 90%
|
| +// full.
|
| +class MemoryPressureNotifier {
|
| + public:
|
| + // The creator gets the |listener| object. Note that the ownership of the
|
| + // listener object remains with the creator.
|
| + explicit MemoryPressureNotifier(MemoryPressureObserver* listener);
|
| + ~MemoryPressureNotifier();
|
| +
|
| + // Stop observing the memory fill level.
|
| + // May be safely called if StartObserving has not been called.
|
| + void StopObserving();
|
| +
|
| + private:
|
| + // Starts observing the memory fill level.
|
| + // Calls to StartObserving should always be matched with calls to
|
| + // StopObserving.
|
| + void StartObserving();
|
| +
|
| + // The function which gets periodically be called to check any changes in the
|
| + // memory pressure.
|
| + void CheckMemoryPressure();
|
| +
|
| + // Converts free percent of memory into a memory pressure value.
|
| + MemoryPressureObserver::MemoryPressure GetMemoryPressureLevelFromFillLevel(
|
| + int memory_fill_level);
|
| +
|
| + base::RepeatingTimer<MemoryPressureNotifier> timer_;
|
| +
|
| + // The listener which needs to be informed about memory pressure.
|
| + MemoryPressureObserver* listener_;
|
| +
|
| + // Our current memory pressure.
|
| + MemoryPressureObserver::MemoryPressure current_pressure_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(MemoryPressureNotifier);
|
| +};
|
| +
|
| +} // namespace athena
|
| +
|
| +#endif // ATHENA_RESOURCE_MANAGER_MEMORY_PRESSURE_NOTIFIER_H_
|
|
|