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

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

Issue 165603002: cc: Move GPU raster to DirectRasterWorkerPool. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: remove rastertaskqueue changes and refactor worker pool delegate 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"
11 #include "third_party/skia/include/core/SkBitmapDevice.h" 11 #include "third_party/skia/include/core/SkBitmapDevice.h"
12 12
13 namespace cc { 13 namespace cc {
14 14
15 // static 15 // static
16 scoped_ptr<RasterWorkerPool> ImageRasterWorkerPool::Create( 16 scoped_ptr<RasterWorkerPool> ImageRasterWorkerPool::Create(
17 ResourceProvider* resource_provider, 17 ResourceProvider* resource_provider,
18 ContextProvider* context_provider,
19 unsigned texture_target) { 18 unsigned texture_target) {
20 return make_scoped_ptr<RasterWorkerPool>( 19 return make_scoped_ptr<RasterWorkerPool>(
21 new ImageRasterWorkerPool(GetTaskGraphRunner(), 20 new ImageRasterWorkerPool(GetTaskGraphRunner(),
22 resource_provider, 21 resource_provider,
23 context_provider,
24 texture_target)); 22 texture_target));
25 } 23 }
26 24
27 ImageRasterWorkerPool::ImageRasterWorkerPool( 25 ImageRasterWorkerPool::ImageRasterWorkerPool(
28 internal::TaskGraphRunner* task_graph_runner, 26 internal::TaskGraphRunner* task_graph_runner,
29 ResourceProvider* resource_provider, 27 ResourceProvider* resource_provider,
30 ContextProvider* context_provider,
31 unsigned texture_target) 28 unsigned texture_target)
32 : RasterWorkerPool(task_graph_runner, resource_provider, context_provider), 29 : RasterWorkerPool(task_graph_runner, resource_provider),
33 texture_target_(texture_target), 30 texture_target_(texture_target),
34 raster_tasks_pending_(false), 31 raster_tasks_pending_(false),
35 raster_tasks_required_for_activation_pending_(false) {} 32 raster_tasks_required_for_activation_pending_(false) {}
36 33
37 ImageRasterWorkerPool::~ImageRasterWorkerPool() {} 34 ImageRasterWorkerPool::~ImageRasterWorkerPool() {}
38 35
39 void ImageRasterWorkerPool::ScheduleTasks(RasterTask::Queue* queue) { 36 void ImageRasterWorkerPool::ScheduleTasks(RasterTask::Queue* queue) {
40 TRACE_EVENT0("cc", "ImageRasterWorkerPool::ScheduleTasks"); 37 TRACE_EVENT0("cc", "ImageRasterWorkerPool::ScheduleTasks");
41 38
42 if (!raster_tasks_pending_) 39 if (!raster_tasks_pending_)
43 TRACE_EVENT_ASYNC_BEGIN0("cc", "ScheduledTasks", this); 40 TRACE_EVENT_ASYNC_BEGIN0("cc", "ScheduledTasks", this);
44 41
45 raster_tasks_pending_ = true; 42 raster_tasks_pending_ = true;
46 raster_tasks_required_for_activation_pending_ = true; 43 raster_tasks_required_for_activation_pending_ = true;
47 44
48 unsigned priority = kRasterTaskPriorityBase; 45 unsigned priority = kRasterTaskPriorityBase;
49 46
50 graph_.Reset(); 47 graph_.Reset();
51 48
52 scoped_refptr<internal::WorkerPoolTask> 49 scoped_refptr<internal::WorkerPoolTask>
53 new_raster_required_for_activation_finished_task( 50 new_raster_required_for_activation_finished_task(
54 CreateRasterRequiredForActivationFinishedTask( 51 CreateRasterRequiredForActivationFinishedTask(
55 queue->required_for_activation_count())); 52 queue->required_for_activation_count()));
56 scoped_refptr<internal::WorkerPoolTask> new_raster_finished_task( 53 scoped_refptr<internal::WorkerPoolTask> new_raster_finished_task(
57 CreateRasterFinishedTask()); 54 CreateRasterFinishedTask());
58 55
59 size_t raster_required_for_activation_finished_dependency_count = 0u;
60 size_t raster_finished_dependency_count = 0u;
61
62 RasterTaskVector gpu_raster_tasks;
63 for (RasterTaskQueueIterator it(queue); it; ++it) { 56 for (RasterTaskQueueIterator it(queue); it; ++it) {
64 internal::RasterWorkerPoolTask* task = *it; 57 internal::RasterWorkerPoolTask* task = *it;
65 DCHECK(!task->HasCompleted()); 58 DCHECK(!task->HasCompleted());
66 59
67 if (task->use_gpu_rasterization()) {
68 gpu_raster_tasks.push_back(task);
69 continue;
70 }
71
72 if (it.required_for_activation()) { 60 if (it.required_for_activation()) {
73 ++raster_required_for_activation_finished_dependency_count;
74 graph_.edges.push_back(internal::TaskGraph::Edge( 61 graph_.edges.push_back(internal::TaskGraph::Edge(
75 task, new_raster_required_for_activation_finished_task.get())); 62 task, new_raster_required_for_activation_finished_task.get()));
76 } 63 }
77 64
78 InsertNodeForRasterTask(&graph_, task, task->dependencies(), priority++); 65 InsertNodeForRasterTask(&graph_, task, task->dependencies(), priority++);
79 66
80 ++raster_finished_dependency_count;
81 graph_.edges.push_back( 67 graph_.edges.push_back(
82 internal::TaskGraph::Edge(task, new_raster_finished_task.get())); 68 internal::TaskGraph::Edge(task, new_raster_finished_task.get()));
83 } 69 }
84 70
85 InsertNodeForTask(&graph_, 71 InsertNodeForTask(&graph_,
86 new_raster_required_for_activation_finished_task.get(), 72 new_raster_required_for_activation_finished_task.get(),
87 kRasterRequiredForActivationFinishedTaskPriority, 73 kRasterRequiredForActivationFinishedTaskPriority,
88 raster_required_for_activation_finished_dependency_count); 74 queue->required_for_activation_count());
89 InsertNodeForTask(&graph_, 75 InsertNodeForTask(&graph_,
90 new_raster_finished_task.get(), 76 new_raster_finished_task.get(),
91 kRasterFinishedTaskPriority, 77 kRasterFinishedTaskPriority,
92 raster_finished_dependency_count); 78 queue->count());
93 79
94 raster_tasks_.Swap(queue); 80 raster_tasks_.Swap(queue);
95 81
96 SetTaskGraph(&graph_); 82 SetTaskGraph(&graph_);
97 83
98 set_raster_finished_task(new_raster_finished_task); 84 set_raster_finished_task(new_raster_finished_task);
99 set_raster_required_for_activation_finished_task( 85 set_raster_required_for_activation_finished_task(
100 new_raster_required_for_activation_finished_task); 86 new_raster_required_for_activation_finished_task);
101 87
102 if (!gpu_raster_tasks.empty())
103 RunGpuRasterTasks(gpu_raster_tasks);
104
105 TRACE_EVENT_ASYNC_STEP_INTO1( 88 TRACE_EVENT_ASYNC_STEP_INTO1(
106 "cc", 89 "cc",
107 "ScheduledTasks", 90 "ScheduledTasks",
108 this, 91 this,
109 "rasterizing", 92 "rasterizing",
110 "state", 93 "state",
111 TracedValue::FromValue(StateAsValue().release())); 94 TracedValue::FromValue(StateAsValue().release()));
112 } 95 }
113 96
114 unsigned ImageRasterWorkerPool::GetResourceTarget() const { 97 unsigned ImageRasterWorkerPool::GetResourceTarget() const {
(...skipping 14 matching lines...) Expand all
129 internal::WorkerPoolTask* task = 112 internal::WorkerPoolTask* task =
130 static_cast<internal::WorkerPoolTask*>(it->get()); 113 static_cast<internal::WorkerPoolTask*>(it->get());
131 114
132 task->WillComplete(); 115 task->WillComplete();
133 task->CompleteOnOriginThread(this); 116 task->CompleteOnOriginThread(this);
134 task->DidComplete(); 117 task->DidComplete();
135 118
136 task->RunReplyOnOriginThread(); 119 task->RunReplyOnOriginThread();
137 } 120 }
138 completed_tasks_.clear(); 121 completed_tasks_.clear();
139
140 CheckForCompletedGpuRasterTasks();
141 } 122 }
142 123
143 SkCanvas* ImageRasterWorkerPool::AcquireCanvasForRaster( 124 SkCanvas* ImageRasterWorkerPool::AcquireCanvasForRaster(
144 internal::RasterWorkerPoolTask* task) { 125 internal::RasterWorkerPoolTask* task) {
145 if (task->use_gpu_rasterization())
146 return resource_provider()->MapDirectRasterBuffer(task->resource()->id());
147
148 return resource_provider()->MapImageRasterBuffer(task->resource()->id()); 126 return resource_provider()->MapImageRasterBuffer(task->resource()->id());
149 } 127 }
150 128
151 void ImageRasterWorkerPool::OnRasterCompleted( 129 void ImageRasterWorkerPool::OnRasterCompleted(
152 internal::RasterWorkerPoolTask* task, 130 internal::RasterWorkerPoolTask* task,
153 const PicturePileImpl::Analysis& analysis) { 131 const PicturePileImpl::Analysis& analysis) {
154 if (task->use_gpu_rasterization()) {
155 resource_provider()->UnmapDirectRasterBuffer(task->resource()->id());
156 return;
157 }
158 resource_provider()->UnmapImageRasterBuffer(task->resource()->id()); 132 resource_provider()->UnmapImageRasterBuffer(task->resource()->id());
159 } 133 }
160 134
161 void ImageRasterWorkerPool::OnImageDecodeCompleted(
162 internal::WorkerPoolTask* task) {}
163
164 void ImageRasterWorkerPool::OnRasterTasksFinished() { 135 void ImageRasterWorkerPool::OnRasterTasksFinished() {
165 DCHECK(raster_tasks_pending_); 136 DCHECK(raster_tasks_pending_);
166 raster_tasks_pending_ = false; 137 raster_tasks_pending_ = false;
167 TRACE_EVENT_ASYNC_END0("cc", "ScheduledTasks", this); 138 TRACE_EVENT_ASYNC_END0("cc", "ScheduledTasks", this);
168 client()->DidFinishRunningTasks(); 139 client()->DidFinishRunningTasks();
169 } 140 }
170 141
171 void ImageRasterWorkerPool::OnRasterTasksRequiredForActivationFinished() { 142 void ImageRasterWorkerPool::OnRasterTasksRequiredForActivationFinished() {
172 DCHECK(raster_tasks_required_for_activation_pending_); 143 DCHECK(raster_tasks_required_for_activation_pending_);
173 raster_tasks_required_for_activation_pending_ = false; 144 raster_tasks_required_for_activation_pending_ = false;
174 TRACE_EVENT_ASYNC_STEP_INTO1( 145 TRACE_EVENT_ASYNC_STEP_INTO1(
175 "cc", 146 "cc",
176 "ScheduledTasks", 147 "ScheduledTasks",
177 this, 148 this,
178 "rasterizing", 149 "rasterizing",
179 "state", 150 "state",
180 TracedValue::FromValue(StateAsValue().release())); 151 TracedValue::FromValue(StateAsValue().release()));
181 client()->DidFinishRunningTasksRequiredForActivation(); 152 client()->DidFinishRunningTasksRequiredForActivation();
182 } 153 }
183 154
184 scoped_ptr<base::Value> ImageRasterWorkerPool::StateAsValue() const { 155 scoped_ptr<base::Value> ImageRasterWorkerPool::StateAsValue() const {
185 scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue); 156 scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue);
186 157
187 state->SetBoolean("tasks_required_for_activation_pending", 158 state->SetBoolean("tasks_required_for_activation_pending",
188 raster_tasks_required_for_activation_pending_); 159 raster_tasks_required_for_activation_pending_);
189 return state.PassAs<base::Value>(); 160 return state.PassAs<base::Value>();
190 } 161 }
191 162
192 } // namespace cc 163 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698