Index: cc/raster/task_graph_runner.h |
diff --git a/cc/raster/task_graph_runner.h b/cc/raster/task_graph_runner.h |
index d5f8ceecb1935e340135fb05f1d775e074129eb1..51ac3341c35414a8ec896a4ef6f7924eb99765d7 100644 |
--- a/cc/raster/task_graph_runner.h |
+++ b/cc/raster/task_graph_runner.h |
@@ -16,85 +16,10 @@ |
#include "base/logging.h" |
#include "base/memory/ref_counted.h" |
#include "cc/base/cc_export.h" |
+#include "cc/raster/task.h" |
namespace cc { |
-class TaskGraphRunner; |
- |
-// A task which can be run by a TaskGraphRunner. To run a Task, it should be |
-// inserted into a TaskGraph, which can then be scheduled on the |
-// TaskGraphRunner. |
-class CC_EXPORT Task : public base::RefCountedThreadSafe<Task> { |
- public: |
- typedef std::vector<scoped_refptr<Task>> Vector; |
- |
- // Subclasses should implement this method. RunOnWorkerThread may be called |
- // on any thread, and subclasses are responsible for locking and thread |
- // safety. |
- virtual void RunOnWorkerThread() = 0; |
- |
- void WillRun(); |
- void DidRun(); |
- bool HasFinishedRunning() const; |
- |
- protected: |
- friend class base::RefCountedThreadSafe<Task>; |
- |
- Task(); |
- virtual ~Task(); |
- |
- bool will_run_; |
- bool did_run_; |
-}; |
- |
-// A task dependency graph describes the order in which to execute a set |
-// of tasks. Dependencies are represented as edges. Each node is assigned |
-// a category, a priority and a run count that matches the number of |
-// dependencies. Priority range from 0 (most favorable scheduling) to UINT16_MAX |
-// (least favorable). Categories range from 0 to UINT16_MAX. It is up to the |
-// implementation and its consumer to determine the meaning (if any) of a |
-// category. A TaskGraphRunner implementation may chose to prioritize certain |
-// categories over others, regardless of the individual priorities of tasks. |
-struct CC_EXPORT TaskGraph { |
- struct Node { |
- typedef std::vector<Node> Vector; |
- |
- Node(Task* task, |
- uint16_t category, |
- uint16_t priority, |
- uint32_t dependencies) |
- : task(task), |
- category(category), |
- priority(priority), |
- dependencies(dependencies) {} |
- |
- Task* task; |
- uint16_t category; |
- uint16_t priority; |
- uint32_t dependencies; |
- }; |
- |
- struct Edge { |
- typedef std::vector<Edge> Vector; |
- |
- Edge(const Task* task, Task* dependent) |
- : task(task), dependent(dependent) {} |
- |
- const Task* task; |
- Task* dependent; |
- }; |
- |
- TaskGraph(); |
- TaskGraph(const TaskGraph& other); |
- ~TaskGraph(); |
- |
- void Swap(TaskGraph* other); |
- void Reset(); |
- |
- Node::Vector nodes; |
- Edge::Vector edges; |
-}; |
- |
// Opaque identifier that defines a namespace of tasks. |
class CC_EXPORT NamespaceToken { |
public: |
@@ -166,61 +91,6 @@ class CC_EXPORT TaskGraphRunner { |
virtual ~TaskGraphRunner() {} |
}; |
-// Helper class for iterating over all dependents of a task. |
-class DependentIterator { |
- public: |
- DependentIterator(TaskGraph* graph, const Task* task) |
- : graph_(graph), |
- task_(task), |
- current_index_(static_cast<size_t>(-1)), |
- current_node_(NULL) { |
- ++(*this); |
- } |
- |
- TaskGraph::Node& operator->() const { |
- DCHECK_LT(current_index_, graph_->edges.size()); |
- DCHECK_EQ(graph_->edges[current_index_].task, task_); |
- DCHECK(current_node_); |
- return *current_node_; |
- } |
- |
- TaskGraph::Node& operator*() const { |
- DCHECK_LT(current_index_, graph_->edges.size()); |
- DCHECK_EQ(graph_->edges[current_index_].task, task_); |
- DCHECK(current_node_); |
- return *current_node_; |
- } |
- |
- // Note: Performance can be improved by keeping edges sorted. |
- DependentIterator& operator++() { |
- // Find next dependency edge for |task_|. |
- do { |
- ++current_index_; |
- if (current_index_ == graph_->edges.size()) |
- return *this; |
- } while (graph_->edges[current_index_].task != task_); |
- |
- // Now find the node for the dependent of this edge. |
- TaskGraph::Node::Vector::iterator it = std::find_if( |
- graph_->nodes.begin(), graph_->nodes.end(), |
- [this](const TaskGraph::Node& node) { |
- return node.task == graph_->edges[current_index_].dependent; |
- }); |
- DCHECK(it != graph_->nodes.end()); |
- current_node_ = &(*it); |
- |
- return *this; |
- } |
- |
- operator bool() const { return current_index_ < graph_->edges.size(); } |
- |
- private: |
- TaskGraph* graph_; |
- const Task* task_; |
- size_t current_index_; |
- TaskGraph::Node* current_node_; |
-}; |
- |
} // namespace cc |
#endif // CC_RASTER_TASK_GRAPH_RUNNER_H_ |