1*635a8641SAndroid Build Coastguard Worker // Copyright 2014 The Chromium Authors. All rights reserved. 2*635a8641SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*635a8641SAndroid Build Coastguard Worker // found in the LICENSE file. 4*635a8641SAndroid Build Coastguard Worker 5*635a8641SAndroid Build Coastguard Worker #include "base/timer/mock_timer.h" 6*635a8641SAndroid Build Coastguard Worker 7*635a8641SAndroid Build Coastguard Worker #include "base/test/test_simple_task_runner.h" 8*635a8641SAndroid Build Coastguard Worker 9*635a8641SAndroid Build Coastguard Worker namespace base { 10*635a8641SAndroid Build Coastguard Worker 11*635a8641SAndroid Build Coastguard Worker namespace { 12*635a8641SAndroid Build Coastguard Worker FlushPendingTasks(TestSimpleTaskRunner * task_runner)13*635a8641SAndroid Build Coastguard Workervoid FlushPendingTasks(TestSimpleTaskRunner* task_runner) { 14*635a8641SAndroid Build Coastguard Worker // Do not use TestSimpleTaskRunner::RunPendingTasks() here. As RunPendingTasks 15*635a8641SAndroid Build Coastguard Worker // overrides ThreadTaskRunnerHandle when it runs tasks, tasks posted by timer 16*635a8641SAndroid Build Coastguard Worker // tasks to TTRH go to |test_task_runner_|, though they should be posted to 17*635a8641SAndroid Build Coastguard Worker // the original task runner. 18*635a8641SAndroid Build Coastguard Worker // Do not use TestSimpleTaskRunner::RunPendingTasks(), as its overridden 19*635a8641SAndroid Build Coastguard Worker // ThreadTaskRunnerHandle causes unexpected side effects. 20*635a8641SAndroid Build Coastguard Worker for (TestPendingTask& task : task_runner->TakePendingTasks()) 21*635a8641SAndroid Build Coastguard Worker std::move(task.task).Run(); 22*635a8641SAndroid Build Coastguard Worker } 23*635a8641SAndroid Build Coastguard Worker 24*635a8641SAndroid Build Coastguard Worker } // namespace 25*635a8641SAndroid Build Coastguard Worker MockOneShotTimer()26*635a8641SAndroid Build Coastguard WorkerMockOneShotTimer::MockOneShotTimer() 27*635a8641SAndroid Build Coastguard Worker : OneShotTimer(&clock_), 28*635a8641SAndroid Build Coastguard Worker test_task_runner_(MakeRefCounted<TestSimpleTaskRunner>()) { 29*635a8641SAndroid Build Coastguard Worker OneShotTimer::SetTaskRunner(test_task_runner_); 30*635a8641SAndroid Build Coastguard Worker } 31*635a8641SAndroid Build Coastguard Worker 32*635a8641SAndroid Build Coastguard Worker MockOneShotTimer::~MockOneShotTimer() = default; 33*635a8641SAndroid Build Coastguard Worker SetTaskRunner(scoped_refptr<SequencedTaskRunner> task_runner)34*635a8641SAndroid Build Coastguard Workervoid MockOneShotTimer::SetTaskRunner( 35*635a8641SAndroid Build Coastguard Worker scoped_refptr<SequencedTaskRunner> task_runner) { 36*635a8641SAndroid Build Coastguard Worker NOTREACHED() << "MockOneShotTimer doesn't support SetTaskRunner()."; 37*635a8641SAndroid Build Coastguard Worker } 38*635a8641SAndroid Build Coastguard Worker Fire()39*635a8641SAndroid Build Coastguard Workervoid MockOneShotTimer::Fire() { 40*635a8641SAndroid Build Coastguard Worker DCHECK(IsRunning()); 41*635a8641SAndroid Build Coastguard Worker clock_.Advance(std::max(TimeDelta(), desired_run_time() - clock_.NowTicks())); 42*635a8641SAndroid Build Coastguard Worker FlushPendingTasks(test_task_runner_.get()); 43*635a8641SAndroid Build Coastguard Worker } 44*635a8641SAndroid Build Coastguard Worker MockRepeatingTimer()45*635a8641SAndroid Build Coastguard WorkerMockRepeatingTimer::MockRepeatingTimer() 46*635a8641SAndroid Build Coastguard Worker : RepeatingTimer(&clock_), 47*635a8641SAndroid Build Coastguard Worker test_task_runner_(MakeRefCounted<TestSimpleTaskRunner>()) { 48*635a8641SAndroid Build Coastguard Worker RepeatingTimer::SetTaskRunner(test_task_runner_); 49*635a8641SAndroid Build Coastguard Worker } 50*635a8641SAndroid Build Coastguard Worker 51*635a8641SAndroid Build Coastguard Worker MockRepeatingTimer::~MockRepeatingTimer() = default; 52*635a8641SAndroid Build Coastguard Worker SetTaskRunner(scoped_refptr<SequencedTaskRunner> task_runner)53*635a8641SAndroid Build Coastguard Workervoid MockRepeatingTimer::SetTaskRunner( 54*635a8641SAndroid Build Coastguard Worker scoped_refptr<SequencedTaskRunner> task_runner) { 55*635a8641SAndroid Build Coastguard Worker NOTREACHED() << "MockRepeatingTimer doesn't support SetTaskRunner()."; 56*635a8641SAndroid Build Coastguard Worker } 57*635a8641SAndroid Build Coastguard Worker Fire()58*635a8641SAndroid Build Coastguard Workervoid MockRepeatingTimer::Fire() { 59*635a8641SAndroid Build Coastguard Worker DCHECK(IsRunning()); 60*635a8641SAndroid Build Coastguard Worker clock_.Advance(std::max(TimeDelta(), desired_run_time() - clock_.NowTicks())); 61*635a8641SAndroid Build Coastguard Worker FlushPendingTasks(test_task_runner_.get()); 62*635a8641SAndroid Build Coastguard Worker } 63*635a8641SAndroid Build Coastguard Worker MockRetainingOneShotTimer()64*635a8641SAndroid Build Coastguard WorkerMockRetainingOneShotTimer::MockRetainingOneShotTimer() 65*635a8641SAndroid Build Coastguard Worker : RetainingOneShotTimer(&clock_), 66*635a8641SAndroid Build Coastguard Worker test_task_runner_(MakeRefCounted<TestSimpleTaskRunner>()) { 67*635a8641SAndroid Build Coastguard Worker RetainingOneShotTimer::SetTaskRunner(test_task_runner_); 68*635a8641SAndroid Build Coastguard Worker } 69*635a8641SAndroid Build Coastguard Worker 70*635a8641SAndroid Build Coastguard Worker MockRetainingOneShotTimer::~MockRetainingOneShotTimer() = default; 71*635a8641SAndroid Build Coastguard Worker SetTaskRunner(scoped_refptr<SequencedTaskRunner> task_runner)72*635a8641SAndroid Build Coastguard Workervoid MockRetainingOneShotTimer::SetTaskRunner( 73*635a8641SAndroid Build Coastguard Worker scoped_refptr<SequencedTaskRunner> task_runner) { 74*635a8641SAndroid Build Coastguard Worker NOTREACHED() << "MockRetainingOneShotTimer doesn't support SetTaskRunner()."; 75*635a8641SAndroid Build Coastguard Worker } 76*635a8641SAndroid Build Coastguard Worker Fire()77*635a8641SAndroid Build Coastguard Workervoid MockRetainingOneShotTimer::Fire() { 78*635a8641SAndroid Build Coastguard Worker DCHECK(IsRunning()); 79*635a8641SAndroid Build Coastguard Worker clock_.Advance(std::max(TimeDelta(), desired_run_time() - clock_.NowTicks())); 80*635a8641SAndroid Build Coastguard Worker FlushPendingTasks(test_task_runner_.get()); 81*635a8641SAndroid Build Coastguard Worker } 82*635a8641SAndroid Build Coastguard Worker 83*635a8641SAndroid Build Coastguard Worker } // namespace base 84