mock_timer.cc 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. // 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. #include "base/timer/mock_timer.h"
  5. #include "base/test/test_simple_task_runner.h"
  6. namespace base {
  7. namespace {
  8. void FlushPendingTasks(TestSimpleTaskRunner* task_runner) {
  9. // Do not use TestSimpleTaskRunner::RunPendingTasks() here. As RunPendingTasks
  10. // overrides ThreadTaskRunnerHandle when it runs tasks, tasks posted by timer
  11. // tasks to TTRH go to |test_task_runner_|, though they should be posted to
  12. // the original task runner.
  13. // Do not use TestSimpleTaskRunner::RunPendingTasks(), as its overridden
  14. // ThreadTaskRunnerHandle causes unexpected side effects.
  15. for (TestPendingTask& task : task_runner->TakePendingTasks())
  16. std::move(task.task).Run();
  17. }
  18. } // namespace
  19. MockOneShotTimer::MockOneShotTimer()
  20. : OneShotTimer(&clock_),
  21. test_task_runner_(MakeRefCounted<TestSimpleTaskRunner>()) {
  22. OneShotTimer::SetTaskRunner(test_task_runner_);
  23. }
  24. MockOneShotTimer::~MockOneShotTimer() = default;
  25. void MockOneShotTimer::SetTaskRunner(
  26. scoped_refptr<SequencedTaskRunner> task_runner) {
  27. NOTREACHED() << "MockOneShotTimer doesn't support SetTaskRunner().";
  28. }
  29. void MockOneShotTimer::Fire() {
  30. DCHECK(IsRunning());
  31. clock_.Advance(std::max(TimeDelta(), desired_run_time() - clock_.NowTicks()));
  32. FlushPendingTasks(test_task_runner_.get());
  33. }
  34. MockRepeatingTimer::MockRepeatingTimer()
  35. : RepeatingTimer(&clock_),
  36. test_task_runner_(MakeRefCounted<TestSimpleTaskRunner>()) {
  37. RepeatingTimer::SetTaskRunner(test_task_runner_);
  38. }
  39. MockRepeatingTimer::~MockRepeatingTimer() = default;
  40. void MockRepeatingTimer::SetTaskRunner(
  41. scoped_refptr<SequencedTaskRunner> task_runner) {
  42. NOTREACHED() << "MockRepeatingTimer doesn't support SetTaskRunner().";
  43. }
  44. void MockRepeatingTimer::Fire() {
  45. DCHECK(IsRunning());
  46. clock_.Advance(std::max(TimeDelta(), desired_run_time() - clock_.NowTicks()));
  47. FlushPendingTasks(test_task_runner_.get());
  48. }
  49. MockRetainingOneShotTimer::MockRetainingOneShotTimer()
  50. : RetainingOneShotTimer(&clock_),
  51. test_task_runner_(MakeRefCounted<TestSimpleTaskRunner>()) {
  52. RetainingOneShotTimer::SetTaskRunner(test_task_runner_);
  53. }
  54. MockRetainingOneShotTimer::~MockRetainingOneShotTimer() = default;
  55. void MockRetainingOneShotTimer::SetTaskRunner(
  56. scoped_refptr<SequencedTaskRunner> task_runner) {
  57. NOTREACHED() << "MockRetainingOneShotTimer doesn't support SetTaskRunner().";
  58. }
  59. void MockRetainingOneShotTimer::Fire() {
  60. DCHECK(IsRunning());
  61. clock_.Advance(std::max(TimeDelta(), desired_run_time() - clock_.NowTicks()));
  62. FlushPendingTasks(test_task_runner_.get());
  63. }
  64. } // namespace base