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

Unified Diff: base/memory/discardable_memory_provider.cc

Issue 129963002: Re-land: base: Fix registering of memory pressure listeners used when emulating discardable memory. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Temporarily disable memory_pressure_listener DCHECK Created 6 years, 11 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/discardable_memory_provider.h ('k') | base/memory/discardable_memory_provider_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/memory/discardable_memory_provider.cc
diff --git a/base/memory/discardable_memory_provider.cc b/base/memory/discardable_memory_provider.cc
index 1c84339eba7aea5877446f893a94a019c2605def..eeffa5b25ad1c7392791f0f639feeeea53f7b365 100644
--- a/base/memory/discardable_memory_provider.cc
+++ b/base/memory/discardable_memory_provider.cc
@@ -29,10 +29,7 @@ DiscardableMemoryProvider::DiscardableMemoryProvider()
bytes_allocated_(0),
discardable_memory_limit_(kDefaultDiscardableMemoryLimit),
bytes_to_reclaim_under_moderate_pressure_(
- kDefaultBytesToReclaimUnderModeratePressure),
- memory_pressure_listener_(
- base::Bind(&DiscardableMemoryProvider::NotifyMemoryPressure,
- Unretained(this))) {
+ kDefaultBytesToReclaimUnderModeratePressure) {
}
DiscardableMemoryProvider::~DiscardableMemoryProvider() {
@@ -40,18 +37,20 @@ DiscardableMemoryProvider::~DiscardableMemoryProvider() {
DCHECK_EQ(0u, bytes_allocated_);
}
-void DiscardableMemoryProvider::NotifyMemoryPressure(
- MemoryPressureListener::MemoryPressureLevel pressure_level) {
- switch (pressure_level) {
- case MemoryPressureListener::MEMORY_PRESSURE_MODERATE:
- Purge();
- return;
- case MemoryPressureListener::MEMORY_PRESSURE_CRITICAL:
- PurgeAll();
- return;
- }
+void DiscardableMemoryProvider::RegisterMemoryPressureListener() {
+ AutoLock lock(lock_);
+ DCHECK(base::MessageLoop::current());
+ DCHECK(!memory_pressure_listener_);
+ memory_pressure_listener_.reset(
+ new MemoryPressureListener(
+ base::Bind(&DiscardableMemoryProvider::OnMemoryPressure,
+ Unretained(this))));
+}
- NOTREACHED();
+void DiscardableMemoryProvider::UnregisterMemoryPressureListener() {
+ AutoLock lock(lock_);
+ DCHECK(memory_pressure_listener_);
+ memory_pressure_listener_.reset();
}
void DiscardableMemoryProvider::SetDiscardableMemoryLimit(size_t bytes) {
@@ -69,6 +68,11 @@ void DiscardableMemoryProvider::SetBytesToReclaimUnderModeratePressure(
void DiscardableMemoryProvider::Register(
const DiscardableMemory* discardable, size_t bytes) {
AutoLock lock(lock_);
+ // A registered memory listener is currently required. This DCHECK can be
+ // moved or removed if we decide that it's useful to relax this condition.
+ // TODO(reveman): Enable this DCHECK when skia and blink are able to
+ // register memory pressure listeners. crbug.com/333907
+ // DCHECK(memory_pressure_listener_);
reveman 2014/01/13 18:22:28 Disabled this DCHECK for now as it's causing webki
DCHECK(allocations_.Peek(discardable) == allocations_.end());
allocations_.Put(discardable, Allocation(bytes));
}
@@ -169,6 +173,20 @@ size_t DiscardableMemoryProvider::GetBytesAllocatedForTest() const {
return bytes_allocated_;
}
+void DiscardableMemoryProvider::OnMemoryPressure(
+ MemoryPressureListener::MemoryPressureLevel pressure_level) {
+ switch (pressure_level) {
+ case MemoryPressureListener::MEMORY_PRESSURE_MODERATE:
+ Purge();
+ return;
+ case MemoryPressureListener::MEMORY_PRESSURE_CRITICAL:
+ PurgeAll();
+ return;
+ }
+
+ NOTREACHED();
+}
+
void DiscardableMemoryProvider::Purge() {
AutoLock lock(lock_);
« no previous file with comments | « base/memory/discardable_memory_provider.h ('k') | base/memory/discardable_memory_provider_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698