test_simple_task_runner.cc revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/test/test_simple_task_runner.h"
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/logging.h"
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace base {
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TestSimpleTaskRunner::TestSimpleTaskRunner() {}
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TestSimpleTaskRunner::~TestSimpleTaskRunner() {
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DCHECK(thread_checker_.CalledOnValidThread());
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool TestSimpleTaskRunner::PostDelayedTask(
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const tracked_objects::Location& from_here,
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const Closure& task,
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    TimeDelta delay) {
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DCHECK(thread_checker_.CalledOnValidThread());
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  pending_tasks_.push_back(
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      TestPendingTask(from_here, task, TimeTicks(), delay,
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                      TestPendingTask::NESTABLE));
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return true;
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool TestSimpleTaskRunner::PostNonNestableDelayedTask(
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const tracked_objects::Location& from_here,
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const Closure& task,
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    TimeDelta delay) {
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DCHECK(thread_checker_.CalledOnValidThread());
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  pending_tasks_.push_back(
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      TestPendingTask(from_here, task, TimeTicks(), delay,
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                      TestPendingTask::NON_NESTABLE));
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return true;
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool TestSimpleTaskRunner::RunsTasksOnCurrentThread() const {
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DCHECK(thread_checker_.CalledOnValidThread());
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return true;
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const std::deque<TestPendingTask>&
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TestSimpleTaskRunner::GetPendingTasks() const {
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DCHECK(thread_checker_.CalledOnValidThread());
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return pending_tasks_;
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TestSimpleTaskRunner::ClearPendingTasks() {
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DCHECK(thread_checker_.CalledOnValidThread());
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  pending_tasks_.clear();
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TestSimpleTaskRunner::RunPendingTasks() {
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DCHECK(thread_checker_.CalledOnValidThread());
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Swap with a local variable to avoid re-entrancy problems.
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::deque<TestPendingTask> tasks_to_run;
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  tasks_to_run.swap(pending_tasks_);
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  for (std::deque<TestPendingTask>::iterator it = tasks_to_run.begin();
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)       it != tasks_to_run.end(); ++it) {
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    it->task.Run();
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TestSimpleTaskRunner::RunUntilIdle() {
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  while (!pending_tasks_.empty()) {
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    RunPendingTasks();
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace base
73