summaryrefslogtreecommitdiffstats
path: root/base/memory/memory_pressure_listener.cc
diff options
context:
space:
mode:
authorbulach@chromium.org <bulach@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-12 15:33:47 +0000
committerbulach@chromium.org <bulach@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-12 15:33:47 +0000
commit19d5769c94918d1416b83d3082c5d4ddfc901d1c (patch)
tree367d27b9ea9b33b8fddfad5cb46c79b569945a6b /base/memory/memory_pressure_listener.cc
parent46cb7e9bd99d8d7df02a1530f9d4228fafe639b8 (diff)
downloadchromium_src-19d5769c94918d1416b83d3082c5d4ddfc901d1c.zip
chromium_src-19d5769c94918d1416b83d3082c5d4ddfc901d1c.tar.gz
chromium_src-19d5769c94918d1416b83d3082c5d4ddfc901d1c.tar.bz2
Adds MemoryPressureListener.
Some platforms, like android, send clear signals when under memory pressure. Create a centralized place so that: - Underlying platform can advise the rest of the system of its memory status. - Individual subsystems can then listen to such notifications and free their memory as per their own policies. BUG=246125 Review URL: https://chromiumcodereview.appspot.com/15995014 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@205796 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/memory/memory_pressure_listener.cc')
-rw-r--r--base/memory/memory_pressure_listener.cc40
1 files changed, 40 insertions, 0 deletions
diff --git a/base/memory/memory_pressure_listener.cc b/base/memory/memory_pressure_listener.cc
new file mode 100644
index 0000000..911dbb3
--- /dev/null
+++ b/base/memory/memory_pressure_listener.cc
@@ -0,0 +1,40 @@
+// Copyright 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.
+
+#include "base/memory/memory_pressure_listener.h"
+
+#include "base/lazy_instance.h"
+#include "base/observer_list_threadsafe.h"
+
+namespace {
+
+base::LazyInstance<ObserverListThreadSafe<base::MemoryPressureListener> >::Leaky
+ g_observers = LAZY_INSTANCE_INITIALIZER;
+
+} // namespace
+
+namespace base {
+
+MemoryPressureListener::MemoryPressureListener(
+ const MemoryPressureListener::MemoryPressureCallback& callback)
+ : callback_(callback) {
+ g_observers.Get().AddObserver(this);
+}
+
+MemoryPressureListener::~MemoryPressureListener() {
+ g_observers.Get().RemoveObserver(this);
+}
+
+void MemoryPressureListener::Notify(MemoryPressureLevel memory_pressure_level) {
+ callback_.Run(memory_pressure_level);
+}
+
+// static
+void MemoryPressureListener::NotifyMemoryPressure(
+ MemoryPressureLevel memory_pressure_level) {
+ g_observers.Get().Notify(&MemoryPressureListener::Notify,
+ memory_pressure_level);
+}
+
+} // namespace base