Index: components/scheduler/renderer/renderer_scheduler_impl.cc |
diff --git a/components/scheduler/renderer/renderer_scheduler_impl.cc b/components/scheduler/renderer/renderer_scheduler_impl.cc |
index 5add212d251922ed56c12f00ebc0a7a214e913e9..6292013f7ae0ba8458337964a256856c67b210b9 100644 |
--- a/components/scheduler/renderer/renderer_scheduler_impl.cc |
+++ b/components/scheduler/renderer/renderer_scheduler_impl.cc |
@@ -121,6 +121,7 @@ RendererSchedulerImpl::MainThreadOnly::MainThreadOnly( |
renderer_backgrounded(false), |
timer_queue_suspension_when_backgrounded_enabled(false), |
timer_queue_suspended_when_backgrounded(false), |
+ queue_suspended(false), |
was_shutdown(false), |
loading_tasks_seem_expensive(false), |
timer_tasks_seem_expensive(false), |
@@ -832,6 +833,12 @@ void RendererSchedulerImpl::UpdatePolicyLocked(UpdateType update_type) { |
new_policy.timer_queue_policy.is_enabled = false; |
} |
+ if (MainThreadOnly().queue_suspended) { |
+ new_policy.compositor_queue_policy.is_enabled = false; |
+ new_policy.loading_queue_policy.is_enabled = false; |
+ new_policy.control_queue_policy.is_enabled = false; |
+ } |
+ |
// Tracing is done before the early out check, because it's quite possible we |
// will otherwise miss this information in traces. |
TRACE_EVENT_OBJECT_SNAPSHOT_WITH_ID( |
@@ -882,7 +889,13 @@ void RendererSchedulerImpl::UpdatePolicyLocked(UpdateType update_type) { |
MainThreadOnly().current_policy.default_queue_policy, |
new_policy.default_queue_policy); |
- DCHECK(compositor_task_runner_->IsQueueEnabled()); |
+ ApplyTaskQueuePolicy(helper_.ControlTaskRunner().get(), |
+ MainThreadOnly().current_policy.control_queue_policy, |
+ new_policy.control_queue_policy); |
+ ApplyTaskQueuePolicy(helper_.ControlAfterWakeUpTaskRunner().get(), |
+ MainThreadOnly().current_policy.control_queue_policy, |
+ new_policy.control_queue_policy); |
+ |
MainThreadOnly().current_policy = new_policy; |
} |
@@ -1214,6 +1227,7 @@ void RendererSchedulerImpl::SuspendTimerQueueWhenBackgrounded() { |
return; |
MainThreadOnly().timer_queue_suspended_when_backgrounded = true; |
+ MainThreadOnly().queue_suspended = true; |
ForceUpdatePolicy(); |
} |
@@ -1223,6 +1237,7 @@ void RendererSchedulerImpl::ResumeTimerQueueWhenForegrounded() { |
return; |
MainThreadOnly().timer_queue_suspended_when_backgrounded = false; |
+ MainThreadOnly().queue_suspended = false; |
ForceUpdatePolicy(); |
} |