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

Unified Diff: base/memory/memory_pressure_listener.h

Issue 15995014: Adds MemoryPressureListener. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: nits Created 7 years, 6 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
« no previous file with comments | « base/memory/memory_pressure_level_list.h ('k') | base/memory/memory_pressure_listener.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/memory/memory_pressure_listener.h
diff --git a/base/memory/memory_pressure_listener.h b/base/memory/memory_pressure_listener.h
new file mode 100644
index 0000000000000000000000000000000000000000..9b8ab099d5865c94003a76f94d527435c79872d3
--- /dev/null
+++ b/base/memory/memory_pressure_listener.h
@@ -0,0 +1,80 @@
+// Copyright (c) 2013 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.
+
+// MemoryPressure provides static APIs for handling memory pressure on
+// platforms that have such signals, such as Android.
+// The app will try to discard buffers that aren't deemed essential (individual
+// modules will implement their own policy).
+//
+// Refer to memory_pressure_level_list.h for information about what sorts of
+// signals can be sent under what conditions.
+
+#ifndef BASE_MEMORY_PRESSURE_LISTENER_H_
+#define BASE_MEMORY_PRESSURE_H_
+
+#include "base/base_export.h"
+#include "base/basictypes.h"
+#include "base/callback.h"
+
+namespace base {
+
+// To start listening, create a new instance, passing a callback to a
+// function that takes a MemoryPressureLevel parameter. To stop listening,
+// simply delete the listener object. The implementation guarantees
+// that the callback will always be called on the thread that created
+// the listener.
+// If this is the same thread as the system is broadcasting the memory pressure
+// event on, then it is guaranteed you're called synchronously within that
+// broadcast and hence you should not do long-running garbage collection work.
+// But conversely, if there's something that needs to be released before
+// control is returned to system code, this is the place to do it.
+// Please see notes on memory_pressure_level_list.h: some levels are absolutely
+// critical, and if not enough memory is returned to the system, it'll
+// potentially kill the app, and then later the app will have to be
+// cold-started.
+//
+//
+// Example:
+//
+// void OnMemoryPressure(MemoryPressureLevel memory_pressure_level) {
+// ...
+// }
+//
+// // Start listening.
+// MemoryPressureListener* my_listener =
+// new MemoryPressureListener(base::Bind(&OnMemoryPressure));
+//
+// ...
+//
+// // Stop listening.
+// delete my_listener;
+//
+class BASE_EXPORT MemoryPressureListener {
+ public:
+ enum MemoryPressureLevel {
+#define DEFINE_MEMORY_PRESSURE_LEVEL(name, value) name = value,
+#include "base/memory/memory_pressure_level_list.h"
+#undef DEFINE_MEMORY_PRESSURE_LEVEL
+ };
+
+ typedef base::Callback<void(MemoryPressureLevel)> MemoryPressureCallback;
+
+ explicit MemoryPressureListener(
+ const MemoryPressureCallback& memory_pressure_callback);
+ ~MemoryPressureListener();
+
+ // Intended for use by the platform specific implementation.
+ static void NotifyMemoryPressure(MemoryPressureLevel memory_pressure_level);
+
+ private:
+ void Notify(MemoryPressureLevel memory_pressure_level);
+
+ MemoryPressureCallback callback_;
+
+ DISALLOW_COPY_AND_ASSIGN(MemoryPressureListener);
+};
+
+} // namespace base
+
+#endif // BASE_MEMORY_PRESSURE_LISTENER_H_
« no previous file with comments | « base/memory/memory_pressure_level_list.h ('k') | base/memory/memory_pressure_listener.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698