OLD | NEW |
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 "cc/debug/traced_value.h" | 8 #include "cc/debug/traced_value.h" |
9 #include "cc/resources/resource.h" | 9 #include "cc/resources/resource.h" |
10 | 10 |
11 namespace cc { | 11 namespace cc { |
12 | 12 |
13 // static | 13 // static |
14 scoped_ptr<ImageRasterWorkerPool> ImageRasterWorkerPool::Create( | 14 scoped_ptr<RasterWorkerPool> ImageRasterWorkerPool::Create( |
15 base::SequencedTaskRunner* task_runner, | 15 base::SequencedTaskRunner* task_runner, |
| 16 internal::TaskGraphRunner* task_graph_runner, |
16 ResourceProvider* resource_provider, | 17 ResourceProvider* resource_provider, |
17 unsigned texture_target) { | 18 unsigned texture_target) { |
18 return make_scoped_ptr(new ImageRasterWorkerPool( | 19 return make_scoped_ptr<RasterWorkerPool>(new ImageRasterWorkerPool( |
19 task_runner, GetTaskGraphRunner(), resource_provider, texture_target)); | 20 task_runner, task_graph_runner, resource_provider, texture_target)); |
20 } | 21 } |
21 | 22 |
22 ImageRasterWorkerPool::ImageRasterWorkerPool( | 23 ImageRasterWorkerPool::ImageRasterWorkerPool( |
23 base::SequencedTaskRunner* task_runner, | 24 base::SequencedTaskRunner* task_runner, |
24 internal::TaskGraphRunner* task_graph_runner, | 25 internal::TaskGraphRunner* task_graph_runner, |
25 ResourceProvider* resource_provider, | 26 ResourceProvider* resource_provider, |
26 unsigned texture_target) | 27 unsigned texture_target) |
27 : task_runner_(task_runner), | 28 : task_runner_(task_runner), |
28 task_graph_runner_(task_graph_runner), | 29 task_graph_runner_(task_graph_runner), |
29 namespace_token_(task_graph_runner->GetNamespaceToken()), | 30 namespace_token_(task_graph_runner->GetNamespaceToken()), |
30 resource_provider_(resource_provider), | 31 resource_provider_(resource_provider), |
31 texture_target_(texture_target), | 32 texture_target_(texture_target), |
32 raster_tasks_pending_(false), | 33 raster_tasks_pending_(false), |
33 raster_tasks_required_for_activation_pending_(false), | 34 raster_tasks_required_for_activation_pending_(false), |
34 raster_finished_weak_ptr_factory_(this) {} | 35 raster_finished_weak_ptr_factory_(this) {} |
35 | 36 |
36 ImageRasterWorkerPool::~ImageRasterWorkerPool() {} | 37 ImageRasterWorkerPool::~ImageRasterWorkerPool() {} |
37 | 38 |
38 void ImageRasterWorkerPool::SetClient(RasterWorkerPoolClient* client) { | 39 Rasterizer* ImageRasterWorkerPool::AsRasterizer() { return this; } |
| 40 |
| 41 void ImageRasterWorkerPool::SetClient(RasterizerClient* client) { |
39 client_ = client; | 42 client_ = client; |
40 } | 43 } |
41 | 44 |
42 void ImageRasterWorkerPool::Shutdown() { | 45 void ImageRasterWorkerPool::Shutdown() { |
43 TRACE_EVENT0("cc", "ImageRasterWorkerPool::Shutdown"); | 46 TRACE_EVENT0("cc", "ImageRasterWorkerPool::Shutdown"); |
44 | 47 |
45 internal::TaskGraph empty; | 48 internal::TaskGraph empty; |
46 task_graph_runner_->ScheduleTasks(namespace_token_, &empty); | 49 task_graph_runner_->ScheduleTasks(namespace_token_, &empty); |
47 task_graph_runner_->WaitForTasksToFinishRunning(namespace_token_); | 50 task_graph_runner_->WaitForTasksToFinishRunning(namespace_token_); |
48 } | 51 } |
(...skipping 13 matching lines...) Expand all Loading... |
62 raster_tasks_pending_ = true; | 65 raster_tasks_pending_ = true; |
63 raster_tasks_required_for_activation_pending_ = true; | 66 raster_tasks_required_for_activation_pending_ = true; |
64 | 67 |
65 unsigned priority = kRasterTaskPriorityBase; | 68 unsigned priority = kRasterTaskPriorityBase; |
66 | 69 |
67 graph_.Reset(); | 70 graph_.Reset(); |
68 | 71 |
69 // Cancel existing OnRasterFinished callbacks. | 72 // Cancel existing OnRasterFinished callbacks. |
70 raster_finished_weak_ptr_factory_.InvalidateWeakPtrs(); | 73 raster_finished_weak_ptr_factory_.InvalidateWeakPtrs(); |
71 | 74 |
72 scoped_refptr<internal::WorkerPoolTask> | 75 scoped_refptr<internal::RasterizerTask> |
73 new_raster_required_for_activation_finished_task( | 76 new_raster_required_for_activation_finished_task( |
74 CreateRasterRequiredForActivationFinishedTask( | 77 CreateRasterRequiredForActivationFinishedTask( |
75 queue->required_for_activation_count, | 78 queue->required_for_activation_count, |
76 task_runner_.get(), | 79 task_runner_.get(), |
77 base::Bind( | 80 base::Bind( |
78 &ImageRasterWorkerPool::OnRasterRequiredForActivationFinished, | 81 &ImageRasterWorkerPool::OnRasterRequiredForActivationFinished, |
79 raster_finished_weak_ptr_factory_.GetWeakPtr()))); | 82 raster_finished_weak_ptr_factory_.GetWeakPtr()))); |
80 scoped_refptr<internal::WorkerPoolTask> new_raster_finished_task( | 83 scoped_refptr<internal::RasterizerTask> new_raster_finished_task( |
81 CreateRasterFinishedTask( | 84 CreateRasterFinishedTask( |
82 task_runner_.get(), | 85 task_runner_.get(), |
83 base::Bind(&ImageRasterWorkerPool::OnRasterFinished, | 86 base::Bind(&ImageRasterWorkerPool::OnRasterFinished, |
84 raster_finished_weak_ptr_factory_.GetWeakPtr()))); | 87 raster_finished_weak_ptr_factory_.GetWeakPtr()))); |
85 | 88 |
86 for (RasterTaskQueue::Item::Vector::const_iterator it = queue->items.begin(); | 89 for (RasterTaskQueue::Item::Vector::const_iterator it = queue->items.begin(); |
87 it != queue->items.end(); | 90 it != queue->items.end(); |
88 ++it) { | 91 ++it) { |
89 const RasterTaskQueue::Item& item = *it; | 92 const RasterTaskQueue::Item& item = *it; |
90 internal::RasterWorkerPoolTask* task = item.task; | 93 internal::RasterTask* task = item.task; |
91 DCHECK(!task->HasCompleted()); | 94 DCHECK(!task->HasCompleted()); |
92 | 95 |
93 if (item.required_for_activation) { | 96 if (item.required_for_activation) { |
94 graph_.edges.push_back(internal::TaskGraph::Edge( | 97 graph_.edges.push_back(internal::TaskGraph::Edge( |
95 task, new_raster_required_for_activation_finished_task.get())); | 98 task, new_raster_required_for_activation_finished_task.get())); |
96 } | 99 } |
97 | 100 |
98 InsertNodesForRasterTask(&graph_, task, task->dependencies(), priority++); | 101 InsertNodesForRasterTask(&graph_, task, task->dependencies(), priority++); |
99 | 102 |
100 graph_.edges.push_back( | 103 graph_.edges.push_back( |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
135 } | 138 } |
136 | 139 |
137 void ImageRasterWorkerPool::CheckForCompletedTasks() { | 140 void ImageRasterWorkerPool::CheckForCompletedTasks() { |
138 TRACE_EVENT0("cc", "ImageRasterWorkerPool::CheckForCompletedTasks"); | 141 TRACE_EVENT0("cc", "ImageRasterWorkerPool::CheckForCompletedTasks"); |
139 | 142 |
140 task_graph_runner_->CollectCompletedTasks(namespace_token_, | 143 task_graph_runner_->CollectCompletedTasks(namespace_token_, |
141 &completed_tasks_); | 144 &completed_tasks_); |
142 for (internal::Task::Vector::const_iterator it = completed_tasks_.begin(); | 145 for (internal::Task::Vector::const_iterator it = completed_tasks_.begin(); |
143 it != completed_tasks_.end(); | 146 it != completed_tasks_.end(); |
144 ++it) { | 147 ++it) { |
145 internal::WorkerPoolTask* task = | 148 internal::RasterizerTask* task = |
146 static_cast<internal::WorkerPoolTask*>(it->get()); | 149 static_cast<internal::RasterizerTask*>(it->get()); |
147 | 150 |
148 task->WillComplete(); | 151 task->WillComplete(); |
149 task->CompleteOnOriginThread(this); | 152 task->CompleteOnOriginThread(this); |
150 task->DidComplete(); | 153 task->DidComplete(); |
151 | 154 |
152 task->RunReplyOnOriginThread(); | 155 task->RunReplyOnOriginThread(); |
153 } | 156 } |
154 completed_tasks_.clear(); | 157 completed_tasks_.clear(); |
155 } | 158 } |
156 | 159 |
157 SkCanvas* ImageRasterWorkerPool::AcquireCanvasForRaster( | 160 SkCanvas* ImageRasterWorkerPool::AcquireCanvasForRaster( |
158 internal::WorkerPoolTask* task, | 161 internal::RasterTask* task) { |
159 const Resource* resource) { | 162 return resource_provider_->MapImageRasterBuffer(task->resource()->id()); |
160 return resource_provider_->MapImageRasterBuffer(resource->id()); | |
161 } | 163 } |
162 | 164 |
163 void ImageRasterWorkerPool::ReleaseCanvasForRaster( | 165 void ImageRasterWorkerPool::ReleaseCanvasForRaster(internal::RasterTask* task) { |
164 internal::WorkerPoolTask* task, | 166 resource_provider_->UnmapImageRasterBuffer(task->resource()->id()); |
165 const Resource* resource) { | |
166 resource_provider_->UnmapImageRasterBuffer(resource->id()); | |
167 } | 167 } |
168 | 168 |
169 void ImageRasterWorkerPool::OnRasterFinished() { | 169 void ImageRasterWorkerPool::OnRasterFinished() { |
170 TRACE_EVENT0("cc", "ImageRasterWorkerPool::OnRasterFinished"); | 170 TRACE_EVENT0("cc", "ImageRasterWorkerPool::OnRasterFinished"); |
171 | 171 |
172 DCHECK(raster_tasks_pending_); | 172 DCHECK(raster_tasks_pending_); |
173 raster_tasks_pending_ = false; | 173 raster_tasks_pending_ = false; |
174 TRACE_EVENT_ASYNC_END0("cc", "ScheduledTasks", this); | 174 TRACE_EVENT_ASYNC_END0("cc", "ScheduledTasks", this); |
175 client_->DidFinishRunningTasks(); | 175 client_->DidFinishRunningTasks(); |
176 } | 176 } |
(...skipping 16 matching lines...) Expand all Loading... |
193 | 193 |
194 scoped_ptr<base::Value> ImageRasterWorkerPool::StateAsValue() const { | 194 scoped_ptr<base::Value> ImageRasterWorkerPool::StateAsValue() const { |
195 scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue); | 195 scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue); |
196 | 196 |
197 state->SetBoolean("tasks_required_for_activation_pending", | 197 state->SetBoolean("tasks_required_for_activation_pending", |
198 raster_tasks_required_for_activation_pending_); | 198 raster_tasks_required_for_activation_pending_); |
199 return state.PassAs<base::Value>(); | 199 return state.PassAs<base::Value>(); |
200 } | 200 } |
201 | 201 |
202 } // namespace cc | 202 } // namespace cc |
OLD | NEW |