| Index: base/timer/timer_unittest.cc
|
| diff --git a/base/timer/timer_unittest.cc b/base/timer/timer_unittest.cc
|
| index 1c49269bfe95111f2cb94f55fbad2a65dec9e20c..7c3c1079d72f54be9585287c4ace5473c9c7b5f2 100644
|
| --- a/base/timer/timer_unittest.cc
|
| +++ b/base/timer/timer_unittest.cc
|
| @@ -54,17 +54,58 @@ class Receiver {
|
| int count_;
|
| };
|
|
|
| -class OneShotTimerTester {
|
| +// A basic helper class that can start a one-shot timer and signal a
|
| +// WaitableEvent when this timer fires.
|
| +class OneShotTimerTesterBase {
|
| + public:
|
| + // |did_run|, if provided, will be signaled when Run() fires.
|
| + explicit OneShotTimerTesterBase(
|
| + WaitableEvent* did_run = nullptr,
|
| + const TimeDelta& delay = TimeDelta::FromMilliseconds(10))
|
| + : did_run_(did_run), delay_(delay) {}
|
| +
|
| + virtual ~OneShotTimerTesterBase() = default;
|
| +
|
| + void Start() {
|
| + started_time_ = TimeTicks::Now();
|
| + timer_->Start(FROM_HERE, delay_, this, &OneShotTimerTesterBase::Run);
|
| + }
|
| +
|
| + bool IsRunning() { return timer_->IsRunning(); }
|
| +
|
| + TimeTicks started_time() const { return started_time_; }
|
| + TimeDelta delay() const { return delay_; }
|
| +
|
| + protected:
|
| + virtual void Run() {
|
| + if (did_run_) {
|
| + EXPECT_FALSE(did_run_->IsSignaled());
|
| + did_run_->Signal();
|
| + }
|
| + }
|
| +
|
| + std::unique_ptr<OneShotTimer> timer_ = MakeUnique<OneShotTimer>();
|
| +
|
| + private:
|
| + WaitableEvent* const did_run_;
|
| + const TimeDelta delay_;
|
| + TimeTicks started_time_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(OneShotTimerTesterBase);
|
| +};
|
| +
|
| +// Extends functionality of OneShotTimerTesterBase with the abilities to wait
|
| +// until the timer fires and to change task runner for the timer.
|
| +class OneShotTimerTester : public OneShotTimerTesterBase {
|
| public:
|
| // |did_run|, if provided, will be signaled when Run() fires.
|
| explicit OneShotTimerTester(
|
| WaitableEvent* did_run = nullptr,
|
| const TimeDelta& delay = TimeDelta::FromMilliseconds(10))
|
| - : quit_closure_(run_loop_.QuitClosure()),
|
| - did_run_(did_run),
|
| - delay_(delay) {}
|
| + : OneShotTimerTesterBase(did_run, delay),
|
| + quit_closure_(run_loop_.QuitClosure()) {}
|
|
|
| - virtual ~OneShotTimerTester() = default;
|
| + ~OneShotTimerTester() override = default;
|
|
|
| void SetTaskRunner(scoped_refptr<SingleThreadTaskRunner> task_runner) {
|
| timer_->SetTaskRunner(std::move(task_runner));
|
| @@ -76,45 +117,29 @@ class OneShotTimerTester {
|
| ThreadTaskRunnerHandle::Get(), FROM_HERE, run_loop_.QuitClosure());
|
| }
|
|
|
| - void Start() {
|
| - started_time_ = TimeTicks::Now();
|
| - timer_->Start(FROM_HERE, delay_, this, &OneShotTimerTester::Run);
|
| - }
|
| -
|
| // Blocks until Run() executes and confirms that Run() didn't fire before
|
| // |delay_| expired.
|
| void WaitAndConfirmTimerFiredAfterDelay() {
|
| run_loop_.Run();
|
|
|
| - EXPECT_NE(TimeTicks(), started_time_);
|
| - EXPECT_GE(TimeTicks::Now() - started_time_, delay_);
|
| + EXPECT_NE(TimeTicks(), started_time());
|
| + EXPECT_GE(TimeTicks::Now() - started_time(), delay());
|
| }
|
|
|
| - bool IsRunning() { return timer_->IsRunning(); }
|
| -
|
| protected:
|
| // Overridable method to do things on Run() before signaling events/closures
|
| // managed by this helper.
|
| virtual void OnRun() {}
|
|
|
| - std::unique_ptr<OneShotTimer> timer_ = MakeUnique<OneShotTimer>();
|
| -
|
| private:
|
| - void Run() {
|
| + void Run() override {
|
| OnRun();
|
| - if (did_run_) {
|
| - EXPECT_FALSE(did_run_->IsSignaled());
|
| - did_run_->Signal();
|
| - }
|
| + OneShotTimerTesterBase::Run();
|
| quit_closure_.Run();
|
| }
|
|
|
| RunLoop run_loop_;
|
| Closure quit_closure_;
|
| - WaitableEvent* const did_run_;
|
| -
|
| - const TimeDelta delay_;
|
| - TimeTicks started_time_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(OneShotTimerTester);
|
| };
|
| @@ -517,10 +542,10 @@ TEST(TimerTest, MessageLoopShutdown) {
|
| WaitableEvent did_run(WaitableEvent::ResetPolicy::MANUAL,
|
| WaitableEvent::InitialState::NOT_SIGNALED);
|
| {
|
| - OneShotTimerTester a(&did_run);
|
| - OneShotTimerTester b(&did_run);
|
| - OneShotTimerTester c(&did_run);
|
| - OneShotTimerTester d(&did_run);
|
| + OneShotTimerTesterBase a(&did_run);
|
| + OneShotTimerTesterBase b(&did_run);
|
| + OneShotTimerTesterBase c(&did_run);
|
| + OneShotTimerTesterBase d(&did_run);
|
| {
|
| MessageLoop loop;
|
| a.Start();
|
|
|