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

Unified Diff: base/memory/memory_pressure_listener.cc

Issue 1749073002: Do V8 GC ASAP if system memory is pressured (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 10 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: 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);
}

Powered by Google App Engine
This is Rietveld 408576698