Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2756)

Unified Diff: content/renderer/render_thread_impl.cc

Issue 2577313002: memory coordinator: Resume suspended renderer on NORMAL state change (Closed)
Patch Set: Remove DCHECK Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/renderer/render_thread_impl.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_) {
« no previous file with comments | « content/renderer/render_thread_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698