| 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 0ad965b00f774201920becfde5d0fb3b24faf0ae..f58fabd99a444a58155c655a3b491d3a0ba4b7a7 100644
|
| --- a/components/scheduler/base/task_queue_impl.cc
|
| +++ b/components/scheduler/base/task_queue_impl.cc
|
| @@ -13,7 +13,7 @@ namespace internal {
|
|
|
| TaskQueueImpl::TaskQueueImpl(
|
| TaskQueueManager* task_queue_manager,
|
| - const scoped_refptr<TimeDomain>& time_domain,
|
| + TimeDomain* time_domain,
|
| const Spec& spec,
|
| const char* disabled_by_default_tracing_category,
|
| const char* disabled_by_default_verbose_tracing_category)
|
| @@ -28,10 +28,15 @@ TaskQueueImpl::TaskQueueImpl(
|
| wakeup_policy_(spec.wakeup_policy),
|
| should_monitor_quiescence_(spec.should_monitor_quiescence),
|
| should_notify_observers_(spec.should_notify_observers) {
|
| - DCHECK(time_domain.get());
|
| + DCHECK(time_domain);
|
| + time_domain->RegisterQueue(this);
|
| }
|
|
|
| -TaskQueueImpl::~TaskQueueImpl() {}
|
| +TaskQueueImpl::~TaskQueueImpl() {
|
| + base::AutoLock lock(any_thread_lock_);
|
| + if (any_thread().time_domain)
|
| + any_thread().time_domain->UnregisterQueue(this);
|
| +}
|
|
|
| TaskQueueImpl::Task::Task()
|
| : PendingTask(tracked_objects::Location(),
|
| @@ -57,10 +62,9 @@ TaskQueueImpl::Task::Task(const tracked_objects::Location& posted_from,
|
| sequence_num = sequence_number;
|
| }
|
|
|
| -TaskQueueImpl::AnyThread::AnyThread(
|
| - TaskQueueManager* task_queue_manager,
|
| - PumpPolicy pump_policy,
|
| - const scoped_refptr<TimeDomain>& time_domain)
|
| +TaskQueueImpl::AnyThread::AnyThread(TaskQueueManager* task_queue_manager,
|
| + PumpPolicy pump_policy,
|
| + TimeDomain* time_domain)
|
| : task_queue_manager(task_queue_manager),
|
| pump_policy(pump_policy),
|
| time_domain(time_domain) {}
|
| @@ -78,7 +82,8 @@ void TaskQueueImpl::UnregisterTaskQueue() {
|
| base::AutoLock lock(any_thread_lock_);
|
| if (!any_thread().task_queue_manager)
|
| return;
|
| - any_thread().time_domain->UnregisterQueue(this);
|
| + if (any_thread().time_domain)
|
| + any_thread().time_domain->UnregisterQueue(this);
|
| any_thread().time_domain = nullptr;
|
| any_thread().task_queue_manager->UnregisterTaskQueue(this);
|
|
|
| @@ -107,18 +112,6 @@ bool TaskQueueImpl::PostNonNestableDelayedTask(
|
| 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(
|
| const tracked_objects::Location& from_here,
|
| const base::Closure& task,
|
| @@ -176,9 +169,8 @@ bool TaskQueueImpl::PostDelayedTaskLocked(
|
| return true;
|
| }
|
|
|
| -void TaskQueueImpl::ScheduleDelayedWorkTask(
|
| - const scoped_refptr<TimeDomain> time_domain,
|
| - base::TimeTicks desired_run_time) {
|
| +void TaskQueueImpl::ScheduleDelayedWorkTask(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);
|
| @@ -219,7 +211,10 @@ TaskQueue::QueueState TaskQueueImpl::GetQueueState() const {
|
| {
|
| base::AutoLock lock(any_thread_lock_);
|
| if (any_thread().incoming_queue.empty()) {
|
| - return QueueState::EMPTY;
|
| + if (any_thread().delayed_task_queue.empty())
|
| + return QueueState::EMPTY;
|
| + else
|
| + return QueueState::NO_IMMEDIATE_WORK;
|
| } else {
|
| return QueueState::NEEDS_PUMPING;
|
| }
|
| @@ -505,14 +500,14 @@ void TaskQueueImpl::NotifyDidProcessTask(
|
| DidProcessTask(pending_task));
|
| }
|
|
|
| -void TaskQueueImpl::SetTimeDomain(
|
| - const scoped_refptr<TimeDomain>& time_domain) {
|
| +void TaskQueueImpl::SetTimeDomain(TimeDomain* time_domain) {
|
| base::AutoLock lock(any_thread_lock_);
|
| DCHECK(main_thread_checker_.CalledOnValidThread());
|
| if (time_domain == any_thread().time_domain)
|
| return;
|
|
|
| - any_thread().time_domain->MigrateQueue(this, time_domain.get());
|
| + if (time_domain)
|
| + any_thread().time_domain->MigrateQueue(this, time_domain);
|
| any_thread().time_domain = time_domain;
|
| }
|
|
|
|
|