// 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(); 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_