| 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 9f8c9090d0af9bdce51e8464aff14a6172545c08..5877f6b1f8347c46b1d27e17c86a71555e6dd826 100644
|
| --- a/third_party/WebKit/Source/platform/scheduler/base/time_domain.cc
|
| +++ b/third_party/WebKit/Source/platform/scheduler/base/time_domain.cc
|
| @@ -33,6 +33,7 @@ void TimeDomain::UnregisterQueue(internal::TaskQueueImpl* queue) {
|
|
|
| void TimeDomain::ScheduleDelayedWork(internal::TaskQueueImpl* queue,
|
| base::TimeTicks delayed_run_time,
|
| + int sequence_num,
|
| base::TimeTicks now) {
|
| DCHECK(main_thread_checker_.CalledOnValidThread());
|
| DCHECK_EQ(queue->GetTimeDomain(), this);
|
| @@ -44,10 +45,10 @@ void TimeDomain::ScheduleDelayedWork(internal::TaskQueueImpl* queue,
|
|
|
| // O(log n)
|
| delayed_wakeup_queue_.ChangeKey(queue->heap_handle(),
|
| - {delayed_run_time, queue});
|
| + {delayed_run_time, sequence_num, queue});
|
| } else {
|
| // O(log n)
|
| - delayed_wakeup_queue_.insert({delayed_run_time, queue});
|
| + delayed_wakeup_queue_.insert({delayed_run_time, sequence_num, queue});
|
| }
|
|
|
| queue->set_scheduled_time_domain_wakeup(delayed_run_time);
|
| @@ -90,19 +91,22 @@ void TimeDomain::CancelDelayedWork(internal::TaskQueueImpl* queue) {
|
|
|
| void TimeDomain::WakeupReadyDelayedQueues(LazyNow* lazy_now) {
|
| DCHECK(main_thread_checker_.CalledOnValidThread());
|
| - // Wake up any queues with pending delayed work. Note std::multipmap stores
|
| + // Wake up any queues with pending delayed work. Note std::multimap stores
|
| // the elements sorted by key, so the begin() iterator points to the earliest
|
| // queue to wakeup.
|
| while (!delayed_wakeup_queue_.empty() &&
|
| delayed_wakeup_queue_.min().time <= lazy_now->Now()) {
|
| internal::TaskQueueImpl* queue = delayed_wakeup_queue_.min().queue;
|
| - base::Optional<base::TimeTicks> next_wakeup =
|
| - queue->WakeUpForDelayedWork(lazy_now);
|
| + base::TimeTicks next_wake_up_time;
|
| + int next_wake_up_sequence_num;
|
| + bool needs_wake_up = queue->WakeUpForDelayedWork(
|
| + lazy_now, &next_wake_up_time, &next_wake_up_sequence_num);
|
|
|
| - if (next_wakeup) {
|
| + if (needs_wake_up) {
|
| // O(log n)
|
| - delayed_wakeup_queue_.ReplaceMin({next_wakeup.value(), queue});
|
| - queue->set_scheduled_time_domain_wakeup(next_wakeup.value());
|
| + delayed_wakeup_queue_.ReplaceMin(
|
| + {next_wake_up_time, next_wake_up_sequence_num, queue});
|
| + queue->set_scheduled_time_domain_wakeup(next_wake_up_time);
|
| } else {
|
| // O(log n)
|
| delayed_wakeup_queue_.pop();
|
|
|