| Index: base/timer/timer.cc
|
| diff --git a/base/timer/timer.cc b/base/timer/timer.cc
|
| index 1916ccc34ebb7c7bf328533ba8911ddd11679b17..4aa6806846554bd48d730ac86db7fff416b4dcec 100644
|
| --- a/base/timer/timer.cc
|
| +++ b/base/timer/timer.cc
|
| @@ -8,7 +8,6 @@
|
|
|
| #include "base/logging.h"
|
| #include "base/memory/ref_counted.h"
|
| -#include "base/single_thread_task_runner.h"
|
| #include "base/thread_task_runner_handle.h"
|
| #include "base/threading/platform_thread.h"
|
|
|
| @@ -93,6 +92,12 @@ TimeDelta Timer::GetCurrentDelay() const {
|
| return delay_;
|
| }
|
|
|
| +void Timer::SetTaskRunner(scoped_refptr<SingleThreadTaskRunner> task_runner) {
|
| + // Do not allow changing the task runner once something has been scheduled.
|
| + DCHECK(scheduled_task_ == NULL && thread_id_ == 0);
|
| + task_runner_ = task_runner;
|
| +}
|
| +
|
| void Timer::Start(const tracked_objects::Location& posted_from,
|
| TimeDelta delay,
|
| const base::Closure& user_task) {
|
| @@ -146,12 +151,12 @@ void Timer::PostNewScheduledTask(TimeDelta delay) {
|
| is_running_ = true;
|
| scheduled_task_ = new BaseTimerTaskInternal(this);
|
| if (delay > TimeDelta::FromMicroseconds(0)) {
|
| - ThreadTaskRunnerHandle::Get()->PostDelayedTask(posted_from_,
|
| + ResolveTaskRunner()->PostDelayedTask(posted_from_,
|
| base::Bind(&BaseTimerTaskInternal::Run, base::Owned(scheduled_task_)),
|
| delay);
|
| scheduled_run_time_ = desired_run_time_ = TimeTicks::Now() + delay;
|
| } else {
|
| - ThreadTaskRunnerHandle::Get()->PostTask(posted_from_,
|
| + ResolveTaskRunner()->PostTask(posted_from_,
|
| base::Bind(&BaseTimerTaskInternal::Run, base::Owned(scheduled_task_)));
|
| scheduled_run_time_ = desired_run_time_ = TimeTicks();
|
| }
|
| @@ -161,6 +166,11 @@ void Timer::PostNewScheduledTask(TimeDelta delay) {
|
| thread_id_ = static_cast<int>(PlatformThread::CurrentId());
|
| }
|
|
|
| +scoped_refptr<SingleThreadTaskRunner> Timer::ResolveTaskRunner() const {
|
| + return task_runner_.get() == NULL ?
|
| + ThreadTaskRunnerHandle::Get() : task_runner_;
|
| +}
|
| +
|
| void Timer::AbandonScheduledTask() {
|
| DCHECK(thread_id_ == 0 ||
|
| thread_id_ == static_cast<int>(PlatformThread::CurrentId()));
|
|
|