Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(766)

Unified Diff: athena/resource_manager/memory_pressure_notifier.h

Issue 513523002: Adding Baseframework of the ResourceManager (all hooks and observers) are being put in place with a… (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Aaaand another rebase Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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_

Powered by Google App Engine
This is Rietveld 408576698