Index: base/memory/memory_pressure_listener.cc |
diff --git a/base/memory/memory_pressure_listener.cc b/base/memory/memory_pressure_listener.cc |
index 9fd675aa4e52a0dd679c0d26456da990c31589d3..19a074ab2c4a2ad188fad4de084305ac32d256d7 100644 |
--- a/base/memory/memory_pressure_listener.cc |
+++ b/base/memory/memory_pressure_listener.cc |
@@ -44,6 +44,14 @@ MemoryPressureListener::MemoryPressureListener( |
g_observers.Get().AddObserver(this); |
} |
+MemoryPressureListener::MemoryPressureListener( |
+ const MemoryPressureListener::MemoryPressureCallback& callback, |
+ const MemoryPressureListener::SyncMemoryPressuredCallback& sync_callback) |
+ : callback_(callback), |
+ sync_memory_pressured_callback_(sync_callback) { |
+ g_observers.Get().AddObserver(this); |
+} |
+ |
MemoryPressureListener::~MemoryPressureListener() { |
g_observers.Get().RemoveObserver(this); |
} |
@@ -52,6 +60,13 @@ void MemoryPressureListener::Notify(MemoryPressureLevel memory_pressure_level) { |
callback_.Run(memory_pressure_level); |
} |
+void MemoryPressureListener::SyncNotify( |
+ MemoryPressureLevel memory_pressure_level) { |
+ if (!sync_memory_pressured_callback_.is_null()) { |
+ sync_memory_pressured_callback_.Run(true); |
+ } |
+} |
+ |
// static |
void MemoryPressureListener::NotifyMemoryPressure( |
MemoryPressureLevel memory_pressure_level) { |
@@ -84,6 +99,9 @@ void MemoryPressureListener::SimulatePressureNotification( |
void MemoryPressureListener::DoNotifyMemoryPressure( |
MemoryPressureLevel memory_pressure_level) { |
DCHECK_NE(memory_pressure_level, MEMORY_PRESSURE_LEVEL_NONE); |
+ |
+ g_observers.Get().SyncNotify(FROM_HERE, &MemoryPressureListener::SyncNotify, |
+ memory_pressure_level); |
g_observers.Get().Notify(FROM_HERE, &MemoryPressureListener::Notify, |
memory_pressure_level); |
} |