Commit 36722782 authored by Gyuyoung Kim's avatar Gyuyoung Kim Committed by Commit Bot

CC: Support the memory pressure handler in StagingBufferPool

StagingBufferPool has been only supporting the MemoryCoordinator.
However, it is not enabled by default. So it would be good if we
support the memory pressure handler until the MemoryCoordinator
is enabled by default. Especially, it will help low-end devices to
reduce memory usage under the out-of-memory situation.

Bug: 856527
Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel;master.tryserver.blink:linux_trusty_blink_rel
Change-Id: I52be2b732199c66ddaac015fb29aae274ff2fb1d
Reviewed-on: https://chromium-review.googlesource.com/1114559
Commit-Queue: Gyuyoung Kim <gyuyoung.kim@lge.com>
Reviewed-by: default avatarEric Karl <ericrk@chromium.org>
Cr-Commit-Position: refs/heads/master@{#571750}
parent e3da256a
......@@ -146,7 +146,12 @@ StagingBufferPool::StagingBufferPool(
DCHECK(worker_context_provider_);
base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider(
this, "cc::StagingBufferPool", base::ThreadTaskRunnerHandle::Get());
base::MemoryCoordinatorClientRegistry::GetInstance()->Register(this);
memory_pressure_listener_.reset(new base::MemoryPressureListener(
base::BindRepeating(&StagingBufferPool::OnMemoryPressure,
weak_ptr_factory_.GetWeakPtr())));
reduce_memory_usage_callback_ = base::Bind(
&StagingBufferPool::ReduceMemoryUsage, weak_ptr_factory_.GetWeakPtr());
}
......@@ -433,4 +438,17 @@ void StagingBufferPool::OnPurgeMemory() {
ReleaseBuffersNotUsedSince(base::TimeTicks() + base::TimeDelta::Max());
}
void StagingBufferPool::OnMemoryPressure(
base::MemoryPressureListener::MemoryPressureLevel level) {
base::AutoLock lock(lock_);
switch (level) {
case base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE:
case base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_MODERATE:
break;
case base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL:
ReleaseBuffersNotUsedSince(base::TimeTicks() + base::TimeDelta::Max());
break;
}
}
} // namespace cc
......@@ -13,6 +13,7 @@
#include "base/containers/circular_deque.h"
#include "base/macros.h"
#include "base/memory/memory_coordinator_client.h"
#include "base/memory/memory_pressure_listener.h"
#include "base/memory/weak_ptr.h"
#include "base/sequenced_task_runner.h"
#include "base/synchronization/lock.h"
......@@ -100,6 +101,11 @@ class CC_EXPORT StagingBufferPool
// Overriden from base::MemoryCoordinatorClient.
void OnPurgeMemory() override;
// TODO(gyuyoung): OnMemoryPressure is deprecated. So this should be removed
// when the memory coordinator is enabled by default.
void OnMemoryPressure(
base::MemoryPressureListener::MemoryPressureLevel level);
scoped_refptr<base::SequencedTaskRunner> task_runner_;
viz::RasterContextProvider* const worker_context_provider_;
const bool use_partial_raster_;
......@@ -119,6 +125,8 @@ class CC_EXPORT StagingBufferPool
bool reduce_memory_usage_pending_;
base::Closure reduce_memory_usage_callback_;
std::unique_ptr<base::MemoryPressureListener> memory_pressure_listener_;
base::WeakPtrFactory<StagingBufferPool> weak_ptr_factory_;
DISALLOW_COPY_AND_ASSIGN(StagingBufferPool);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment