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

Unified Diff: third_party/WebKit/Source/platform/scheduler/base/task_queue_impl.cc

Issue 2572893002: [Reland] Dont post delayed DoWork for disabled queues. (Closed)
Patch Set: Fix compile Created 3 years, 10 months 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
Index: third_party/WebKit/Source/platform/scheduler/base/task_queue_impl.cc
diff --git a/third_party/WebKit/Source/platform/scheduler/base/task_queue_impl.cc b/third_party/WebKit/Source/platform/scheduler/base/task_queue_impl.cc
index 762f079bfccb32600c6b51b777f00741c92f19d8..fee7f311ab1eb2885fe4cf5c7f51be0844a82e76 100644
--- a/third_party/WebKit/Source/platform/scheduler/base/task_queue_impl.cc
+++ b/third_party/WebKit/Source/platform/scheduler/base/task_queue_impl.cc
@@ -276,11 +276,14 @@ void TaskQueueImpl::PushOntoDelayedIncomingQueueFromMainThread(
main_thread_only().delayed_incoming_queue.push(std::move(pending_task));
// If |pending_task| is at the head of the queue, then make sure a wakeup
- // is requested.
- if (main_thread_only().delayed_incoming_queue.top().delayed_run_time ==
- delayed_run_time) {
- main_thread_only().time_domain->ScheduleDelayedWork(
- this, pending_task.delayed_run_time, now);
+ // is requested if the queue is enabled. Note we still want to schedule a
+ // wakeup even if blocked by a fence, because we'd break throttling logic
+ // otherwise.
+ base::TimeTicks next_delayed_task =
+ main_thread_only().delayed_incoming_queue.top().delayed_run_time;
+ if (next_delayed_task == delayed_run_time && IsQueueEnabled()) {
+ main_thread_only().time_domain->ScheduleDelayedWork(this, delayed_run_time,
+ now);
}
TraceQueueSize(false);
@@ -404,7 +407,8 @@ bool TaskQueueImpl::HasPendingImmediateWork() const {
}
base::Optional<base::TimeTicks> TaskQueueImpl::GetNextScheduledWakeUp() {
- if (main_thread_only().delayed_incoming_queue.empty())
+ // Note we don't scheduled a wakeup for disabled queues.
+ if (main_thread_only().delayed_incoming_queue.empty() || !IsQueueEnabled())
return base::nullopt;
return main_thread_only().delayed_incoming_queue.top().delayed_run_time;
@@ -581,7 +585,7 @@ void TaskQueueImpl::SetTimeDomain(TimeDomain* time_domain) {
main_thread_only().time_domain = time_domain;
time_domain->RegisterQueue(this);
- if (!main_thread_only().delayed_incoming_queue.empty()) {
+ if (IsQueueEnabled() && !main_thread_only().delayed_incoming_queue.empty()) {
time_domain->ScheduleDelayedWork(
this, main_thread_only().delayed_incoming_queue.top().delayed_run_time,
time_domain->Now());
@@ -799,10 +803,18 @@ void TaskQueueImpl::EnableOrDisableWithSelector(bool enable) {
return;
if (enable) {
+ if (!main_thread_only().delayed_incoming_queue.empty()) {
+ main_thread_only().time_domain->ScheduleDelayedWork(
+ this,
+ main_thread_only().delayed_incoming_queue.top().delayed_run_time,
+ main_thread_only().time_domain->Now());
+ }
// Note the selector calls TaskQueueManager::OnTaskQueueEnabled which posts
// a DoWork if needed.
main_thread_only().task_queue_manager->selector_.EnableQueue(this);
} else {
+ if (!main_thread_only().delayed_incoming_queue.empty())
+ main_thread_only().time_domain->CancelDelayedWork(this);
main_thread_only().task_queue_manager->selector_.DisableQueue(this);
}
}
@@ -838,9 +850,12 @@ void TaskQueueImpl::SweepCanceledDelayedTasks(base::TimeTicks now) {
main_thread_only().time_domain->CancelDelayedWork(this);
} else if (first_task_runtime !=
main_thread_only().delayed_incoming_queue.top().delayed_run_time) {
- main_thread_only().time_domain->ScheduleDelayedWork(
- this, main_thread_only().delayed_incoming_queue.top().delayed_run_time,
- main_thread_only().time_domain->Now());
+ if (IsQueueEnabled()) {
+ main_thread_only().time_domain->ScheduleDelayedWork(
+ this,
+ main_thread_only().delayed_incoming_queue.top().delayed_run_time,
+ main_thread_only().time_domain->Now());
+ }
}
}

Powered by Google App Engine
This is Rietveld 408576698