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