diff options
Diffstat (limited to 'base/test/test_mock_time_task_runner.cc')
-rw-r--r-- | base/test/test_mock_time_task_runner.cc | 263 |
1 files changed, 0 insertions, 263 deletions
diff --git a/base/test/test_mock_time_task_runner.cc b/base/test/test_mock_time_task_runner.cc deleted file mode 100644 index f2e18a3503..0000000000 --- a/base/test/test_mock_time_task_runner.cc +++ /dev/null @@ -1,263 +0,0 @@ -// Copyright 2015 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "base/test/test_mock_time_task_runner.h" - -#include "base/logging.h" -#include "base/memory/ref_counted.h" -#include "base/time/clock.h" -#include "base/time/tick_clock.h" - -namespace base { - -namespace { - -// MockTickClock -------------------------------------------------------------- - -// TickClock that always returns the then-current mock time ticks of -// |task_runner| as the current time ticks. -class MockTickClock : public TickClock { - public: - explicit MockTickClock( - scoped_refptr<const TestMockTimeTaskRunner> task_runner); - - // TickClock: - TimeTicks NowTicks() override; - - private: - scoped_refptr<const TestMockTimeTaskRunner> task_runner_; - - DISALLOW_COPY_AND_ASSIGN(MockTickClock); -}; - -MockTickClock::MockTickClock( - scoped_refptr<const TestMockTimeTaskRunner> task_runner) - : task_runner_(task_runner) { -} - -TimeTicks MockTickClock::NowTicks() { - return task_runner_->NowTicks(); -} - -// MockClock ------------------------------------------------------------------ - -// Clock that always returns the then-current mock time of |task_runner| as the -// current time. -class MockClock : public Clock { - public: - explicit MockClock(scoped_refptr<const TestMockTimeTaskRunner> task_runner); - - // Clock: - Time Now() override; - - private: - scoped_refptr<const TestMockTimeTaskRunner> task_runner_; - - DISALLOW_COPY_AND_ASSIGN(MockClock); -}; - -MockClock::MockClock(scoped_refptr<const TestMockTimeTaskRunner> task_runner) - : task_runner_(task_runner) { -} - -Time MockClock::Now() { - return task_runner_->Now(); -} - -} // namespace - -// TestMockTimeTaskRunner::TestOrderedPendingTask ----------------------------- - -// Subclass of TestPendingTask which has a strictly monotonically increasing ID -// for every task, so that tasks posted with the same 'time to run' can be run -// in the order of being posted. -struct TestMockTimeTaskRunner::TestOrderedPendingTask - : public base::TestPendingTask { - TestOrderedPendingTask(); - TestOrderedPendingTask(const tracked_objects::Location& location, - const Closure& task, - TimeTicks post_time, - TimeDelta delay, - size_t ordinal, - TestNestability nestability); - ~TestOrderedPendingTask(); - - size_t ordinal; -}; - -TestMockTimeTaskRunner::TestOrderedPendingTask::TestOrderedPendingTask() - : ordinal(0) { -} - -TestMockTimeTaskRunner::TestOrderedPendingTask::TestOrderedPendingTask( - const tracked_objects::Location& location, - const Closure& task, - TimeTicks post_time, - TimeDelta delay, - size_t ordinal, - TestNestability nestability) - : base::TestPendingTask(location, task, post_time, delay, nestability), - ordinal(ordinal) { -} - -TestMockTimeTaskRunner::TestOrderedPendingTask::~TestOrderedPendingTask() { -} - -// TestMockTimeTaskRunner ----------------------------------------------------- - -bool TestMockTimeTaskRunner::TemporalOrder::operator()( - const TestOrderedPendingTask& first_task, - const TestOrderedPendingTask& second_task) const { - if (first_task.GetTimeToRun() == second_task.GetTimeToRun()) - return first_task.ordinal > second_task.ordinal; - return first_task.GetTimeToRun() > second_task.GetTimeToRun(); -} - -TestMockTimeTaskRunner::TestMockTimeTaskRunner() - : now_(Time::UnixEpoch()), next_task_ordinal_(0) { -} - -TestMockTimeTaskRunner::~TestMockTimeTaskRunner() { -} - -void TestMockTimeTaskRunner::FastForwardBy(TimeDelta delta) { - DCHECK(thread_checker_.CalledOnValidThread()); - DCHECK_GE(delta, TimeDelta()); - - const TimeTicks original_now_ticks = now_ticks_; - ProcessAllTasksNoLaterThan(delta); - ForwardClocksUntilTickTime(original_now_ticks + delta); -} - -void TestMockTimeTaskRunner::RunUntilIdle() { - DCHECK(thread_checker_.CalledOnValidThread()); - ProcessAllTasksNoLaterThan(TimeDelta()); -} - -void TestMockTimeTaskRunner::FastForwardUntilNoTasksRemain() { - DCHECK(thread_checker_.CalledOnValidThread()); - ProcessAllTasksNoLaterThan(TimeDelta::Max()); -} - -void TestMockTimeTaskRunner::ClearPendingTasks() { - DCHECK(thread_checker_.CalledOnValidThread()); - AutoLock scoped_lock(tasks_lock_); - while (!tasks_.empty()) - tasks_.pop(); -} - -Time TestMockTimeTaskRunner::Now() const { - DCHECK(thread_checker_.CalledOnValidThread()); - return now_; -} - -TimeTicks TestMockTimeTaskRunner::NowTicks() const { - DCHECK(thread_checker_.CalledOnValidThread()); - return now_ticks_; -} - -scoped_ptr<Clock> TestMockTimeTaskRunner::GetMockClock() const { - DCHECK(thread_checker_.CalledOnValidThread()); - return make_scoped_ptr(new MockClock(this)); -} - -scoped_ptr<TickClock> TestMockTimeTaskRunner::GetMockTickClock() const { - DCHECK(thread_checker_.CalledOnValidThread()); - return make_scoped_ptr(new MockTickClock(this)); -} - -bool TestMockTimeTaskRunner::HasPendingTask() const { - DCHECK(thread_checker_.CalledOnValidThread()); - return !tasks_.empty(); -} - -size_t TestMockTimeTaskRunner::GetPendingTaskCount() const { - DCHECK(thread_checker_.CalledOnValidThread()); - return tasks_.size(); -} - -TimeDelta TestMockTimeTaskRunner::NextPendingTaskDelay() const { - DCHECK(thread_checker_.CalledOnValidThread()); - return tasks_.empty() ? TimeDelta::Max() - : tasks_.top().GetTimeToRun() - now_ticks_; -} - -bool TestMockTimeTaskRunner::RunsTasksOnCurrentThread() const { - return thread_checker_.CalledOnValidThread(); -} - -bool TestMockTimeTaskRunner::PostDelayedTask( - const tracked_objects::Location& from_here, - const Closure& task, - TimeDelta delay) { - AutoLock scoped_lock(tasks_lock_); - tasks_.push(TestOrderedPendingTask(from_here, task, now_ticks_, delay, - next_task_ordinal_++, - TestPendingTask::NESTABLE)); - return true; -} - -bool TestMockTimeTaskRunner::PostNonNestableDelayedTask( - const tracked_objects::Location& from_here, - const Closure& task, - TimeDelta delay) { - return PostDelayedTask(from_here, task, delay); -} - -bool TestMockTimeTaskRunner::IsElapsingStopped() { - return false; -} - -void TestMockTimeTaskRunner::OnBeforeSelectingTask() { - // Empty default implementation. -} - -void TestMockTimeTaskRunner::OnAfterTimePassed() { - // Empty default implementation. -} - -void TestMockTimeTaskRunner::OnAfterTaskRun() { - // Empty default implementation. -} - -void TestMockTimeTaskRunner::ProcessAllTasksNoLaterThan(TimeDelta max_delta) { - DCHECK_GE(max_delta, TimeDelta()); - const TimeTicks original_now_ticks = now_ticks_; - while (!IsElapsingStopped()) { - OnBeforeSelectingTask(); - TestPendingTask task_info; - if (!DequeueNextTask(original_now_ticks, max_delta, &task_info)) - break; - // If tasks were posted with a negative delay, task_info.GetTimeToRun() will - // be less than |now_ticks_|. ForwardClocksUntilTickTime() takes care of not - // moving the clock backwards in this case. - ForwardClocksUntilTickTime(task_info.GetTimeToRun()); - task_info.task.Run(); - OnAfterTaskRun(); - } -} - -void TestMockTimeTaskRunner::ForwardClocksUntilTickTime(TimeTicks later_ticks) { - if (later_ticks <= now_ticks_) - return; - - now_ += later_ticks - now_ticks_; - now_ticks_ = later_ticks; - OnAfterTimePassed(); -} - -bool TestMockTimeTaskRunner::DequeueNextTask(const TimeTicks& reference, - const TimeDelta& max_delta, - TestPendingTask* next_task) { - AutoLock scoped_lock(tasks_lock_); - if (!tasks_.empty() && - (tasks_.top().GetTimeToRun() - reference) <= max_delta) { - *next_task = tasks_.top(); - tasks_.pop(); - return true; - } - return false; -} - -} // namespace base |