blob: 496366544bdb85b1230fe261c02ca9ddec143d1a [file] [log] [blame]
Avi Drissmane4622aa2022-09-08 20:36:061// Copyright 2014 The Chromium Authors
[email protected]9df013b2014-03-13 22:04:392// 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
Sean Maher70f2942932023-01-04 22:15:0615 // overrides SingleThreadTaskRunner::CurrentDefaultHandle when it runs tasks,
16 // tasks posted by timer tasks to STTR::CDH go to |test_task_runner_|, though
17 // they should be posted to the original task runner. Do not use
18 // TestSimpleTaskRunner::RunPendingTasks(), as its overridden
19 // SingleThreadTaskRunner::CurrentDefaultHandle causes unexpected side
20 // effects.
Peter Kasting134ef9af2024-12-28 02:30:0921 for (TestPendingTask& task : task_runner->TakePendingTasks()) {
tzik28b5e292018-06-19 08:13:3522 std::move(task.task).Run();
Peter Kasting134ef9af2024-12-28 02:30:0923 }
tzik28b5e292018-06-19 08:13:3524}
25
26} // namespace
27
tzik28b5e292018-06-19 08:13:3528MockOneShotTimer::MockOneShotTimer()
29 : OneShotTimer(&clock_),
30 test_task_runner_(MakeRefCounted<TestSimpleTaskRunner>()) {
31 OneShotTimer::SetTaskRunner(test_task_runner_);
32}
33
34MockOneShotTimer::~MockOneShotTimer() = default;
35
36void MockOneShotTimer::SetTaskRunner(
37 scoped_refptr<SequencedTaskRunner> task_runner) {
Peter Boströmde573332024-08-26 20:42:4538 NOTREACHED() << "MockOneShotTimer doesn't support SetTaskRunner().";
tzik28b5e292018-06-19 08:13:3539}
40
41void MockOneShotTimer::Fire() {
42 DCHECK(IsRunning());
43 clock_.Advance(std::max(TimeDelta(), desired_run_time() - clock_.NowTicks()));
44 FlushPendingTasks(test_task_runner_.get());
45}
46
Shintaro Kawamuraccefc5a2023-05-08 16:46:1847void MockOneShotTimer::FireNow() {
48 DCHECK(IsRunning());
49 FlushPendingTasks(test_task_runner_.get());
50}
51
tzik28b5e292018-06-19 08:13:3552MockRepeatingTimer::MockRepeatingTimer()
53 : RepeatingTimer(&clock_),
54 test_task_runner_(MakeRefCounted<TestSimpleTaskRunner>()) {
55 RepeatingTimer::SetTaskRunner(test_task_runner_);
56}
57
58MockRepeatingTimer::~MockRepeatingTimer() = default;
59
60void MockRepeatingTimer::SetTaskRunner(
61 scoped_refptr<SequencedTaskRunner> task_runner) {
Peter Boströmde573332024-08-26 20:42:4562 NOTREACHED() << "MockRepeatingTimer doesn't support SetTaskRunner().";
tzik28b5e292018-06-19 08:13:3563}
64
65void MockRepeatingTimer::Fire() {
66 DCHECK(IsRunning());
67 clock_.Advance(std::max(TimeDelta(), desired_run_time() - clock_.NowTicks()));
68 FlushPendingTasks(test_task_runner_.get());
[email protected]9df013b2014-03-13 22:04:3969}
70
tzik57c66e32018-07-02 08:02:5771MockRetainingOneShotTimer::MockRetainingOneShotTimer()
72 : RetainingOneShotTimer(&clock_),
73 test_task_runner_(MakeRefCounted<TestSimpleTaskRunner>()) {
74 RetainingOneShotTimer::SetTaskRunner(test_task_runner_);
75}
76
77MockRetainingOneShotTimer::~MockRetainingOneShotTimer() = default;
78
79void MockRetainingOneShotTimer::SetTaskRunner(
80 scoped_refptr<SequencedTaskRunner> task_runner) {
Peter Boströmde573332024-08-26 20:42:4581 NOTREACHED() << "MockRetainingOneShotTimer doesn't support SetTaskRunner().";
tzik57c66e32018-07-02 08:02:5782}
83
84void MockRetainingOneShotTimer::Fire() {
85 DCHECK(IsRunning());
86 clock_.Advance(std::max(TimeDelta(), desired_run_time() - clock_.NowTicks()));
87 FlushPendingTasks(test_task_runner_.get());
88}
89
[email protected]9df013b2014-03-13 22:04:3990} // namespace base