Chromium Code Reviews| Index: third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl.cc |
| diff --git a/third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl.cc b/third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl.cc |
| index cb11ca69f11c663c5e072675bcc88996d12937e0..a3bc89c484c05b4404e3c149e3170ce89dad350b 100644 |
| --- a/third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl.cc |
| +++ b/third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl.cc |
| @@ -95,6 +95,8 @@ RendererSchedulerImpl::RendererSchedulerImpl( |
| compositor_task_runner_( |
| helper_.NewTaskQueue(TaskQueue::Spec(TaskQueue::QueueType::COMPOSITOR) |
| .SetShouldMonitorQuiescence(true))), |
| + compositor_task_runner_enabled_voter_( |
| + compositor_task_runner_->GetQueueEnabledVoter()), |
| delayed_update_policy_runner_( |
| base::Bind(&RendererSchedulerImpl::UpdatePolicy, |
| base::Unretained(this)), |
| @@ -141,13 +143,12 @@ RendererSchedulerImpl::~RendererSchedulerImpl() { |
| TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), "RendererScheduler", |
| this); |
| - for (const scoped_refptr<TaskQueue>& loading_queue : loading_task_runners_) { |
| - loading_queue->RemoveTaskObserver( |
| + for (auto& pair : loading_task_runners_) { |
| + pair.first->RemoveTaskObserver( |
| &MainThreadOnly().loading_task_cost_estimator); |
| } |
| - for (const scoped_refptr<TaskQueue>& timer_queue : timer_task_runners_) { |
| - timer_queue->RemoveTaskObserver( |
| - &MainThreadOnly().timer_task_cost_estimator); |
| + for (auto& pair : timer_task_runners_) { |
| + pair.first->RemoveTaskObserver(&MainThreadOnly().timer_task_cost_estimator); |
| } |
| if (virtual_time_domain_) |
| @@ -285,8 +286,9 @@ scoped_refptr<TaskQueue> RendererSchedulerImpl::NewLoadingTaskRunner( |
| .SetTimeDomain(MainThreadOnly().use_virtual_time |
| ? GetVirtualTimeDomain() |
| : nullptr))); |
| - loading_task_runners_.insert(loading_task_queue); |
| - loading_task_queue->SetQueueEnabled( |
| + auto insert_result = loading_task_runners_.insert(std::make_pair( |
| + loading_task_queue, loading_task_queue->GetQueueEnabledVoter())); |
| + insert_result.first->second->SetQueueEnabled( |
| MainThreadOnly().current_policy.loading_queue_policy.is_enabled); |
| loading_task_queue->SetQueuePriority( |
| MainThreadOnly().current_policy.loading_queue_policy.priority); |
| @@ -310,8 +312,9 @@ scoped_refptr<TaskQueue> RendererSchedulerImpl::NewTimerTaskRunner( |
| .SetTimeDomain(MainThreadOnly().use_virtual_time |
| ? GetVirtualTimeDomain() |
| : nullptr))); |
| - timer_task_runners_.insert(timer_task_queue); |
| - timer_task_queue->SetQueueEnabled( |
| + auto insert_result = timer_task_runners_.insert(std::make_pair( |
| + timer_task_queue, timer_task_queue->GetQueueEnabledVoter())); |
| + insert_result.first->second->SetQueueEnabled( |
| MainThreadOnly().current_policy.timer_queue_policy.is_enabled); |
| timer_task_queue->SetQueuePriority( |
| MainThreadOnly().current_policy.timer_queue_policy.priority); |
| @@ -1093,17 +1096,18 @@ void RendererSchedulerImpl::UpdatePolicyLocked(UpdateType update_type) { |
| } |
| ApplyTaskQueuePolicy(compositor_task_runner_.get(), |
| + compositor_task_runner_enabled_voter_.get(), |
| MainThreadOnly().current_policy.compositor_queue_policy, |
| new_policy.compositor_queue_policy); |
| - for (const scoped_refptr<TaskQueue>& loading_queue : loading_task_runners_) { |
| - ApplyTaskQueuePolicy(loading_queue.get(), |
| + for (const auto& pair : loading_task_runners_) { |
| + ApplyTaskQueuePolicy(pair.first.get(), pair.second.get(), |
| MainThreadOnly().current_policy.loading_queue_policy, |
| new_policy.loading_queue_policy); |
| } |
| - for (const scoped_refptr<TaskQueue>& timer_queue : timer_task_runners_) { |
| - ApplyTaskQueuePolicy(timer_queue.get(), |
| + for (const auto& pair : timer_task_runners_) { |
| + ApplyTaskQueuePolicy(pair.first.get(), pair.second.get(), |
| MainThreadOnly().current_policy.timer_queue_policy, |
| new_policy.timer_queue_policy); |
| } |
| @@ -1113,7 +1117,7 @@ void RendererSchedulerImpl::UpdatePolicyLocked(UpdateType update_type) { |
| // TODO(alexclarke): We shouldn't have to prioritize the default queue, but it |
| // appears to be necessary since the order of loading tasks and IPCs (which |
| // are mostly dispatched on the default queue) need to be preserved. |
| - ApplyTaskQueuePolicy(helper_.DefaultTaskRunner().get(), |
| + ApplyTaskQueuePolicy(helper_.DefaultTaskRunner().get(), nullptr, |
| MainThreadOnly().current_policy.default_queue_policy, |
| new_policy.default_queue_policy); |
| if (MainThreadOnly().rail_mode_observer && |
| @@ -1137,10 +1141,12 @@ void RendererSchedulerImpl::UpdatePolicyLocked(UpdateType update_type) { |
| void RendererSchedulerImpl::ApplyTaskQueuePolicy( |
| TaskQueue* task_queue, |
| + TaskQueue::QueueEnabledVoter* task_queue_enabled_voter, |
| const TaskQueuePolicy& old_task_queue_policy, |
| const TaskQueuePolicy& new_task_queue_policy) const { |
| - if (old_task_queue_policy.is_enabled != new_task_queue_policy.is_enabled) { |
| - task_queue->SetQueueEnabled(new_task_queue_policy.is_enabled); |
| + if (task_queue_enabled_voter && |
| + old_task_queue_policy.is_enabled != new_task_queue_policy.is_enabled) { |
| + task_queue_enabled_voter->SetQueueEnabled(new_task_queue_policy.is_enabled); |
| } |
|
Sami
2016/11/29 14:45:17
If we don't have a voter:
DCHECK(new_task_queue
alex clarke (OOO till 29th)
2016/11/29 16:49:11
Done.
|
| if (old_task_queue_policy.priority != new_task_queue_policy.priority) |
| @@ -1274,7 +1280,7 @@ void RendererSchedulerImpl::SuspendTimerQueue() { |
| #ifndef NDEBUG |
| DCHECK(!default_timer_task_runner_->IsQueueEnabled()); |
| for (const auto& runner : timer_task_runners_) { |
| - DCHECK(!runner->IsQueueEnabled()); |
| + DCHECK(!runner.first->IsQueueEnabled()); |
| } |
| #endif |
| } |