| 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()) { | 
|  |