// Copyright 2015 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/threading/simple_thread.h"
#include "cc/raster/single_thread_task_graph_runner.h"
#include "cc/test/task_graph_runner_test_template.h"

namespace cc {
namespace {

class SingleThreadTaskGraphRunnerTestDelegate {
 public:
  SingleThreadTaskGraphRunnerTestDelegate() {}

  void StartTaskGraphRunner() {
    single_thread_task_graph_runner_.Start(
        "SingleThreadTaskGraphRunnerTestDelegate",
        base::SimpleThread::Options());
  }

  TaskGraphRunner* GetTaskGraphRunner() {
    return &single_thread_task_graph_runner_;
  }

  void StopTaskGraphRunner() {}

  ~SingleThreadTaskGraphRunnerTestDelegate() {
    single_thread_task_graph_runner_.Shutdown();
  }

 private:
  SingleThreadTaskGraphRunner single_thread_task_graph_runner_;
};

INSTANTIATE_TYPED_TEST_CASE_P(SingleThreadTaskGraphRunner,
                              TaskGraphRunnerTest,
                              SingleThreadTaskGraphRunnerTestDelegate);
INSTANTIATE_TYPED_TEST_CASE_P(SingleThreadTaskGraphRunner,
                              SingleThreadTaskGraphRunnerTest,
                              SingleThreadTaskGraphRunnerTestDelegate);

}  // namespace
}  // namespace cc
