summaryrefslogtreecommitdiffstats
path: root/content/renderer/render_thread_impl.cc
diff options
context:
space:
mode:
authorreveman@chromium.org <reveman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-08-13 00:06:30 +0000
committerreveman@chromium.org <reveman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-08-13 00:06:30 +0000
commit7a0e52cd39d477db3f583704d197732fba26f578 (patch)
treea65c4190ee6159738444cdcee4029cf5b8c599a2 /content/renderer/render_thread_impl.cc
parent28d123a620b3b48e5fd7c3325959dfc56f407998 (diff)
downloadchromium_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.cc14
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);
}