// 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.

#ifndef CC_RASTER_SINGLE_THREAD_TASK_GRAPH_RUNNER_H_
#define CC_RASTER_SINGLE_THREAD_TASK_GRAPH_RUNNER_H_

#include <memory>

#include "base/synchronization/condition_variable.h"
#include "base/threading/simple_thread.h"
#include "cc/raster/task_graph_runner.h"
#include "cc/raster/task_graph_work_queue.h"

namespace base {
class SimpleThread;
}

namespace cc {

// Runs TaskGraphs asynchronously using a single worker thread.
class CC_EXPORT SingleThreadTaskGraphRunner
    : public TaskGraphRunner,
      public base::DelegateSimpleThread::Delegate {
 public:
  SingleThreadTaskGraphRunner();
  ~SingleThreadTaskGraphRunner() override;

  // Overridden from TaskGraphRunner:
  NamespaceToken GenerateNamespaceToken() override;
  void ScheduleTasks(NamespaceToken token, TaskGraph* graph) override;
  void WaitForTasksToFinishRunning(NamespaceToken token) override;
  void CollectCompletedTasks(NamespaceToken token,
                             Task::Vector* completed_tasks) override;

  // Overridden from base::DelegateSimpleThread::Delegate:
  void Run() override;

  void Start(const std::string& thread_name,
             const base::SimpleThread::Options& thread_options);
  void Shutdown();

 private:
  // Returns true if there was a task to run.
  bool RunTaskWithLockAcquired();

  std::unique_ptr<base::SimpleThread> thread_;

  // Lock to exclusively access all the following members that are used to
  // implement the TaskRunner interfaces.
  base::Lock lock_;

  // Stores the actual tasks to be run by this runner, sorted by priority.
  TaskGraphWorkQueue work_queue_;

  // Condition variable that is waited on by Run() until new tasks are ready to
  // run or shutdown starts.
  base::ConditionVariable has_ready_to_run_tasks_cv_;

  // Condition variable that is waited on by origin threads until a namespace
  // has finished running all associated tasks.
  base::ConditionVariable has_namespaces_with_finished_running_tasks_cv_;

  // Set during shutdown. Tells Run() to return when no more tasks are pending.
  bool shutdown_;
};

}  // namespace cc

#endif  // CC_RASTER_SINGLE_THREAD_TASK_GRAPH_RUNNER_H_
