| Index: components/scheduler/base/delayed_task_delegate_impl.cc
|
| diff --git a/components/scheduler/base/delayed_task_delegate_impl.cc b/components/scheduler/base/delayed_task_delegate_impl.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..3bfb3b2b3ca604fe185a33a717583203a9459f1c
|
| --- /dev/null
|
| +++ b/components/scheduler/base/delayed_task_delegate_impl.cc
|
| @@ -0,0 +1,52 @@
|
| +// Copyright 2015 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "components/scheduler/base/delayed_task_delegate_impl.h"
|
| +
|
| +#include "base/bind.h"
|
| +#include "components/scheduler/base/task_queue_impl.h"
|
| +#include "components/scheduler/base/task_queue_manager_delegate.h"
|
| +
|
| +namespace scheduler {
|
| +
|
| +DelayedTaskDelegateImpl::DelayedTaskDelegateImpl(
|
| + TaskQueueManagerDelegate* delegate, base::Closure do_work_closure)
|
| + : delegate_(delegate),
|
| + do_work_closure_(do_work_closure),
|
| + weak_factory_(this) {}
|
| +
|
| +DelayedTaskDelegateImpl::~DelayedTaskDelegateImpl() {}
|
| +
|
| +base::TimeTicks DelayedTaskDelegateImpl::CachedNow() {
|
| + if (cached_now_.is_null())
|
| + cached_now_ = delegate_->NowTicks();
|
| + return cached_now_;
|
| +}
|
| +
|
| +void DelayedTaskDelegateImpl::InvalidateNowCache() {
|
| + cached_now_ = base::TimeTicks();
|
| +}
|
| +
|
| +bool DelayedTaskDelegateImpl::BelongsToCurrentThread() const {
|
| + return delegate_ && delegate_->BelongsToCurrentThread();
|
| +}
|
| +
|
| +void DelayedTaskDelegateImpl::PostScheduleDelayedWorkTaskOnMainThread(
|
| + internal::TaskQueueImpl* queue, base::TimeTicks delayed_run_time) {
|
| + if (!delegate_)
|
| + return;
|
| + delegate_->PostTask(
|
| + FROM_HERE, base::Bind(&DelayedTaskDelegateImpl::ScheduleDelayedWorkTask,
|
| + weak_factory_.GetWeakPtr(),
|
| + scoped_refptr<internal::TaskQueueImpl>(queue),
|
| + delayed_run_time));
|
| +}
|
| +
|
| +void DelayedTaskDelegateImpl::ScheduleDoWork(base::TimeDelta delay) {
|
| + if (!delegate_)
|
| + return;
|
| + delegate_->PostDelayedTask(FROM_HERE, do_work_closure_, delay);
|
| +}
|
| +
|
| +} // namespace scheduler
|
|
|