Commit 9868e925 authored by Katie Dillon's avatar Katie Dillon Committed by Commit Bot

[scheduling] Do not call UpdatePolicy when changing compositor priority.

Removing two full updatePolicy calls as they aren't necessary when only
changing the compositor priority. We DCHECK that there is only one
compositor task queue so directly changing the policy and computing
the new priority for just the compositor task queue is sufficient and
avoids the extra steps of a full policy update.

Change-Id: I7f8226e01b42032ea893a5347a1a0fdad2bf5c2d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2302971
Commit-Queue: Katie Dillon <kdillon@chromium.org>
Reviewed-by: default avatarScott Haseley <shaseley@chromium.org>
Cr-Commit-Position: refs/heads/master@{#796451}
parent 8db30317
...@@ -1479,28 +1479,6 @@ void MainThreadSchedulerImpl::UpdatePolicyLocked(UpdateType update_type) { ...@@ -1479,28 +1479,6 @@ void MainThreadSchedulerImpl::UpdatePolicyLocked(UpdateType update_type) {
NOTREACHED(); NOTREACHED();
} }
if (main_thread_only().prioritize_compositing_after_input) {
new_policy.compositor_priority() =
base::sequence_manager::TaskQueue::QueuePriority::kVeryHighPriority;
} else if (scheduling_settings_
.prioritize_compositing_and_loading_during_early_loading &&
current_use_case() == UseCase::kEarlyLoading) {
new_policy.compositor_priority() =
base::sequence_manager::TaskQueue::QueuePriority::kHighPriority;
new_policy.should_prioritize_loading_with_compositing() = true;
} else {
base::Optional<TaskQueue::QueuePriority> computed_compositor_priority =
ComputeCompositorPriorityFromUseCase();
if (computed_compositor_priority) {
new_policy.compositor_priority() = computed_compositor_priority.value();
} else if (main_thread_only()
.compositor_priority_experiments.IsExperimentActive()) {
new_policy.compositor_priority() =
main_thread_only()
.compositor_priority_experiments.GetCompositorPriority();
}
}
// TODO(skyostil): Add an idle state for foreground tabs too. // TODO(skyostil): Add an idle state for foreground tabs too.
if (main_thread_only().renderer_hidden) if (main_thread_only().renderer_hidden)
new_policy.rail_mode() = RAILMode::kIdle; new_policy.rail_mode() = RAILMode::kIdle;
...@@ -1520,8 +1498,16 @@ void MainThreadSchedulerImpl::UpdatePolicyLocked(UpdateType update_type) { ...@@ -1520,8 +1498,16 @@ void MainThreadSchedulerImpl::UpdatePolicyLocked(UpdateType update_type) {
new_policy.timer_queue_policy().use_virtual_time = true; new_policy.timer_queue_policy().use_virtual_time = true;
} }
if (scheduling_settings_
.prioritize_compositing_and_loading_during_early_loading &&
current_use_case() == UseCase::kEarlyLoading) {
new_policy.should_prioritize_loading_with_compositing() = true;
}
new_policy.should_disable_throttling() = main_thread_only().use_virtual_time; new_policy.should_disable_throttling() = main_thread_only().use_virtual_time;
new_policy.compositor_priority() = ComputeCompositorPriority();
new_policy.find_in_page_priority() = new_policy.find_in_page_priority() =
find_in_page_budget_pool_controller_->CurrentTaskPriority(); find_in_page_budget_pool_controller_->CurrentTaskPriority();
...@@ -2725,13 +2711,41 @@ void MainThreadSchedulerImpl::SetPrioritizeCompositingAfterInput( ...@@ -2725,13 +2711,41 @@ void MainThreadSchedulerImpl::SetPrioritizeCompositingAfterInput(
} }
main_thread_only().prioritize_compositing_after_input = main_thread_only().prioritize_compositing_after_input =
prioritize_compositing_after_input; prioritize_compositing_after_input;
UpdatePolicy(); UpdateCompositorPolicy();
} }
void MainThreadSchedulerImpl:: void MainThreadSchedulerImpl::
OnCompositorPriorityExperimentUpdateCompositorPriority() { OnCompositorPriorityExperimentUpdateCompositorPriority() {
if (!ComputeCompositorPriorityFromUseCase()) UpdateCompositorPolicy();
UpdatePolicy(); }
TaskQueue::QueuePriority MainThreadSchedulerImpl::ComputeCompositorPriority()
const {
if (main_thread_only().prioritize_compositing_after_input) {
return TaskQueue::QueuePriority::kVeryHighPriority;
} else if (scheduling_settings_
.prioritize_compositing_and_loading_during_early_loading &&
current_use_case() == UseCase::kEarlyLoading) {
return TaskQueue::QueuePriority::kHighPriority;
} else {
base::Optional<TaskQueue::QueuePriority> computed_compositor_priority =
ComputeCompositorPriorityFromUseCase();
if (computed_compositor_priority) {
return computed_compositor_priority.value();
} else if (main_thread_only()
.compositor_priority_experiments.IsExperimentActive()) {
return main_thread_only()
.compositor_priority_experiments.GetCompositorPriority();
}
}
return TaskQueue::QueuePriority::kNormalPriority;
}
void MainThreadSchedulerImpl::UpdateCompositorPolicy() {
main_thread_only().current_policy.compositor_priority() =
ComputeCompositorPriority();
CompositorTaskQueue()->SetQueuePriority(
ComputePriority(CompositorTaskQueue().get()));
} }
base::Optional<TaskQueue::QueuePriority> base::Optional<TaskQueue::QueuePriority>
......
...@@ -772,6 +772,14 @@ class PLATFORM_EXPORT MainThreadSchedulerImpl ...@@ -772,6 +772,14 @@ class PLATFORM_EXPORT MainThreadSchedulerImpl
// trigger a priority update. // trigger a priority update.
bool ShouldUpdateTaskQueuePriorities(Policy new_policy) const; bool ShouldUpdateTaskQueuePriorities(Policy new_policy) const;
// Computes compositor priority based on various experiments and
// the use case. Defaults to kNormalPriority.
TaskQueue::QueuePriority ComputeCompositorPriority() const;
// Used to update the compositor policy on the main thread when there is a
// change in the compositor priority.
void UpdateCompositorPolicy();
// Computes the priority for compositing based on the current use case. // Computes the priority for compositing based on the current use case.
// Returns nullopt if the use case does not need to set the priority. // Returns nullopt if the use case does not need to set the priority.
base::Optional<TaskQueue::QueuePriority> base::Optional<TaskQueue::QueuePriority>
......
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