// Copyright 2012 The Chromium Authors
// 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() = default;

RepeatingClosure TaskTracker::WrapTask(RepeatingClosure task, int i) {
  return BindRepeating(&TaskTracker::RunTask, this, std::move(task), i);
}

void TaskTracker::RunTask(RepeatingClosure 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();
  }
}

}  // namespace test

// This suite is instantiated in binaries that use //base:test_support.
GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(TaskRunnerTest);

}  // namespace base
