diff options
author | bulach@chromium.org <bulach@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-12 15:33:47 +0000 |
---|---|---|
committer | bulach@chromium.org <bulach@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-12 15:33:47 +0000 |
commit | 19d5769c94918d1416b83d3082c5d4ddfc901d1c (patch) | |
tree | 367d27b9ea9b33b8fddfad5cb46c79b569945a6b /base/memory/memory_pressure_listener.cc | |
parent | 46cb7e9bd99d8d7df02a1530f9d4228fafe639b8 (diff) | |
download | chromium_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.cc | 40 |
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 |