Chromium Code Reviews| 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 6333a681ebb1329cbce7225c37c9b2325e2d1d28..aee11b13190ddc670c0663d70bb90a755cbc8c13 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 |
| @@ -402,7 +402,7 @@ size_t TaskQueueImpl::GetNumberOfPendingTasks() const { |
| return task_count; |
| } |
| -bool TaskQueueImpl::HasPendingImmediateWork() const { |
| +bool TaskQueueImpl::HasTaskToRunImmediately() const { |
| // Any work queue tasks count as immediate work. |
| if (!main_thread_only().delayed_work_queue->Empty() || |
| !main_thread_only().immediate_work_queue->Empty()) { |
| @@ -821,8 +821,10 @@ void TaskQueueImpl::EnableOrDisableWithSelector(bool enable) { |
| return; |
| if (enable) { |
| - if (HasPendingImmediateWork()) |
| - NotifyWakeUpChangedOnMainThread(base::TimeTicks()); |
| + if (HasPendingImmediateWork() && main_thread_only().observer) { |
|
Sami
2017/05/08 17:33:37
This could also use a comment saying why we need t
altimin
2017/05/09 11:41:42
Done.
|
| + main_thread_only().observer->OnQueueNextWakeUpChanged(this, |
|
Sami
2017/05/08 17:33:37
Could you add a TODO where OnQueueNextWakeUpChange
altimin
2017/05/09 11:41:42
Done.
|
| + base::TimeTicks()); |
| + } |
| ScheduleDelayedWorkInTimeDomain(main_thread_only().time_domain->Now()); |
| @@ -899,14 +901,34 @@ void TaskQueueImpl::ScheduleDelayedWorkInTimeDomain(base::TimeTicks now) { |
| main_thread_only().time_domain->ScheduleDelayedWork( |
| this, main_thread_only().delayed_incoming_queue.top().delayed_wake_up(), |
| now); |
| +} |
| + |
| +void TaskQueueImpl::SetScheduledTimeDomainWakeUp( |
| + base::Optional<base::TimeTicks> scheduled_time_domain_wake_up) { |
| + main_thread_only().scheduled_time_domain_wake_up = |
| + scheduled_time_domain_wake_up; |
| + |
| + if (!scheduled_time_domain_wake_up) |
| + return; |
| + if (!main_thread_only().observer) |
| + return; |
| + if (HasPendingImmediateWork()) |
|
Sami
2017/05/08 17:33:37
I'm not sure why we need to ignore ready incoming
altimin
2017/05/09 11:41:42
Done.
|
| + return; |
| - NotifyWakeUpChangedOnMainThread( |
| - main_thread_only().delayed_incoming_queue.top().delayed_run_time); |
| + main_thread_only().observer->OnQueueNextWakeUpChanged( |
| + this, scheduled_time_domain_wake_up.value()); |
| } |
| -void TaskQueueImpl::NotifyWakeUpChangedOnMainThread(base::TimeTicks wake_up) { |
| - if (main_thread_only().observer) |
| - main_thread_only().observer->OnQueueNextWakeUpChanged(this, wake_up); |
| +bool TaskQueueImpl::HasPendingImmediateWork() { |
| + // Any work queue tasks count as immediate work. |
| + if (!main_thread_only().delayed_work_queue->Empty() || |
| + !main_thread_only().immediate_work_queue->Empty()) { |
| + return true; |
| + } |
| + |
| + // Finally tasks on |immediate_incoming_queue| count as immediate work. |
| + base::AutoLock lock(immediate_incoming_queue_lock_); |
| + return !immediate_incoming_queue().empty(); |
| } |
| } // namespace internal |