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

Side by Side Diff: cc/resources/image_raster_worker_pool.cc

Issue 154003006: cc: Switch to vector based TaskGraph implementation. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: build fix Created 6 years, 10 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/resources/image_raster_worker_pool.h" 5 #include "cc/resources/image_raster_worker_pool.h"
6 6
7 #include "base/debug/trace_event.h" 7 #include "base/debug/trace_event.h"
8 #include "base/values.h" 8 #include "base/values.h"
9 #include "cc/debug/traced_value.h" 9 #include "cc/debug/traced_value.h"
10 #include "cc/resources/resource.h" 10 #include "cc/resources/resource.h"
(...skipping 16 matching lines...) Expand all
27 TRACE_EVENT0("cc", "ImageRasterWorkerPool::ScheduleTasks"); 27 TRACE_EVENT0("cc", "ImageRasterWorkerPool::ScheduleTasks");
28 28
29 RasterWorkerPool::SetRasterTasks(queue); 29 RasterWorkerPool::SetRasterTasks(queue);
30 30
31 if (!raster_tasks_pending_) 31 if (!raster_tasks_pending_)
32 TRACE_EVENT_ASYNC_BEGIN0("cc", "ScheduledTasks", this); 32 TRACE_EVENT_ASYNC_BEGIN0("cc", "ScheduledTasks", this);
33 33
34 raster_tasks_pending_ = true; 34 raster_tasks_pending_ = true;
35 raster_tasks_required_for_activation_pending_ = true; 35 raster_tasks_required_for_activation_pending_ = true;
36 36
37 unsigned priority = 0u; 37 unsigned priority = kRasterTaskPriorityBase;
38 TaskGraph graph; 38 internal::TaskGraph graph;
39 39
40 scoped_refptr<internal::WorkerPoolTask> 40 scoped_refptr<internal::WorkerPoolTask>
41 new_raster_required_for_activation_finished_task( 41 new_raster_required_for_activation_finished_task(
42 CreateRasterRequiredForActivationFinishedTask( 42 CreateRasterRequiredForActivationFinishedTask(
43 raster_tasks_required_for_activation().size())); 43 raster_tasks_required_for_activation().size()));
44 internal::GraphNode* raster_required_for_activation_finished_node =
45 CreateGraphNodeForTask(
46 new_raster_required_for_activation_finished_task.get(),
47 priority++,
48 &graph);
49
50 scoped_refptr<internal::WorkerPoolTask> new_raster_finished_task( 44 scoped_refptr<internal::WorkerPoolTask> new_raster_finished_task(
51 CreateRasterFinishedTask()); 45 CreateRasterFinishedTask());
52 internal::GraphNode* raster_finished_node = CreateGraphNodeForTask( 46
53 new_raster_finished_task.get(), priority++, &graph); 47 size_t raster_required_for_activation_finished_dependency_count = 0u;
48 size_t raster_finished_dependency_count = 0u;
54 49
55 RasterTaskVector gpu_raster_tasks; 50 RasterTaskVector gpu_raster_tasks;
56 51
57 for (RasterTaskVector::const_iterator it = raster_tasks().begin(); 52 for (RasterTaskVector::const_iterator it = raster_tasks().begin();
58 it != raster_tasks().end(); 53 it != raster_tasks().end();
59 ++it) { 54 ++it) {
60 internal::RasterWorkerPoolTask* task = it->get(); 55 internal::RasterWorkerPoolTask* task = it->get();
61 DCHECK(!task->HasCompleted()); 56 DCHECK(!task->HasCompleted());
62 57
63 if (task->use_gpu_rasterization()) { 58 if (task->use_gpu_rasterization()) {
64 gpu_raster_tasks.push_back(task); 59 gpu_raster_tasks.push_back(task);
65 continue; 60 continue;
66 } 61 }
67 62
68 CreateGraphNodeForImageRasterTask( 63 if (IsRasterTaskRequiredForActivation(task)) {
69 task, 64 ++raster_required_for_activation_finished_dependency_count;
70 task->dependencies(), 65 graph.edges.push_back(internal::TaskGraph::Edge(
71 priority++, 66 task, new_raster_required_for_activation_finished_task.get()));
72 IsRasterTaskRequiredForActivation(task), 67 }
73 raster_required_for_activation_finished_node, 68
74 raster_finished_node, 69 InsertNodeForRasterTask(&graph, task, task->dependencies(), priority++);
75 &graph); 70
71 ++raster_finished_dependency_count;
72 graph.edges.push_back(
73 internal::TaskGraph::Edge(task, new_raster_finished_task.get()));
76 } 74 }
77 75
76 InsertNodeForTask(&graph,
77 new_raster_required_for_activation_finished_task.get(),
78 kRasterRequiredForActivationFinishedTaskPriority,
79 raster_required_for_activation_finished_dependency_count);
80 InsertNodeForTask(&graph,
81 new_raster_finished_task.get(),
82 kRasterFinishedTaskPriority,
83 raster_finished_dependency_count);
84
78 SetTaskGraph(&graph); 85 SetTaskGraph(&graph);
79 86
80 set_raster_finished_task(new_raster_finished_task); 87 set_raster_finished_task(new_raster_finished_task);
81 set_raster_required_for_activation_finished_task( 88 set_raster_required_for_activation_finished_task(
82 new_raster_required_for_activation_finished_task); 89 new_raster_required_for_activation_finished_task);
83 90
84 RunGpuRasterTasks(gpu_raster_tasks); 91 RunGpuRasterTasks(gpu_raster_tasks);
85 92
86 TRACE_EVENT_ASYNC_STEP_INTO1( 93 TRACE_EVENT_ASYNC_STEP_INTO1(
87 "cc", 94 "cc",
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 170
164 scoped_ptr<base::Value> ImageRasterWorkerPool::StateAsValue() const { 171 scoped_ptr<base::Value> ImageRasterWorkerPool::StateAsValue() const {
165 scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue); 172 scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue);
166 173
167 state->SetBoolean("tasks_required_for_activation_pending", 174 state->SetBoolean("tasks_required_for_activation_pending",
168 raster_tasks_required_for_activation_pending_); 175 raster_tasks_required_for_activation_pending_);
169 state->Set("scheduled_state", ScheduledStateAsValue().release()); 176 state->Set("scheduled_state", ScheduledStateAsValue().release());
170 return state.PassAs<base::Value>(); 177 return state.PassAs<base::Value>();
171 } 178 }
172 179
173 // static
174 void ImageRasterWorkerPool::CreateGraphNodeForImageRasterTask(
175 internal::WorkerPoolTask* image_task,
176 const internal::Task::Vector& decode_tasks,
177 unsigned priority,
178 bool is_required_for_activation,
179 internal::GraphNode* raster_required_for_activation_finished_node,
180 internal::GraphNode* raster_finished_node,
181 TaskGraph* graph) {
182 internal::GraphNode* image_node =
183 CreateGraphNodeForRasterTask(image_task, decode_tasks, priority, graph);
184
185 if (is_required_for_activation) {
186 raster_required_for_activation_finished_node->add_dependency();
187 image_node->add_dependent(raster_required_for_activation_finished_node);
188 }
189
190 raster_finished_node->add_dependency();
191 image_node->add_dependent(raster_finished_node);
192 }
193
194 } // namespace cc 180 } // namespace cc
OLDNEW
« no previous file with comments | « cc/resources/image_raster_worker_pool.h ('k') | cc/resources/pixel_buffer_raster_worker_pool.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698