// Copyright 2014 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CC_RASTER_TASK_GRAPH_RUNNER_H_ #define CC_RASTER_TASK_GRAPH_RUNNER_H_ #include <stddef.h> #include <stdint.h> #include "cc/cc_export.h" #include "cc/raster/task.h" namespace cc { // Opaque identifier that defines a namespace of tasks. class CC_EXPORT NamespaceToken { … }; // A TaskGraphRunner is an object that runs a set of tasks in the // order defined by a dependency graph. The TaskGraphRunner interface // provides a way of decoupling task scheduling from the mechanics of // how each task will be run. TaskGraphRunner provides the following // guarantees: // // - Scheduled tasks will not run synchronously. That is, the // ScheduleTasks() method will not call Task::Run() directly. // // - Scheduled tasks are guaranteed to run in the order defined by // dependency graph. // // - Once scheduled, a task is guaranteed to end up in the // |completed_tasks| vector populated by CollectCompletedTasks(), // even if it later gets canceled by another call to ScheduleTasks(). // // TaskGraphRunner does not guarantee that a task with high priority // runs after a task with low priority. The priority is just a hint // and a valid TaskGraphRunner might ignore it. Also it does not // guarantee a memory model for shared data between tasks. (In other // words, you should use your own synchronization/locking primitives if // you need to share data between tasks.) // // Implementations of TaskGraphRunner should be thread-safe in that all // methods must be safe to call on any thread. // // Some theoretical implementations of TaskGraphRunner: // // - A TaskGraphRunner that uses a thread pool to run scheduled tasks. // // - A TaskGraphRunner that has a method Run() that runs each task. class CC_EXPORT TaskGraphRunner { … }; } // namespace cc #endif // CC_RASTER_TASK_GRAPH_RUNNER_H_