Chromium Code Reviews| Index: third_party/WebKit/Source/platform/scheduler/base/task_queue_manager.h |
| diff --git a/third_party/WebKit/Source/platform/scheduler/base/task_queue_manager.h b/third_party/WebKit/Source/platform/scheduler/base/task_queue_manager.h |
| index 801682779e7a8d1e5dae8293f92cfe8533691fc0..da3442c285546afc64df841777f1986f197edcbc 100644 |
| --- a/third_party/WebKit/Source/platform/scheduler/base/task_queue_manager.h |
| +++ b/third_party/WebKit/Source/platform/scheduler/base/task_queue_manager.h |
| @@ -8,6 +8,7 @@ |
| #include <map> |
| #include "base/atomic_sequence_num.h" |
| +#include "base/cancelable_callback.h" |
| #include "base/debug/task_annotator.h" |
| #include "base/macros.h" |
| #include "base/memory/weak_ptr.h" |
| @@ -16,6 +17,7 @@ |
| #include "base/synchronization/lock.h" |
| #include "base/threading/thread_checker.h" |
| #include "platform/scheduler/base/enqueue_order.h" |
| +#include "platform/scheduler/base/moveable_auto_lock.h" |
| #include "platform/scheduler/base/task_queue_impl.h" |
| #include "platform/scheduler/base/task_queue_selector.h" |
| @@ -159,9 +161,6 @@ class BLINK_PLATFORM_EXPORT TaskQueueManager |
| }; |
| // Unregisters a TaskQueue previously created by |NewTaskQueue()|. |
| - // NOTE we have to flush the queue from |newly_updatable_| which means as a |
| - // side effect MoveNewlyUpdatableQueuesIntoUpdatableQueueSet is called by this |
| - // function. |
| void UnregisterTaskQueue(scoped_refptr<internal::TaskQueueImpl> task_queue); |
| // TaskQueueSelector::Observer implementation: |
| @@ -176,7 +175,12 @@ class BLINK_PLATFORM_EXPORT TaskQueueManager |
| void DidQueueTask(const internal::TaskQueueImpl::Task& pending_task); |
| // Use the selector to choose a pending task and run it. |
| - void DoWork(base::TimeTicks run_time, bool from_main_thread); |
| + void DoWork(bool delayed); |
| + |
| + // Post a DoWork continuation if |next_delay| is not empty. |
| + void PostDoWorkContinuationLocked(base::Optional<base::TimeDelta> next_delay, |
| + LazyNow* lazy_now, |
| + MoveableAutoLock&& lock); |
| // Delayed Tasks with run_times <= Now() are enqueued onto the work queue and |
| // reloads any empty work queues. |
| @@ -212,7 +216,8 @@ class BLINK_PLATFORM_EXPORT TaskQueueManager |
| // Calls DelayTillNextTask on all time domains and returns the smallest delay |
| // requested if any. |
| - base::Optional<base::TimeDelta> ComputeDelayTillNextTask(LazyNow* lazy_now); |
| + base::Optional<base::TimeDelta> ComputeDelayTillNextTaskLocked( |
| + LazyNow* lazy_now); |
| void MaybeRecordTaskDelayHistograms( |
| const internal::TaskQueueImpl::Task& pending_task, |
| @@ -222,6 +227,10 @@ class BLINK_PLATFORM_EXPORT TaskQueueManager |
| AsValueWithSelectorResult(bool should_run, |
| internal::WorkQueue* selected_work_queue) const; |
| + void MaybeScheduleImmediateWorkLocked( |
| + const tracked_objects::Location& from_here, |
| + MoveableAutoLock&& lock); |
| + |
| // Adds |queue| to |any_thread().has_incoming_immediate_work_| and if |
| // |queue_is_blocked| is false it makes sure a DoWork is posted. |
| // Can be called from any thread. |
| @@ -249,22 +258,20 @@ class BLINK_PLATFORM_EXPORT TaskQueueManager |
| scoped_refptr<TaskQueueManagerDelegate> delegate_; |
| internal::TaskQueueSelector selector_; |
| - base::Closure from_main_thread_immediate_do_work_closure_; |
| - base::Closure from_other_thread_immediate_do_work_closure_; |
| + base::Closure immediate_do_work_closure_; |
| + base::Closure delayed_do_work_closure_; |
| bool task_was_run_on_quiescence_monitored_queue_; |
| - // To reduce locking overhead we track pending calls to DoWork separately for |
| - // the main thread and other threads. |
| - std::set<base::TimeTicks> main_thread_pending_wakeups_; |
| - |
| struct AnyThread { |
| AnyThread(); |
| // Set of task queues with newly available work on the incoming queue. |
| std::unordered_set<internal::TaskQueueImpl*> has_incoming_immediate_work; |
| - bool other_thread_pending_wakeup; |
| + int do_work_running_count; |
| + int immediate_do_work_posted_count; |
| + bool is_nested; // Whether or not the message loop is currently nested. |
| }; |
| // TODO(alexclarke): Add a MainThreadOnly struct too. |
| @@ -281,6 +288,9 @@ class BLINK_PLATFORM_EXPORT TaskQueueManager |
| return any_thread_; |
| } |
| + base::TimeTicks next_delayed_do_work_; |
|
Sami
2017/01/26 12:29:17
nit: Should we call this next_delayed_do_work_time
alex clarke (OOO till 29th)
2017/01/26 15:22:38
Done.
|
| + base::CancelableClosure cancelable_delayed_do_work_closure_; |
|
Sami
2017/01/26 12:29:17
Mind moving this next to |delayed_do_work_closure_
alex clarke (OOO till 29th)
2017/01/26 15:22:38
Done.
|
| + |
| bool record_task_delay_histograms_; |
| int work_batch_size_; |