| Index: third_party/WebKit/Source/platform/scheduler/base/time_domain.cc
|
| diff --git a/third_party/WebKit/Source/platform/scheduler/base/time_domain.cc b/third_party/WebKit/Source/platform/scheduler/base/time_domain.cc
|
| index 5837384e776dbb4f8e12d192a063927f9f2c2550..3093132d23a9c932bd99b8be8d4787800dfeca79 100644
|
| --- a/third_party/WebKit/Source/platform/scheduler/base/time_domain.cc
|
| +++ b/third_party/WebKit/Source/platform/scheduler/base/time_domain.cc
|
| @@ -159,14 +159,16 @@ void TimeDomain::UpdateWorkQueues(LazyNow lazy_now) {
|
|
|
| MoveNewlyUpdatableQueuesIntoUpdatableQueueSet();
|
|
|
| - auto iter = updatable_queue_set_.begin();
|
| + std::set<internal::TaskQueueImpl*>::iterator iter =
|
| + updatable_queue_set_.begin();
|
| while (iter != updatable_queue_set_.end()) {
|
| - internal::TaskQueueImpl* queue = *iter++;
|
| - // NOTE Update work queue may erase itself from |updatable_queue_set_|.
|
| - // This is fine, erasing an element won't invalidate any interator, as long
|
| - // as the iterator isn't the element being delated.
|
| - if (queue->immediate_work_queue()->Empty())
|
| - queue->UpdateImmediateWorkQueue();
|
| + std::set<internal::TaskQueueImpl*>::iterator queue_it = iter++;
|
| + internal::TaskQueueImpl* queue = *queue_it;
|
| +
|
| + // Update the queue and remove from the set if subsequent updates are not
|
| + // required.
|
| + if (!queue->MaybeUpdateImmediateWorkQueues())
|
| + updatable_queue_set_.erase(queue_it);
|
| }
|
| }
|
|
|
| @@ -196,7 +198,7 @@ void TimeDomain::WakeupReadyDelayedQueues(LazyNow* lazy_now) {
|
| // in which EnqueueTaskLocks is called is respected when choosing which
|
| // queue to execute a task from.
|
| if (dedup_set.insert(next_wakeup->second).second) {
|
| - next_wakeup->second->UpdateDelayedWorkQueue(lazy_now);
|
| + next_wakeup->second->MoveReadyDelayedTasksToDelayedWorkQueue(lazy_now);
|
| }
|
| delayed_wakeup_multimap_.erase(next_wakeup);
|
| }
|
|
|