Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(87)

Unified Diff: cc/resources/raster_worker_pool_perftest.cc

Issue 17351017: Re-land: cc: Add raster finished signals to RasterWorkerPool. (Closed) Base URL: http://git.chromium.org/chromium/src.git@new-graph-build
Patch Set: new approach Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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());
}
}
}

Powered by Google App Engine
This is Rietveld 408576698