Chromium Code Reviews| Index: base/timer/timer.cc |
| diff --git a/base/timer/timer.cc b/base/timer/timer.cc |
| index 1916ccc34ebb7c7bf328533ba8911ddd11679b17..8e41215ecf8e4278b6608c628da0dc238c9054b9 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); |
|
danakj
2014/10/16 17:14:59
these are 2 DCHECKs, split them up (or isn't check
Avi (use Gerrit)
2014/10/16 18:02:55
Yep. Two DCHECK_EQs, and nullptr.
petrcermak
2014/10/17 15:43:15
Done. I kept both checks since thread_id is set on
|
| + task_runner_ = task_runner; |
|
danakj
2014/10/16 17:14:59
task_runner has a reference already, swap it into
petrcermak
2014/10/17 15:43:15
Done.
|
| +} |
| + |
| 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_, |
| + GetTaskRunner()->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_, |
| + GetTaskRunner()->PostTask(posted_from_, |
| base::Bind(&BaseTimerTaskInternal::Run, base::Owned(scheduled_task_))); |
| scheduled_run_time_ = desired_run_time_ = TimeTicks(); |
| } |
| @@ -161,6 +166,13 @@ void Timer::PostNewScheduledTask(TimeDelta delay) { |
| thread_id_ = static_cast<int>(PlatformThread::CurrentId()); |
| } |
| +scoped_refptr<SingleThreadTaskRunner> Timer::GetTaskRunner() { |
| + if (task_runner_.get() == NULL) { |
|
Avi (use Gerrit)
2014/10/16 18:02:55
nullptr?
petrcermak
2014/10/17 15:43:15
Done.
|
| + task_runner_ = ThreadTaskRunnerHandle::Get(); |
|
danakj
2014/10/16 17:14:59
This will make Timer hold a ref on the current tas
petrcermak
2014/10/17 15:43:15
Done. I did this initially but I was told to store
|
| + } |
| + return task_runner_; |
| +} |
| + |
| void Timer::AbandonScheduledTask() { |
| DCHECK(thread_id_ == 0 || |
| thread_id_ == static_cast<int>(PlatformThread::CurrentId())); |