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