Chromium Code Reviews| Index: cc/resources/raster_worker_pool_perftest.cc |
| diff --git a/cc/resources/raster_worker_pool_perftest.cc b/cc/resources/raster_worker_pool_perftest.cc |
| index 866daa87b8f1ff6843f991183afe97fb57bdd6eb..6ebf3679b581a90566bbf2b9a89e607755f2b50b 100644 |
| --- a/cc/resources/raster_worker_pool_perftest.cc |
| +++ b/cc/resources/raster_worker_pool_perftest.cc |
| @@ -5,6 +5,7 @@ |
| #include "cc/resources/raster_worker_pool.h" |
| #include "base/time.h" |
| +#include "cc/base/scoped_ptr_deque.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| namespace cc { |
| @@ -56,17 +57,68 @@ class PerfRasterWorkerPool : public RasterWorkerPool { |
| } |
| void BuildTaskGraph() { |
| - RasterTaskGraph graph; |
| + enum RasterTaskType { |
|
vmpstr
2013/06/27 23:31:21
This enum is in quite a few places, I think it's w
reveman
2013/06/28 17:26:07
Only used by pixel buffer RWP in latest patch.
|
| + PREPAINT_TYPE = 0, |
| + REQUIRED_FOR_ACTIVATION_TYPE = 1, |
| + NUM_TYPES = 2 |
| + }; |
| + ScopedPtrDeque<GraphNode> tasks[NUM_TYPES]; |
| + unsigned priority = 0; |
| + TaskGraph graph; |
| for (RasterTaskVector::const_iterator it = raster_tasks().begin(); |
| it != raster_tasks().end(); ++it) { |
| internal::RasterWorkerPoolTask* task = it->get(); |
| + RasterTaskType type = IsRasterTaskRequiredForActivation(task) ? |
| + REQUIRED_FOR_ACTIVATION_TYPE : |
| + PREPAINT_TYPE; |
| + |
| TaskMap::iterator perf_it = perf_tasks_.find(task); |
| DCHECK(perf_it != perf_tasks_.end()); |
| if (perf_it != perf_tasks_.end()) { |
| internal::WorkerPoolTask* perf_task = perf_it->second.get(); |
| - graph.InsertRasterTask(perf_task, task->dependencies()); |
| + |
| + tasks[type].push_back( |
| + CreateRasterTaskGraphNode(perf_task, |
| + task->dependencies(), |
| + priority++, |
| + &graph)); |
| + } |
| + } |
| + |
| + scoped_refptr<internal::WorkerPoolTask> |
| + raster_finished_task(new PerfWorkerPoolTaskImpl); |
| + scoped_ptr<GraphNode> raster_finished_node( |
| + new GraphNode(raster_finished_task.get(), 0u)); |
| + for (unsigned i = 0; i < NUM_TYPES; ++i) { |
| + for (unsigned j = 0; j < tasks[i].size(); ++j) { |
| + raster_finished_node->add_dependency(); |
| + tasks[i][j]->add_dependent(raster_finished_node.get()); |
| + } |
| + } |
| + graph.set(raster_finished_task.get(), raster_finished_node.Pass()); |
| + |
| + scoped_refptr<internal::WorkerPoolTask> |
| + raster_required_for_activation_finished_task( |
| + new PerfWorkerPoolTaskImpl); |
| + scoped_ptr<GraphNode> raster_required_for_activation_finished_node( |
| + new GraphNode(raster_required_for_activation_finished_task.get(), 0u)); |
| + for (unsigned j = 0; |
| + j < tasks[REQUIRED_FOR_ACTIVATION_TYPE].size(); |
| + ++j) { |
| + raster_required_for_activation_finished_node->add_dependency(); |
| + tasks[REQUIRED_FOR_ACTIVATION_TYPE][j]->add_dependent( |
| + raster_required_for_activation_finished_node.get()); |
| + } |
| + graph.set(raster_required_for_activation_finished_task.get(), |
| + raster_required_for_activation_finished_node.Pass()); |
| + |
| + for (unsigned i = 0; i < NUM_TYPES; ++i) { |
| + while (!tasks[i].empty()) { |
| + scoped_ptr<GraphNode> node = tasks[i].take_front(); |
| + internal::WorkerPoolTask* task = node->task(); |
| + graph.set(task, node.Pass()); |
| } |
| } |
| } |