| // 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/task_runner_test_template.h" | 
 |  | 
 | namespace base { | 
 |  | 
 | namespace test { | 
 |  | 
 | TaskTracker::TaskTracker() : task_runs_(0), task_runs_cv_(&lock_) {} | 
 |  | 
 | TaskTracker::~TaskTracker() {} | 
 |  | 
 | Closure TaskTracker::WrapTask(const Closure& task, int i) { | 
 |   return Bind(&TaskTracker::RunTask, this, task, i); | 
 | } | 
 |  | 
 | void TaskTracker::RunTask(const Closure& task, int i) { | 
 |   AutoLock lock(lock_); | 
 |   if (!task.is_null()) { | 
 |     task.Run(); | 
 |   } | 
 |   ++task_run_counts_[i]; | 
 |   ++task_runs_; | 
 |   task_runs_cv_.Signal(); | 
 | } | 
 |  | 
 | std::map<int, int> TaskTracker::GetTaskRunCounts() const { | 
 |   AutoLock lock(lock_); | 
 |   return task_run_counts_; | 
 | } | 
 |  | 
 | void TaskTracker::WaitForCompletedTasks(int count) { | 
 |   AutoLock lock(lock_); | 
 |   while (task_runs_ < count) | 
 |     task_runs_cv_.Wait(); | 
 | } | 
 |  | 
 | void ExpectRunsTasksOnCurrentThread(bool expected_value, | 
 |                                     TaskRunner* task_runner) { | 
 |   EXPECT_EQ(expected_value, task_runner->RunsTasksOnCurrentThread()); | 
 | } | 
 |  | 
 | }  // namespace test | 
 |  | 
 | }  // namespace base |