Chromium Code Reviews| Index: content/renderer/render_thread_impl.cc |
| diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc |
| index 0f86870fba07207c47a15003c8884158e750c6e3..4b1958bc76eff54b8890a6698f8a2ebe9f7b25a7 100644 |
| --- a/content/renderer/render_thread_impl.cc |
| +++ b/content/renderer/render_thread_impl.cc |
| @@ -14,6 +14,7 @@ |
| #include "base/debug/trace_event.h" |
| #include "base/lazy_instance.h" |
| #include "base/logging.h" |
| +#include "base/memory/discardable_memory.h" |
| #include "base/metrics/field_trial.h" |
| #include "base/metrics/histogram.h" |
| #include "base/metrics/stats_table.h" |
| @@ -68,7 +69,9 @@ |
| #include "content/renderer/memory_benchmarking_extension.h" |
| #include "content/renderer/p2p/socket_dispatcher.h" |
| #include "content/renderer/plugin_channel_host.h" |
| +#include "content/renderer/render_process_discardable_memory_provider.h" |
| #include "content/renderer/render_process_impl.h" |
| +#include "content/renderer/render_process_visibility_manager.h" |
| #include "content/renderer/render_view_impl.h" |
| #include "content/renderer/renderer_webkitplatformsupport_impl.h" |
| #include "content/renderer/skia_benchmarking_extension.h" |
| @@ -400,6 +403,13 @@ void RenderThreadImpl::Init() { |
| RegisterExtension(MemoryBenchmarkingExtension::Get()); |
| #endif // USE_TCMALLOC |
| + if (!base::DiscardableMemoryProvider::GetInstance()) { |
|
Avi (use Gerrit)
2013/06/07 14:46:53
DISCARDABLE_MEMORY_SUPPORTED_NATIVELY?
But only i
|
| + discardable_provider_.reset(new RenderProcessDiscardableMemoryProvider); |
| + RenderProcessVisibilityManager::GetInstance()->AddObserver( |
| + discardable_provider_.get()); |
| + base::DiscardableMemoryProvider::SetInstance(discardable_provider_.get()); |
| + } |
| + |
| if (command_line.HasSwitch(switches::kEnableSkiaBenchmarking)) { |
| LOG(WARNING) << "Enabling unsafe Skia benchmarking extension."; |
| RegisterExtension(SkiaBenchmarkingExtension::Get()); |
| @@ -418,6 +428,8 @@ void RenderThreadImpl::Init() { |
| } |
| RenderThreadImpl::~RenderThreadImpl() { |
| + if (discardable_provider_) |
| + base::DiscardableMemoryProvider::SetInstance(NULL); |
| } |
| void RenderThreadImpl::Shutdown() { |
| @@ -617,6 +629,12 @@ void RenderThreadImpl::WidgetHidden() { |
| DCHECK(hidden_widget_count_ < widget_count_); |
| hidden_widget_count_++; |
| + if (discardable_provider_) { |
| + RenderProcessVisibilityManager* manager = |
| + RenderProcessVisibilityManager::GetInstance(); |
| + manager->WidgetVisibilityChanged(false); |
| + } |
| + |
| if (!GetContentClient()->renderer()->RunIdleHandlerWhenWidgetsHidden()) { |
| return; |
| } |
| @@ -628,6 +646,13 @@ void RenderThreadImpl::WidgetHidden() { |
| void RenderThreadImpl::WidgetRestored() { |
| DCHECK_GT(hidden_widget_count_, 0); |
| hidden_widget_count_--; |
| + |
| + if (discardable_provider_) { |
| + RenderProcessVisibilityManager* manager = |
| + RenderProcessVisibilityManager::GetInstance(); |
| + manager->WidgetVisibilityChanged(true); |
| + } |
| + |
| if (!GetContentClient()->renderer()->RunIdleHandlerWhenWidgetsHidden()) { |
| return; |
| } |