Index: cc/resources/resource_pool.cc |
diff --git a/cc/resources/resource_pool.cc b/cc/resources/resource_pool.cc |
index 2c4e5fd2f0ca54e110a942aa00fdcb3e2af11b0c..39b17e8c4ca4cb06f1b176b4917a4a1b01511ec7 100644 |
--- a/cc/resources/resource_pool.cc |
+++ b/cc/resources/resource_pool.cc |
@@ -10,6 +10,7 @@ |
#include <algorithm> |
#include <utility> |
+#include "base/allocator/allocator_extension.h" |
#include "base/format_macros.h" |
#include "base/strings/stringprintf.h" |
#include "base/threading/thread_task_runner_handle.h" |
@@ -75,6 +76,9 @@ ResourcePool::ResourcePool(ResourceProvider* resource_provider, |
weak_ptr_factory_(this) { |
base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider( |
this, "cc::ResourcePool", task_runner_.get()); |
+ |
+ memory_pressure_listener_.reset(new base::MemoryPressureListener( |
+ base::Bind(&ResourcePool::OnMemoryPressure, base::Unretained(this)))); |
} |
ResourcePool::~ResourcePool() { |
@@ -294,6 +298,13 @@ void ResourcePool::SetResourceUsageLimits(size_t max_memory_usage_bytes, |
ReduceResourceUsage(); |
} |
+void ResourcePool::OnMemoryPressure( |
+ base::MemoryPressureListener::MemoryPressureLevel memory_pressure_level) { |
+ while (!unused_resources_.empty()) |
+ DeleteResource(PopBack(&unused_resources_)); |
+ base::allocator::ReleaseFreeMemory(); |
esprehn
2016/08/05 23:00:57
yeah...
tasak
2016/08/08 04:47:36
Acknowledged.
|
+} |
+ |
void ResourcePool::ReduceResourceUsage() { |
while (!unused_resources_.empty()) { |
if (!ResourceUsageTooHigh()) |