| 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 |