| // 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_SYNCHRONOUS_TASK_GRAPH_RUNNER_H_ | 
 | #define CC_RASTER_SYNCHRONOUS_TASK_GRAPH_RUNNER_H_ | 
 |  | 
 | #include "cc/raster/task_graph_runner.h" | 
 | #include "cc/raster/task_graph_work_queue.h" | 
 |  | 
 | namespace cc { | 
 |  | 
 | // Implements a TaskGraphRunner which runs synchronously. This runner only runs | 
 | // tasks when RunUntilIdle is called. | 
 | class CC_EXPORT SynchronousTaskGraphRunner : public TaskGraphRunner { | 
 |  public: | 
 |   SynchronousTaskGraphRunner(); | 
 |   ~SynchronousTaskGraphRunner() override; | 
 |  | 
 |   // Overridden from TaskGraphRunner: | 
 |   NamespaceToken GetNamespaceToken() override; | 
 |   void ScheduleTasks(NamespaceToken token, TaskGraph* graph) override; | 
 |   void WaitForTasksToFinishRunning(NamespaceToken token) override; | 
 |   void CollectCompletedTasks(NamespaceToken token, | 
 |                              Task::Vector* completed_tasks) override; | 
 |  | 
 |   // Runs all pending tasks from all namespaces. | 
 |   void RunUntilIdle(); | 
 |  | 
 |   // For test use only. | 
 |   bool RunSingleTaskForTesting() { return RunTask(); } | 
 |  | 
 |  private: | 
 |   // Returns true if there was a task to run. | 
 |   bool RunTask(); | 
 |  | 
 |   // Stores the actual tasks to be run, sorted by priority. | 
 |   TaskGraphWorkQueue work_queue_; | 
 | }; | 
 |  | 
 | }  // namespace cc | 
 |  | 
 | #endif  // CC_RASTER_SYNCHRONOUS_TASK_GRAPH_RUNNER_H_ |