| Index: components/scheduler/base/task_queue_impl.cc
|
| diff --git a/components/scheduler/base/task_queue_impl.cc b/components/scheduler/base/task_queue_impl.cc
|
| index 14b6c31468a8de02485a003bff6b65e32108c6ae..0ad965b00f774201920becfde5d0fb3b24faf0ae 100644
|
| --- a/components/scheduler/base/task_queue_impl.cc
|
| +++ b/components/scheduler/base/task_queue_impl.cc
|
| @@ -13,7 +13,7 @@
|
|
|
| TaskQueueImpl::TaskQueueImpl(
|
| TaskQueueManager* task_queue_manager,
|
| - TimeDomain* time_domain,
|
| + const scoped_refptr<TimeDomain>& time_domain,
|
| const Spec& spec,
|
| const char* disabled_by_default_tracing_category,
|
| const char* disabled_by_default_verbose_tracing_category)
|
| @@ -28,15 +28,10 @@
|
| wakeup_policy_(spec.wakeup_policy),
|
| should_monitor_quiescence_(spec.should_monitor_quiescence),
|
| should_notify_observers_(spec.should_notify_observers) {
|
| - DCHECK(time_domain);
|
| - time_domain->RegisterQueue(this);
|
| -}
|
| -
|
| -TaskQueueImpl::~TaskQueueImpl() {
|
| - base::AutoLock lock(any_thread_lock_);
|
| - if (any_thread().time_domain)
|
| - any_thread().time_domain->UnregisterQueue(this);
|
| -}
|
| + DCHECK(time_domain.get());
|
| +}
|
| +
|
| +TaskQueueImpl::~TaskQueueImpl() {}
|
|
|
| TaskQueueImpl::Task::Task()
|
| : PendingTask(tracked_objects::Location(),
|
| @@ -62,9 +57,10 @@
|
| sequence_num = sequence_number;
|
| }
|
|
|
| -TaskQueueImpl::AnyThread::AnyThread(TaskQueueManager* task_queue_manager,
|
| - PumpPolicy pump_policy,
|
| - TimeDomain* time_domain)
|
| +TaskQueueImpl::AnyThread::AnyThread(
|
| + TaskQueueManager* task_queue_manager,
|
| + PumpPolicy pump_policy,
|
| + const scoped_refptr<TimeDomain>& time_domain)
|
| : task_queue_manager(task_queue_manager),
|
| pump_policy(pump_policy),
|
| time_domain(time_domain) {}
|
| @@ -82,8 +78,7 @@
|
| base::AutoLock lock(any_thread_lock_);
|
| if (!any_thread().task_queue_manager)
|
| return;
|
| - if (any_thread().time_domain)
|
| - any_thread().time_domain->UnregisterQueue(this);
|
| + any_thread().time_domain->UnregisterQueue(this);
|
| any_thread().time_domain = nullptr;
|
| any_thread().task_queue_manager->UnregisterTaskQueue(this);
|
|
|
| @@ -110,6 +105,18 @@
|
| const base::Closure& task,
|
| base::TimeDelta delay) {
|
| return PostDelayedTaskImpl(from_here, task, delay, TaskType::NON_NESTABLE);
|
| +}
|
| +
|
| +bool TaskQueueImpl::PostDelayedTaskAt(
|
| + const tracked_objects::Location& from_here,
|
| + const base::Closure& task,
|
| + base::TimeTicks desired_run_time) {
|
| + base::AutoLock lock(any_thread_lock_);
|
| + if (!any_thread().task_queue_manager)
|
| + return false;
|
| + LazyNow lazy_now(any_thread().time_domain->CreateLazyNow());
|
| + return PostDelayedTaskLocked(&lazy_now, from_here, task, desired_run_time,
|
| + TaskType::NORMAL);
|
| }
|
|
|
| bool TaskQueueImpl::PostDelayedTaskImpl(
|
| @@ -169,8 +176,9 @@
|
| return true;
|
| }
|
|
|
| -void TaskQueueImpl::ScheduleDelayedWorkTask(TimeDomain* time_domain,
|
| - base::TimeTicks desired_run_time) {
|
| +void TaskQueueImpl::ScheduleDelayedWorkTask(
|
| + const scoped_refptr<TimeDomain> time_domain,
|
| + base::TimeTicks desired_run_time) {
|
| DCHECK(main_thread_checker_.CalledOnValidThread());
|
| LazyNow lazy_now(time_domain->CreateLazyNow());
|
| time_domain->ScheduleDelayedWork(this, desired_run_time, &lazy_now);
|
| @@ -211,15 +219,13 @@
|
| {
|
| base::AutoLock lock(any_thread_lock_);
|
| if (any_thread().incoming_queue.empty()) {
|
| - if (any_thread().delayed_task_queue.empty())
|
| - return QueueState::EMPTY;
|
| - else
|
| - return QueueState::NO_IMMEDIATE_WORK;
|
| + return QueueState::EMPTY;
|
| } else {
|
| return QueueState::NEEDS_PUMPING;
|
| }
|
| }
|
| }
|
| +
|
| bool TaskQueueImpl::TaskIsOlderThanQueuedTasks(const Task* task) {
|
| // A null task is passed when UpdateQueue is called before any task is run.
|
| // In this case we don't want to pump an after_wakeup queue, so return true
|
| @@ -499,14 +505,14 @@
|
| DidProcessTask(pending_task));
|
| }
|
|
|
| -void TaskQueueImpl::SetTimeDomain(TimeDomain* time_domain) {
|
| +void TaskQueueImpl::SetTimeDomain(
|
| + const scoped_refptr<TimeDomain>& time_domain) {
|
| base::AutoLock lock(any_thread_lock_);
|
| DCHECK(main_thread_checker_.CalledOnValidThread());
|
| if (time_domain == any_thread().time_domain)
|
| return;
|
|
|
| - if (time_domain)
|
| - any_thread().time_domain->MigrateQueue(this, time_domain);
|
| + any_thread().time_domain->MigrateQueue(this, time_domain.get());
|
| any_thread().time_domain = time_domain;
|
| }
|
|
|
|
|