Commit a46fe395 authored by Katie Dillon's avatar Katie Dillon Committed by Commit Bot

[scheduler] Use PrioritisationType instead of QueueClass for compositor

priority decisions.

This CL adds a prioritisation type for the compositor queue and uses
that inside of computePriority instead of QueueClass. This is more clear
than QueueClass (since QueueClass::kCompositor includes other task
queues that have a fixed priority). In addition, this CL adds some
DCHECKS to ensure that we only create one queue of this type since
there should only be one main thread compositor task queue.

Change-Id: I88825288476c73e46739214bad61c2d3c8b2af93
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2300881
Commit-Queue: Katie Dillon <kdillon@chromium.org>
Reviewed-by: default avatarAlexander Timin <altimin@chromium.org>
Reviewed-by: default avatarScott Haseley <shaseley@chromium.org>
Cr-Commit-Position: refs/heads/master@{#792703}
parent d9003757
......@@ -63,6 +63,20 @@ MainThreadSchedulerHelper::DeprecatedDefaultTaskRunner() {
scoped_refptr<MainThreadTaskQueue> MainThreadSchedulerHelper::NewTaskQueue(
const MainThreadTaskQueue::QueueCreationParams& params) {
#if DCHECK_IS_ON()
// This check is to ensure that we only create one queue with kCompositor
// prioritisation type, ie one compositor task queue, since elsewhere we
// assume there is only one when making priority decisions.
if (params.queue_traits.prioritisation_type ==
MainThreadTaskQueue::QueueTraits::PrioritisationType::kCompositor) {
DCHECK(
!created_compositor_task_queue_ ||
params.queue_traits.prioritisation_type !=
MainThreadTaskQueue::QueueTraits::PrioritisationType::kCompositor);
created_compositor_task_queue_ = true;
}
#endif // DCHECK_IS_ON()
scoped_refptr<MainThreadTaskQueue> task_queue =
sequence_manager_->CreateTaskQueueWithType<MainThreadTaskQueue>(
params.spec, params, main_thread_scheduler_);
......
......@@ -43,6 +43,10 @@ class PLATFORM_EXPORT MainThreadSchedulerHelper : public SchedulerHelper {
const scoped_refptr<MainThreadTaskQueue> default_task_queue_;
const scoped_refptr<MainThreadTaskQueue> control_task_queue_;
#if DCHECK_IS_ON()
bool created_compositor_task_queue_ = false;
#endif // DCHECK_IS_ON()
DISALLOW_COPY_AND_ASSIGN(MainThreadSchedulerHelper);
};
......
......@@ -194,10 +194,12 @@ MainThreadSchedulerImpl::MainThreadSchedulerImpl(
find_in_page_budget_pool_controller_(
new FindInPageBudgetPoolController(this)),
control_task_queue_(helper_.ControlMainThreadTaskQueue()),
compositor_task_queue_(
helper_.NewTaskQueue(MainThreadTaskQueue::QueueCreationParams(
MainThreadTaskQueue::QueueType::kCompositor)
.SetShouldMonitorQuiescence(true))),
compositor_task_queue_(helper_.NewTaskQueue(
MainThreadTaskQueue::QueueCreationParams(
MainThreadTaskQueue::QueueType::kCompositor)
.SetShouldMonitorQuiescence(true)
.SetPrioritisationType(MainThreadTaskQueue::QueueTraits::
PrioritisationType::kCompositor))),
compositor_task_queue_enabled_voter_(
compositor_task_queue_->CreateQueueEnabledVoter()),
memory_purge_task_queue_(helper_.NewTaskQueue(
......@@ -2672,8 +2674,8 @@ TaskQueue::QueuePriority MainThreadSchedulerImpl::ComputePriority(
return fixed_priority.value();
}
if (task_queue->queue_class() ==
MainThreadTaskQueue::QueueClass::kCompositor) {
if (task_queue->GetPrioritisationType() ==
MainThreadTaskQueue::QueueTraits::PrioritisationType::kCompositor) {
return main_thread_only().current_policy.compositor_priority();
}
......
......@@ -133,8 +133,9 @@ class PLATFORM_EXPORT MainThreadTaskQueue
kExperimentalDatabase = 6,
kJavaScriptTimer = 7,
kHighPriorityLocalFrame = 8,
kCompositor = 9, // Main-thread only.
kCount = 9
kCount = 10
};
// kPrioritisationTypeWidthBits is the number of bits required
......@@ -285,6 +286,13 @@ class PLATFORM_EXPORT MainThreadTaskQueue
return *this;
}
QueueCreationParams SetPrioritisationType(
QueueTraits::PrioritisationType type) {
queue_traits = queue_traits.SetPrioritisationType(type);
ApplyQueueTraitsToSpec();
return *this;
}
QueueCreationParams SetQueueTraits(QueueTraits value) {
queue_traits = value;
ApplyQueueTraitsToSpec();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment