Index: components/scheduler/base/task_queue_manager.h |
diff --git a/components/scheduler/base/task_queue_manager.h b/components/scheduler/base/task_queue_manager.h |
index 002c4bc351a7d7fba8b4be655d326ce16f10bc42..f6af85453b2f412a5aaa209f432c2855b684f752 100644 |
--- a/components/scheduler/base/task_queue_manager.h |
+++ b/components/scheduler/base/task_queue_manager.h |
@@ -30,10 +30,12 @@ class TracedValue; |
namespace scheduler { |
namespace internal { |
-class LazyNow; |
class TaskQueueImpl; |
} // namespace internal |
+class LazyNow; |
+class RealTimeDomain; |
+class TimeDomain; |
class TaskQueueManagerDelegate; |
// The task queue manager provides N task queues and a selector interface for |
@@ -60,12 +62,6 @@ class SCHEDULER_EXPORT TaskQueueManager |
const char* disabled_by_default_verbose_tracing_category); |
~TaskQueueManager() override; |
- // Returns the time of the next pending delayed task in any queue. Ignores |
- // any delayed tasks whose delay has expired. Returns a null TimeTicks object |
- // if no tasks are pending. NOTE this is somewhat expensive since every queue |
- // will get locked. |
- base::TimeTicks NextPendingDelayedTaskRunTime(); |
- |
// Set the number of tasks executed in a single invocation of the task queue |
// manager. Increasing the batch size can reduce the overhead of yielding |
// back to the main message loop -- at the cost of potentially delaying other |
@@ -103,8 +99,16 @@ class SCHEDULER_EXPORT TaskQueueManager |
// Returns the delegate used by the TaskQueueManager. |
const scoped_refptr<TaskQueueManagerDelegate>& delegate() const; |
+ // Time domains must be registered for the task queues to get updated. |
+ void RegisterTimeDomain(const scoped_refptr<TimeDomain>& time_domain); |
+ void UnregisterTimeDomain(const scoped_refptr<TimeDomain>& time_domain); |
+ |
+ const scoped_refptr<RealTimeDomain>& real_time_domain() const { |
+ return real_time_domain_; |
+ } |
+ |
private: |
- friend class internal::LazyNow; |
+ friend class LazyNow; |
friend class internal::TaskQueueImpl; |
friend class TaskQueueManagerTest; |
@@ -166,34 +170,14 @@ class SCHEDULER_EXPORT TaskQueueManager |
int GetNextSequenceNumber(); |
+ bool TryAdvanceTimeDomains(); |
+ |
scoped_refptr<base::trace_event::ConvertableToTraceFormat> |
AsValueWithSelectorResult(bool should_run, |
internal::TaskQueueImpl* selected_queue) const; |
- // Causes DoWork to start calling UpdateWorkQueue for |queue|. Can be called |
- // from any thread. |
- void RegisterAsUpdatableTaskQueue(internal::TaskQueueImpl* queue); |
- |
- // Prevents DoWork from calling UpdateWorkQueue for |queue|. Must be called |
- // from the thread the TaskQueueManager was created on. |
- void UnregisterAsUpdatableTaskQueue(internal::TaskQueueImpl* queue); |
- |
- // Schedule a call to DoWork at |delayed_run_time| which indirectly calls |
- // TaskQueueImpl::MoveReadyDelayedTasksToIncomingQueue for |queue|. |
- // Can be called from any thread. |
- void ScheduleDelayedWork(internal::TaskQueueImpl* queue, |
- base::TimeTicks delayed_run_time, |
- internal::LazyNow* lazy_now); |
- |
- // Function calling ScheduleDelayedWork that's suitable for use in base::Bind. |
- void ScheduleDelayedWorkTask(scoped_refptr<internal::TaskQueueImpl> queue, |
- base::TimeTicks delayed_run_time); |
- |
- // Call TaskQueueImpl::MoveReadyDelayedTasksToIncomingQueue for each |
- // registered queue for which the delay has elapsed. |
- void WakeupReadyDelayedQueues(internal::LazyNow* lazy_now); |
- |
- void MoveNewlyUpdatableQueuesIntoUpdatableQueueSet(); |
+ std::set<scoped_refptr<TimeDomain>> time_domains_; |
+ scoped_refptr<RealTimeDomain> real_time_domain_; |
std::set<scoped_refptr<internal::TaskQueueImpl>> queues_; |
@@ -201,19 +185,6 @@ class SCHEDULER_EXPORT TaskQueueManager |
// raw pointers and doesn't expect the rug to be pulled out from underneath. |
std::set<scoped_refptr<internal::TaskQueueImpl>> queues_to_delete_; |
- // This lock guards only |newly_updatable_|. It's not expected to be heavily |
- // contended. |
- base::Lock newly_updatable_lock_; |
- std::vector<internal::TaskQueueImpl*> newly_updatable_; |
- |
- // Set of task queues with avaliable work on the incoming queue. This should |
- // only be accessed from the main thread. |
- std::set<internal::TaskQueueImpl*> updatable_queue_set_; |
- |
- typedef std::multimap<base::TimeTicks, internal::TaskQueueImpl*> |
- DelayedWakeupMultimap; |
- |
- DelayedWakeupMultimap delayed_wakeup_multimap_; |
base::AtomicSequenceNumber task_sequence_num_; |
base::debug::TaskAnnotator task_annotator_; |
@@ -241,6 +212,7 @@ class SCHEDULER_EXPORT TaskQueueManager |
Observer* observer_; // NOT OWNED |
scoped_refptr<DeletionSentinel> deletion_sentinel_; |
+ scoped_refptr<TimeDomain> time_domain_; |
base::WeakPtrFactory<TaskQueueManager> weak_factory_; |
DISALLOW_COPY_AND_ASSIGN(TaskQueueManager); |