Index: cc/resources/task_graph_runner.cc |
diff --git a/cc/resources/task_graph_runner.cc b/cc/resources/task_graph_runner.cc |
index 8a6d7f89291dc5e9096e4c592abe960efcc70e27..f35a763344a9699d7cc5823a61152f57a0172dd3 100644 |
--- a/cc/resources/task_graph_runner.cc |
+++ b/cc/resources/task_graph_runner.cc |
@@ -165,13 +165,13 @@ void TaskGraphRunner::WaitForTasksToFinishRunning(NamespaceToken token) { |
{ |
base::AutoLock lock(lock_); |
- TaskNamespaceMap::iterator it = namespaces_.find(token.id_); |
+ TaskNamespaceMap::const_iterator it = namespaces_.find(token.id_); |
if (it == namespaces_.end()) |
return; |
- TaskNamespace* task_namespace = it->second; |
+ const TaskNamespace& task_namespace = it->second; |
- while (!HasFinishedRunningTasksInNamespace(task_namespace)) |
+ while (!HasFinishedRunningTasksInNamespace(&task_namespace)) |
has_namespaces_with_finished_running_tasks_cv_.Wait(); |
// There may be other namespaces that have finished running |
@@ -195,16 +195,11 @@ void TaskGraphRunner::SetTaskGraph(NamespaceToken token, TaskGraph* graph) { |
DCHECK(!shutdown_); |
- scoped_ptr<TaskNamespace> task_namespace = |
- namespaces_.take_and_erase(token.id_); |
- |
- // Create task namespace if it doesn't exist. |
- if (!task_namespace) |
- task_namespace.reset(new TaskNamespace); |
+ TaskNamespace& task_namespace = namespaces_[token.id_]; |
// First adjust number of dependencies to reflect completed tasks. |
- for (Task::Vector::iterator it = task_namespace->completed_tasks.begin(); |
- it != task_namespace->completed_tasks.end(); |
+ for (Task::Vector::iterator it = task_namespace.completed_tasks.begin(); |
+ it != task_namespace.completed_tasks.end(); |
++it) { |
for (DependentIterator node_it(graph, it->get()); node_it; ++node_it) { |
TaskGraph::Node& node = *node_it; |
@@ -214,7 +209,7 @@ void TaskGraphRunner::SetTaskGraph(NamespaceToken token, TaskGraph* graph) { |
} |
// Build new "ready to run" queue and remove nodes from old graph. |
- task_namespace->ready_to_run_tasks.clear(); |
+ task_namespace.ready_to_run_tasks.clear(); |
for (TaskGraph::Node::Vector::iterator it = graph->nodes.begin(); |
it != graph->nodes.end(); |
++it) { |
@@ -224,12 +219,12 @@ void TaskGraphRunner::SetTaskGraph(NamespaceToken token, TaskGraph* graph) { |
// that the old graph is left all nodes not present in this graph, which |
// we use below to determine what tasks need to be canceled. |
TaskGraph::Node::Vector::iterator old_it = |
- std::find_if(task_namespace->graph.nodes.begin(), |
- task_namespace->graph.nodes.end(), |
+ std::find_if(task_namespace.graph.nodes.begin(), |
+ task_namespace.graph.nodes.end(), |
TaskGraph::Node::TaskComparator(node.task)); |
- if (old_it != task_namespace->graph.nodes.end()) { |
- std::swap(*old_it, task_namespace->graph.nodes.back()); |
- task_namespace->graph.nodes.pop_back(); |
+ if (old_it != task_namespace.graph.nodes.end()) { |
+ std::swap(*old_it, task_namespace.graph.nodes.back()); |
+ task_namespace.graph.nodes.pop_back(); |
} |
// Task is not ready to run if dependencies are not yet satisfied. |
@@ -245,18 +240,18 @@ void TaskGraphRunner::SetTaskGraph(NamespaceToken token, TaskGraph* graph) { |
running_tasks_.end()) |
continue; |
- task_namespace->ready_to_run_tasks.push_back( |
+ task_namespace.ready_to_run_tasks.push_back( |
PrioritizedTask(node.task, node.priority)); |
} |
// Rearrange the elements in |ready_to_run_tasks| in such a way that |
// they form a heap. |
- std::make_heap(task_namespace->ready_to_run_tasks.begin(), |
- task_namespace->ready_to_run_tasks.end(), |
+ std::make_heap(task_namespace.ready_to_run_tasks.begin(), |
+ task_namespace.ready_to_run_tasks.end(), |
CompareTaskPriority); |
// Swap task graph. |
- task_namespace->graph.Swap(graph); |
+ task_namespace.graph.Swap(graph); |
// Determine what tasks in old graph need to be canceled. |
for (TaskGraph::Node::Vector::iterator it = graph->nodes.begin(); |
@@ -273,18 +268,16 @@ void TaskGraphRunner::SetTaskGraph(NamespaceToken token, TaskGraph* graph) { |
running_tasks_.end()) |
continue; |
- task_namespace->completed_tasks.push_back(node.task); |
+ task_namespace.completed_tasks.push_back(node.task); |
} |
- namespaces_.set(token.id_, task_namespace.Pass()); |
- |
// Build new "ready to run" task namespaces queue. |
ready_to_run_namespaces_.clear(); |
for (TaskNamespaceMap::iterator it = namespaces_.begin(); |
it != namespaces_.end(); |
++it) { |
- if (!it->second->ready_to_run_tasks.empty()) |
- ready_to_run_namespaces_.push_back(it->second); |
+ if (!it->second.ready_to_run_tasks.empty()) |
+ ready_to_run_namespaces_.push_back(&it->second); |
} |
// Rearrange the task namespaces in |ready_to_run_namespaces_| |
@@ -312,17 +305,17 @@ void TaskGraphRunner::CollectCompletedTasks(NamespaceToken token, |
if (it == namespaces_.end()) |
return; |
- TaskNamespace* task_namespace = it->second; |
+ TaskNamespace& task_namespace = it->second; |
DCHECK_EQ(0u, completed_tasks->size()); |
- completed_tasks->swap(task_namespace->completed_tasks); |
- if (!HasFinishedRunningTasksInNamespace(task_namespace)) |
+ completed_tasks->swap(task_namespace.completed_tasks); |
+ if (!HasFinishedRunningTasksInNamespace(&task_namespace)) |
return; |
// Remove namespace if finished running tasks. |
- DCHECK_EQ(0u, task_namespace->completed_tasks.size()); |
- DCHECK_EQ(0u, task_namespace->ready_to_run_tasks.size()); |
- DCHECK_EQ(0u, task_namespace->num_running_tasks); |
+ DCHECK_EQ(0u, task_namespace.completed_tasks.size()); |
+ DCHECK_EQ(0u, task_namespace.ready_to_run_tasks.size()); |
+ DCHECK_EQ(0u, task_namespace.num_running_tasks); |
namespaces_.erase(it); |
} |
} |