| 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 1b0980a4f4e00ccf236f4bc2250683d0b744c3b7..93f57591149c1ee42b42b627e9af42c3169550d9 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
|
| @@ -514,6 +514,11 @@ bool TaskQueueImpl::IsEmpty() const {
|
| }
|
|
|
| bool TaskQueueImpl::HasPendingImmediateWork() const {
|
| + LazyNow lazy_now = main_thread_only().time_domain->CreateLazyNow();
|
| + return HasPendingImmediateWork(&lazy_now);
|
| +}
|
| +
|
| +bool TaskQueueImpl::HasPendingImmediateWork(LazyNow* lazy_now) const {
|
| // Any work queue tasks count as immediate work.
|
| if (!main_thread_only().delayed_work_queue->Empty() ||
|
| !main_thread_only().immediate_work_queue->Empty()) {
|
| @@ -524,7 +529,7 @@ bool TaskQueueImpl::HasPendingImmediateWork() const {
|
| // immediate work.
|
| if (!main_thread_only().delayed_incoming_queue.empty() &&
|
| main_thread_only().delayed_incoming_queue.begin()->delayed_run_time <=
|
| - main_thread_only().time_domain->CreateLazyNow().Now()) {
|
| + lazy_now->Now()) {
|
| return true;
|
| }
|
|
|
| @@ -533,6 +538,26 @@ bool TaskQueueImpl::HasPendingImmediateWork() const {
|
| return !any_thread().immediate_incoming_queue.empty();
|
| }
|
|
|
| +base::Optional<base::TimeTicks> TaskQueueImpl::GetNextScheduledWakeUp() {
|
| + LazyNow lazy_now = main_thread_only().time_domain->CreateLazyNow();
|
| + MoveReadyDelayedTasksToDelayedWorkQueue(&lazy_now);
|
| +
|
| + if (main_thread_only().delayed_incoming_queue.empty())
|
| + return base::nullopt;
|
| +
|
| + return main_thread_only().delayed_incoming_queue.begin()->delayed_run_time;
|
| +}
|
| +
|
| +base::Optional<base::TimeTicks> TaskQueueImpl::GetNextTaskRunTime() {
|
| + LazyNow lazy_now = main_thread_only().time_domain->CreateLazyNow();
|
| + MoveReadyDelayedTasksToDelayedWorkQueue(&lazy_now);
|
| +
|
| + if (HasPendingImmediateWork())
|
| + return lazy_now.Now();
|
| +
|
| + return GetNextScheduledWakeUp();
|
| +}
|
| +
|
| void TaskQueueImpl::MoveReadyDelayedTasksToDelayedWorkQueue(LazyNow* lazy_now) {
|
| // Enqueue all delayed tasks that should be running now.
|
| while (!main_thread_only().delayed_incoming_queue.empty()) {
|
|
|