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 4012f0f31517e560ac13692479386a68394bb083..c3907198f0f316d4d727dd81b58f38a6193df570 100644 |
| --- a/content/renderer/render_thread_impl.cc |
| +++ b/content/renderer/render_thread_impl.cc |
| @@ -1779,7 +1779,6 @@ void RenderThreadImpl::OnProcessBackgrounded(bool backgrounded) { |
| record_purge_suspend_metric_closure_.Reset( |
| base::Bind(&RenderThreadImpl::RecordPurgeAndSuspendMetrics, |
| base::Unretained(this))); |
| - is_renderer_suspended_ = false; |
| } |
| } |
| @@ -1788,7 +1787,6 @@ void RenderThreadImpl::OnProcessPurgeAndSuspend() { |
| DCHECK(!is_renderer_suspended_); |
| if (!RendererIsHidden()) |
| return; |
| - is_renderer_suspended_ = true; |
| if (base::FeatureList::IsEnabled(features::kPurgeAndSuspend)) { |
| // TODO(tasak): After enabling MemoryCoordinator, remove this Notify |
| // and follow MemoryCoordinator's request. |
| @@ -1899,13 +1897,11 @@ void RenderThreadImpl::OnProcessResume() { |
| ChildThreadImpl::OnProcessResume(); |
| DCHECK(is_renderer_suspended_); |
| - is_renderer_suspended_ = false; |
| if (base::FeatureList::IsEnabled(features::kPurgeAndSuspend)) { |
| // TODO(tasak): after enabling MemoryCoordinator, remove this Notify |
| // and follow MemoryCoordinator's request. |
| base::MemoryCoordinatorClientRegistry::GetInstance()->Notify( |
| base::MemoryState::NORMAL); |
| - renderer_scheduler_->ResumeRenderer(); |
| } |
| } |
| @@ -2297,8 +2293,10 @@ void RenderThreadImpl::OnMemoryStateChange(base::MemoryState state) { |
| } |
| switch (state) { |
| case base::MemoryState::NORMAL: |
| + ResumeRendererIfNeeded(); |
| break; |
| case base::MemoryState::THROTTLED: |
| + ResumeRendererIfNeeded(); |
| ReleaseFreeMemory(); |
| break; |
| case base::MemoryState::SUSPENDED: |
| @@ -2311,12 +2309,26 @@ void RenderThreadImpl::OnMemoryStateChange(base::MemoryState state) { |
| } |
| void RenderThreadImpl::SuspendRenderer() { |
| + DCHECK(IsMainThread()); |
| + // |is_renderer_suspende_| shouldn't be true here, but it could due to IPC |
| + // message lag. |
| + if (is_renderer_suspended_) |
|
bashi
2016/12/16 07:50:39
Chatted with tasak@ offline and he said we can't D
tasak
2016/12/16 07:55:15
I was trying to remove DCHECK related to is_render
bashi
2016/12/16 08:03:13
Thanks for the info. Then we should do early retur
|
| + return; |
| OnTrimMemoryImmediately(); |
| ReleaseFreeMemory(); |
| ClearMemory(); |
| + is_renderer_suspended_ = true; |
| renderer_scheduler_->SuspendRenderer(); |
| } |
| +void RenderThreadImpl::ResumeRendererIfNeeded() { |
| + DCHECK(IsMainThread()); |
| + if (!is_renderer_suspended_) |
| + return; |
| + renderer_scheduler_->ResumeRenderer(); |
| + is_renderer_suspended_ = false; |
| +} |
| + |
| void RenderThreadImpl::ClearMemory() { |
| // Do not call into blink if it is not initialized. |
| if (blink_platform_impl_) { |