diff options
Diffstat (limited to 'cc/resources/worker_pool.cc')
-rw-r--r-- | cc/resources/worker_pool.cc | 44 |
1 files changed, 24 insertions, 20 deletions
diff --git a/cc/resources/worker_pool.cc b/cc/resources/worker_pool.cc index c2dba6c..b4e96f6 100644 --- a/cc/resources/worker_pool.cc +++ b/cc/resources/worker_pool.cc @@ -64,6 +64,15 @@ bool WorkerPoolTask::HasCompleted() const { return did_complete_; } +GraphNode::GraphNode(internal::WorkerPoolTask* task, unsigned priority) + : task_(task), + priority_(priority), + num_dependencies_(0) { +} + +GraphNode::~GraphNode() { +} + } // namespace internal // Internal to the worker pool. Any data or logic that needs to be @@ -90,8 +99,8 @@ class WorkerPool::Inner : public base::DelegateSimpleThread::Delegate { private: class PriorityComparator { public: - bool operator()(const GraphNode* a, - const GraphNode* b) { + bool operator()(const internal::GraphNode* a, + const internal::GraphNode* b) { // In this system, numerically lower priority is run first. if (a->priority() != b->priority()) return a->priority() > b->priority(); @@ -125,8 +134,8 @@ class WorkerPool::Inner : public base::DelegateSimpleThread::Delegate { GraphNodeMap pending_tasks_; // Ordered set of tasks that are ready to run. - typedef std::priority_queue<GraphNode*, - std::vector<GraphNode*>, + typedef std::priority_queue<internal::GraphNode*, + std::vector<internal::GraphNode*>, PriorityComparator> TaskQueue; TaskQueue ready_to_run_tasks_; @@ -216,11 +225,13 @@ void WorkerPool::Inner::SetTaskGraph(TaskGraph* graph) { it != completed_tasks_.end(); ++it) { internal::WorkerPoolTask* task = it->get(); - scoped_ptr<GraphNode> node = new_pending_tasks.take_and_erase(task); + scoped_ptr<internal::GraphNode> node = new_pending_tasks.take_and_erase( + task); if (node) { - for (GraphNode::Vector::const_iterator it = node->dependents().begin(); + for (internal::GraphNode::Vector::const_iterator it = + node->dependents().begin(); it != node->dependents().end(); ++it) { - GraphNode* dependent_node = *it; + internal::GraphNode* dependent_node = *it; dependent_node->remove_dependency(); } } @@ -243,7 +254,7 @@ void WorkerPool::Inner::SetTaskGraph(TaskGraph* graph) { it != new_pending_tasks.end(); ++it) { internal::WorkerPoolTask* task = it->first; DCHECK(task); - GraphNode* node = it->second; + internal::GraphNode* node = it->second; // Completed tasks should not exist in |new_pending_tasks|. DCHECK(!task->HasFinishedRunning()); @@ -336,11 +347,13 @@ void WorkerPool::Inner::Run() { // Now iterate over all dependents to remove dependency and check // if they are ready to run. - scoped_ptr<GraphNode> node = running_tasks_.take_and_erase(task.get()); + scoped_ptr<internal::GraphNode> node = running_tasks_.take_and_erase( + task.get()); if (node) { - for (GraphNode::Vector::const_iterator it = node->dependents().begin(); + for (internal::GraphNode::Vector::const_iterator it = + node->dependents().begin(); it != node->dependents().end(); ++it) { - GraphNode* dependent_node = *it; + internal::GraphNode* dependent_node = *it; dependent_node->remove_dependency(); // Task is ready if it has no dependencies. Add it to @@ -359,15 +372,6 @@ void WorkerPool::Inner::Run() { has_ready_to_run_tasks_cv_.Signal(); } -WorkerPool::GraphNode::GraphNode() - : task_(NULL), - priority_(0), - num_dependencies_(0) { -} - -WorkerPool::GraphNode::~GraphNode() { -} - WorkerPool::WorkerPool(size_t num_threads, const std::string& thread_name_prefix) : in_dispatch_completion_callbacks_(false), |