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

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

Issue 2640763003: Optimize away updatable_queue_set_ (Closed)
Patch Set: Fix lock issue plus rename OnPushQueue Created 3 years, 11 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 a0bc14200139e176ee03b6dccefa0d8a29270d67..8e06874113eacc1cd036da122aa454beacacf936 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
@@ -154,8 +154,11 @@ TaskQueueImpl::MainThreadOnly::MainThreadOnly(
TimeDomain* time_domain)
: task_queue_manager(task_queue_manager),
time_domain(time_domain),
- delayed_work_queue(new WorkQueue(task_queue, "delayed")),
- immediate_work_queue(new WorkQueue(task_queue, "immediate")),
+ delayed_work_queue(
+ new WorkQueue(task_queue, "delayed", WorkQueue::QueueType::DELAYED)),
+ immediate_work_queue(new WorkQueue(task_queue,
+ "immediate",
+ WorkQueue::QueueType::IMMEDIATE)),
set_index(0),
is_enabled_refcount(0),
voter_refcount(0),
@@ -326,7 +329,7 @@ void TaskQueueImpl::PushOntoImmediateIncomingQueueLocked(
EnqueueOrder sequence_number,
bool nestable) {
if (any_thread().immediate_incoming_queue.empty())
- any_thread().time_domain->RegisterAsUpdatableTaskQueue(this);
+ any_thread().time_domain->OnQueueHasIncomingImmediateWork(this);
// If the |immediate_incoming_queue| is empty we need a DoWork posted to make
// it run.
if (any_thread().immediate_incoming_queue.empty()) {
@@ -347,6 +350,20 @@ void TaskQueueImpl::PushOntoImmediateIncomingQueueLocked(
TraceQueueSize(true);
}
+void TaskQueueImpl::ReloadImmediateWorkQueueIfEmpty() {
+ if (!main_thread_only().immediate_work_queue->Empty())
+ return;
+
+ main_thread_only().immediate_work_queue->ReloadEmptyImmediateQueue();
+}
+
+WTF::Deque<TaskQueueImpl::Task> TaskQueueImpl::TakeImmediateIncomingQueue() {
+ base::AutoLock lock(any_thread_lock_);
+ WTF::Deque<TaskQueueImpl::Task> queue;
+ queue.swap(any_thread().immediate_incoming_queue);
+ return queue;
+}
+
bool TaskQueueImpl::IsEmpty() const {
if (!main_thread_only().delayed_work_queue->Empty() ||
!main_thread_only().delayed_incoming_queue.empty() ||
@@ -422,20 +439,6 @@ void TaskQueueImpl::WakeUpForDelayedWork(LazyNow* lazy_now) {
}
}
-bool TaskQueueImpl::MaybeUpdateImmediateWorkQueues() {
- if (!main_thread_only().task_queue_manager)
- return false;
-
- if (!main_thread_only().immediate_work_queue->Empty())
- return true;
-
- base::AutoLock lock(any_thread_lock_);
- main_thread_only().immediate_work_queue->SwapLocked(
- any_thread().immediate_incoming_queue);
- // |immediate_work_queue| is now empty so updates are no longer required.
- return false;
-}
-
void TaskQueueImpl::TraceQueueSize(bool is_locked) const {
bool is_tracing;
TRACE_EVENT_CATEGORY_GROUP_ENABLED(disabled_by_default_tracing_category_,
@@ -577,7 +580,7 @@ void TaskQueueImpl::SetTimeDomain(TimeDomain* time_domain) {
any_thread().time_domain = time_domain;
}
// We rely here on TimeDomain::MigrateQueue being thread-safe to use with
- // TimeDomain::Register/UnregisterAsUpdatableTaskQueue.
+ // TimeDomain::Register.
main_thread_only().time_domain->MigrateQueue(this, time_domain);
main_thread_only().time_domain = time_domain;
}
@@ -799,8 +802,8 @@ void TaskQueueImpl::EnableOrDisableWithSelector(bool enable) {
return;
if (enable) {
- // Note it's the job of the selector to tell the TaskQueueManager if
- // a DoWork needs posting.
+ // Note the selector calls TaskQueueManager::OnTaskQueueEnabled which posts
+ // a DoWork if needed.
main_thread_only().task_queue_manager->selector_.EnableQueue(this);
} else {
main_thread_only().task_queue_manager->selector_.DisableQueue(this);
@@ -836,6 +839,12 @@ void TaskQueueImpl::SweepCanceledDelayedTasks(base::TimeTicks now) {
main_thread_only().delayed_incoming_queue = std::move(remaining_tasks);
}
+void TaskQueueImpl::PushImmediateIncomingTaskForTest(
+ TaskQueueImpl::Task&& task) {
+ base::AutoLock lock(any_thread_lock_);
+ any_thread().immediate_incoming_queue.push_back(std::move(task));
+}
+
} // namespace internal
} // namespace scheduler
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698