diff options
author | akalin@chromium.org <akalin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-19 22:18:29 +0000 |
---|---|---|
committer | akalin@chromium.org <akalin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-19 22:18:29 +0000 |
commit | a8582b16e600e031fbc30bd8adc6f005df042852 (patch) | |
tree | db01d9f32349a72bb592ddacc29675f8ecec209f /base/test/test_simple_task_runner.cc | |
parent | 6fb2d79e22fe40d888faeedff76ebb95fc012cfe (diff) | |
download | chromium_src-a8582b16e600e031fbc30bd8adc6f005df042852.zip chromium_src-a8582b16e600e031fbc30bd8adc6f005df042852.tar.gz chromium_src-a8582b16e600e031fbc30bd8adc6f005df042852.tar.bz2 |
Unify various test TaskRunner implementations
Remove various ad-hoc test implementations of TaskRunner and implement TestSimpleTaskRunner instead.
Add TestPendingTask class for use by test TaskRunner implementations.
Clean up TestTaskRunner implementation in net/ and make it use TestPendingTask.
BUG=165806
Review URL: https://codereview.chromium.org/11554036
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@174016 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/test/test_simple_task_runner.cc')
-rw-r--r-- | base/test/test_simple_task_runner.cc | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/base/test/test_simple_task_runner.cc b/base/test/test_simple_task_runner.cc new file mode 100644 index 0000000..440d6a1 --- /dev/null +++ b/base/test/test_simple_task_runner.cc @@ -0,0 +1,72 @@ +// Copyright (c) 2012 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_simple_task_runner.h" + +#include "base/logging.h" + +namespace base { + +TestSimpleTaskRunner::TestSimpleTaskRunner() {} + +TestSimpleTaskRunner::~TestSimpleTaskRunner() { + DCHECK(thread_checker_.CalledOnValidThread()); +} + +bool TestSimpleTaskRunner::PostDelayedTask( + const tracked_objects::Location& from_here, + const Closure& task, + TimeDelta delay) { + DCHECK(thread_checker_.CalledOnValidThread()); + pending_tasks_.push_back( + TestPendingTask(from_here, task, TimeTicks(), delay, + TestPendingTask::NESTABLE)); + return true; +} + +bool TestSimpleTaskRunner::PostNonNestableDelayedTask( + const tracked_objects::Location& from_here, + const Closure& task, + TimeDelta delay) { + DCHECK(thread_checker_.CalledOnValidThread()); + pending_tasks_.push_back( + TestPendingTask(from_here, task, TimeTicks(), delay, + TestPendingTask::NON_NESTABLE)); + return true; +} + +bool TestSimpleTaskRunner::RunsTasksOnCurrentThread() const { + DCHECK(thread_checker_.CalledOnValidThread()); + return true; +} + +const std::deque<TestPendingTask>& +TestSimpleTaskRunner::GetPendingTasks() const { + DCHECK(thread_checker_.CalledOnValidThread()); + return pending_tasks_; +} + +void TestSimpleTaskRunner::ClearPendingTasks() { + DCHECK(thread_checker_.CalledOnValidThread()); + pending_tasks_.clear(); +} + +void TestSimpleTaskRunner::RunPendingTasks() { + DCHECK(thread_checker_.CalledOnValidThread()); + // Swap with a local variable to avoid re-entrancy problems. + std::deque<TestPendingTask> tasks_to_run; + tasks_to_run.swap(pending_tasks_); + for (std::deque<TestPendingTask>::iterator it = tasks_to_run.begin(); + it != tasks_to_run.end(); ++it) { + it->task.Run(); + } +} + +void TestSimpleTaskRunner::RunUntilIdle() { + while (!pending_tasks_.empty()) { + RunPendingTasks(); + } +} + +} // namespace base |