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