diff options
author | reveman@chromium.org <reveman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-08-13 00:06:30 +0000 |
---|---|---|
committer | reveman@chromium.org <reveman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-08-13 00:06:30 +0000 |
commit | 7a0e52cd39d477db3f583704d197732fba26f578 (patch) | |
tree | a65c4190ee6159738444cdcee4029cf5b8c599a2 /content/renderer/render_thread_impl.cc | |
parent | 28d123a620b3b48e5fd7c3325959dfc56f407998 (diff) | |
download | chromium_src-7a0e52cd39d477db3f583704d197732fba26f578.zip chromium_src-7a0e52cd39d477db3f583704d197732fba26f578.tar.gz chromium_src-7a0e52cd39d477db3f583704d197732fba26f578.tar.bz2 |
Re-land: base: Introduce an explicit call for reducing emulated discardable memory usage.
This removes the use of memory pressure signals from discardable memory
system and instead introduces an explicit call for reducing emulated
discardable memory that the renderer can call when all widgets are hidden
until we have a better mechanism in place.
BUG=398087
TEST=base_unittests,content_browsertests
Review URL: https://codereview.chromium.org/448173002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@289127 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/renderer/render_thread_impl.cc')
-rw-r--r-- | content/renderer/render_thread_impl.cc | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc index a484c5c..6c449b0 100644 --- a/content/renderer/render_thread_impl.cc +++ b/content/renderer/render_thread_impl.cc @@ -15,6 +15,7 @@ #include "base/lazy_instance.h" #include "base/logging.h" #include "base/memory/discardable_memory.h" +#include "base/memory/discardable_memory_emulated.h" #include "base/memory/shared_memory.h" #include "base/metrics/field_trial.h" #include "base/metrics/histogram.h" @@ -182,6 +183,9 @@ const int kMaxRasterThreads = 64; // allocation that exceeds this limit. const size_t kImageCacheSingleAllocationByteLimit = 64 * 1024 * 1024; +const size_t kEmulatedDiscardableMemoryBytesToKeepWhenWidgetsHidden = + 4 * 1024 * 1024; + // Keep the global RenderThreadImpl in a TLS slot so it is impossible to access // incorrectly from the wrong thread. base::LazyInstance<base::ThreadLocalPointer<RenderThreadImpl> > @@ -548,10 +552,6 @@ void RenderThreadImpl::Init() { base::DiscardableMemory::SetPreferredType(type); - // Allow discardable memory implementations to register memory pressure - // listeners. - base::DiscardableMemory::RegisterMemoryPressureListeners(); - // AllocateGpuMemoryBuffer must be used exclusively on one thread but // it doesn't have to be the same thread RenderThreadImpl is created on. allocate_gpu_memory_buffer_thread_checker_.DetachFromThread(); @@ -1628,6 +1628,12 @@ void RenderThreadImpl::WidgetHidden() { hidden_widget_count_++; if (widget_count_ && hidden_widget_count_ == widget_count_) { + // TODO(reveman): Remove this when we have a better mechanism to prevent + // total discardable memory used by all renderers from growing too large. + base::internal::DiscardableMemoryEmulated:: + ReduceMemoryUsageUntilWithinLimit( + kEmulatedDiscardableMemoryBytesToKeepWhenWidgetsHidden); + if (GetContentClient()->renderer()->RunIdleHandlerWhenWidgetsHidden()) ScheduleIdleHandler(kInitialIdleHandlerDelayMs); } |