summaryrefslogtreecommitdiffstats
path: root/cc/resources/worker_pool.cc
diff options
context:
space:
mode:
Diffstat (limited to 'cc/resources/worker_pool.cc')
-rw-r--r--cc/resources/worker_pool.cc44
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),