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()); |
} |
} |
} |