83 lines
2.3 KiB
C++
83 lines
2.3 KiB
C++
// 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_;
|
|
}
|
|
|
|
bool TestSimpleTaskRunner::HasPendingTask() const {
|
|
DCHECK(thread_checker_.CalledOnValidThread());
|
|
return !pending_tasks_.empty();
|
|
}
|
|
|
|
base::TimeDelta TestSimpleTaskRunner::NextPendingTaskDelay() const {
|
|
DCHECK(thread_checker_.CalledOnValidThread());
|
|
return pending_tasks_.front().GetTimeToRun() - base::TimeTicks();
|
|
}
|
|
|
|
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
|