| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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_copy_raster_worker_pool.h" | 5 #include "cc/resources/one_copy_raster_worker_pool.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/debug/trace_event.h" | 9 #include "base/debug/trace_event.h" |
| 10 #include "base/debug/trace_event_argument.h" | 10 #include "base/debug/trace_event_argument.h" |
| 11 #include "base/strings/stringprintf.h" | 11 #include "base/strings/stringprintf.h" |
| 12 #include "cc/debug/traced_value.h" | 12 #include "cc/debug/traced_value.h" |
| 13 #include "cc/resources/raster_buffer.h" | 13 #include "cc/resources/raster_buffer.h" |
| 14 #include "cc/resources/resource_pool.h" | 14 #include "cc/resources/resource_pool.h" |
| 15 #include "cc/resources/scoped_resource.h" | 15 #include "cc/resources/scoped_resource.h" |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 77 uint8_t* buffer_; | 77 uint8_t* buffer_; |
| 78 int stride_; | 78 int stride_; |
| 79 SkBitmap bitmap_; | 79 SkBitmap bitmap_; |
| 80 | 80 |
| 81 DISALLOW_COPY_AND_ASSIGN(RasterBufferImpl); | 81 DISALLOW_COPY_AND_ASSIGN(RasterBufferImpl); |
| 82 }; | 82 }; |
| 83 | 83 |
| 84 } // namespace | 84 } // namespace |
| 85 | 85 |
| 86 // static | 86 // static |
| 87 scoped_ptr<RasterWorkerPool> ImageCopyRasterWorkerPool::Create( | 87 scoped_ptr<RasterWorkerPool> OneCopyRasterWorkerPool::Create( |
| 88 base::SequencedTaskRunner* task_runner, | 88 base::SequencedTaskRunner* task_runner, |
| 89 TaskGraphRunner* task_graph_runner, | 89 TaskGraphRunner* task_graph_runner, |
| 90 ContextProvider* context_provider, | 90 ContextProvider* context_provider, |
| 91 ResourceProvider* resource_provider, | 91 ResourceProvider* resource_provider, |
| 92 ResourcePool* resource_pool) { | 92 ResourcePool* resource_pool) { |
| 93 return make_scoped_ptr<RasterWorkerPool>( | 93 return make_scoped_ptr<RasterWorkerPool>( |
| 94 new ImageCopyRasterWorkerPool(task_runner, | 94 new OneCopyRasterWorkerPool(task_runner, |
| 95 task_graph_runner, | 95 task_graph_runner, |
| 96 context_provider, | 96 context_provider, |
| 97 resource_provider, | 97 resource_provider, |
| 98 resource_pool)); | 98 resource_pool)); |
| 99 } | 99 } |
| 100 | 100 |
| 101 ImageCopyRasterWorkerPool::ImageCopyRasterWorkerPool( | 101 OneCopyRasterWorkerPool::OneCopyRasterWorkerPool( |
| 102 base::SequencedTaskRunner* task_runner, | 102 base::SequencedTaskRunner* task_runner, |
| 103 TaskGraphRunner* task_graph_runner, | 103 TaskGraphRunner* task_graph_runner, |
| 104 ContextProvider* context_provider, | 104 ContextProvider* context_provider, |
| 105 ResourceProvider* resource_provider, | 105 ResourceProvider* resource_provider, |
| 106 ResourcePool* resource_pool) | 106 ResourcePool* resource_pool) |
| 107 : task_runner_(task_runner), | 107 : task_runner_(task_runner), |
| 108 task_graph_runner_(task_graph_runner), | 108 task_graph_runner_(task_graph_runner), |
| 109 namespace_token_(task_graph_runner->GetNamespaceToken()), | 109 namespace_token_(task_graph_runner->GetNamespaceToken()), |
| 110 context_provider_(context_provider), | 110 context_provider_(context_provider), |
| 111 resource_provider_(resource_provider), | 111 resource_provider_(resource_provider), |
| 112 resource_pool_(resource_pool), | 112 resource_pool_(resource_pool), |
| 113 raster_finished_weak_ptr_factory_(this) { | 113 raster_finished_weak_ptr_factory_(this) { |
| 114 DCHECK(context_provider_); | 114 DCHECK(context_provider_); |
| 115 } | 115 } |
| 116 | 116 |
| 117 ImageCopyRasterWorkerPool::~ImageCopyRasterWorkerPool() { | 117 OneCopyRasterWorkerPool::~OneCopyRasterWorkerPool() { |
| 118 } | 118 } |
| 119 | 119 |
| 120 Rasterizer* ImageCopyRasterWorkerPool::AsRasterizer() { return this; } | 120 Rasterizer* OneCopyRasterWorkerPool::AsRasterizer() { |
| 121 return this; |
| 122 } |
| 121 | 123 |
| 122 void ImageCopyRasterWorkerPool::SetClient(RasterizerClient* client) { | 124 void OneCopyRasterWorkerPool::SetClient(RasterizerClient* client) { |
| 123 client_ = client; | 125 client_ = client; |
| 124 } | 126 } |
| 125 | 127 |
| 126 void ImageCopyRasterWorkerPool::Shutdown() { | 128 void OneCopyRasterWorkerPool::Shutdown() { |
| 127 TRACE_EVENT0("cc", "ImageCopyRasterWorkerPool::Shutdown"); | 129 TRACE_EVENT0("cc", "OneCopyRasterWorkerPool::Shutdown"); |
| 128 | 130 |
| 129 TaskGraph empty; | 131 TaskGraph empty; |
| 130 task_graph_runner_->ScheduleTasks(namespace_token_, &empty); | 132 task_graph_runner_->ScheduleTasks(namespace_token_, &empty); |
| 131 task_graph_runner_->WaitForTasksToFinishRunning(namespace_token_); | 133 task_graph_runner_->WaitForTasksToFinishRunning(namespace_token_); |
| 132 } | 134 } |
| 133 | 135 |
| 134 void ImageCopyRasterWorkerPool::ScheduleTasks(RasterTaskQueue* queue) { | 136 void OneCopyRasterWorkerPool::ScheduleTasks(RasterTaskQueue* queue) { |
| 135 TRACE_EVENT0("cc", "ImageCopyRasterWorkerPool::ScheduleTasks"); | 137 TRACE_EVENT0("cc", "OneCopyRasterWorkerPool::ScheduleTasks"); |
| 136 | 138 |
| 137 if (raster_pending_.none()) | 139 if (raster_pending_.none()) |
| 138 TRACE_EVENT_ASYNC_BEGIN0("cc", "ScheduledTasks", this); | 140 TRACE_EVENT_ASYNC_BEGIN0("cc", "ScheduledTasks", this); |
| 139 | 141 |
| 140 // Mark all task sets as pending. | 142 // Mark all task sets as pending. |
| 141 raster_pending_.set(); | 143 raster_pending_.set(); |
| 142 | 144 |
| 143 unsigned priority = kRasterTaskPriorityBase; | 145 unsigned priority = kRasterTaskPriorityBase; |
| 144 | 146 |
| 145 graph_.Reset(); | 147 graph_.Reset(); |
| 146 | 148 |
| 147 // Cancel existing OnRasterFinished callbacks. | 149 // Cancel existing OnRasterFinished callbacks. |
| 148 raster_finished_weak_ptr_factory_.InvalidateWeakPtrs(); | 150 raster_finished_weak_ptr_factory_.InvalidateWeakPtrs(); |
| 149 | 151 |
| 150 scoped_refptr<RasterizerTask> new_raster_finished_tasks[kNumberOfTaskSets]; | 152 scoped_refptr<RasterizerTask> new_raster_finished_tasks[kNumberOfTaskSets]; |
| 151 | 153 |
| 152 size_t task_count[kNumberOfTaskSets] = {0}; | 154 size_t task_count[kNumberOfTaskSets] = {0}; |
| 153 | 155 |
| 154 for (TaskSet task_set = 0; task_set < kNumberOfTaskSets; ++task_set) { | 156 for (TaskSet task_set = 0; task_set < kNumberOfTaskSets; ++task_set) { |
| 155 new_raster_finished_tasks[task_set] = CreateRasterFinishedTask( | 157 new_raster_finished_tasks[task_set] = CreateRasterFinishedTask( |
| 156 task_runner_.get(), | 158 task_runner_.get(), |
| 157 base::Bind(&ImageCopyRasterWorkerPool::OnRasterFinished, | 159 base::Bind(&OneCopyRasterWorkerPool::OnRasterFinished, |
| 158 raster_finished_weak_ptr_factory_.GetWeakPtr(), | 160 raster_finished_weak_ptr_factory_.GetWeakPtr(), |
| 159 task_set)); | 161 task_set)); |
| 160 } | 162 } |
| 161 | 163 |
| 162 resource_pool_->CheckBusyResources(); | 164 resource_pool_->CheckBusyResources(); |
| 163 | 165 |
| 164 for (RasterTaskQueue::Item::Vector::const_iterator it = queue->items.begin(); | 166 for (RasterTaskQueue::Item::Vector::const_iterator it = queue->items.begin(); |
| 165 it != queue->items.end(); | 167 it != queue->items.end(); |
| 166 ++it) { | 168 ++it) { |
| 167 const RasterTaskQueue::Item& item = *it; | 169 const RasterTaskQueue::Item& item = *it; |
| (...skipping 26 matching lines...) Expand all Loading... |
| 194 std::copy(new_raster_finished_tasks, | 196 std::copy(new_raster_finished_tasks, |
| 195 new_raster_finished_tasks + kNumberOfTaskSets, | 197 new_raster_finished_tasks + kNumberOfTaskSets, |
| 196 raster_finished_tasks_); | 198 raster_finished_tasks_); |
| 197 | 199 |
| 198 resource_pool_->ReduceResourceUsage(); | 200 resource_pool_->ReduceResourceUsage(); |
| 199 | 201 |
| 200 TRACE_EVENT_ASYNC_STEP_INTO1( | 202 TRACE_EVENT_ASYNC_STEP_INTO1( |
| 201 "cc", "ScheduledTasks", this, "rasterizing", "state", StateAsValue()); | 203 "cc", "ScheduledTasks", this, "rasterizing", "state", StateAsValue()); |
| 202 } | 204 } |
| 203 | 205 |
| 204 void ImageCopyRasterWorkerPool::CheckForCompletedTasks() { | 206 void OneCopyRasterWorkerPool::CheckForCompletedTasks() { |
| 205 TRACE_EVENT0("cc", "ImageCopyRasterWorkerPool::CheckForCompletedTasks"); | 207 TRACE_EVENT0("cc", "OneCopyRasterWorkerPool::CheckForCompletedTasks"); |
| 206 | 208 |
| 207 task_graph_runner_->CollectCompletedTasks(namespace_token_, | 209 task_graph_runner_->CollectCompletedTasks(namespace_token_, |
| 208 &completed_tasks_); | 210 &completed_tasks_); |
| 209 for (Task::Vector::const_iterator it = completed_tasks_.begin(); | 211 for (Task::Vector::const_iterator it = completed_tasks_.begin(); |
| 210 it != completed_tasks_.end(); | 212 it != completed_tasks_.end(); |
| 211 ++it) { | 213 ++it) { |
| 212 RasterizerTask* task = static_cast<RasterizerTask*>(it->get()); | 214 RasterizerTask* task = static_cast<RasterizerTask*>(it->get()); |
| 213 | 215 |
| 214 task->WillComplete(); | 216 task->WillComplete(); |
| 215 task->CompleteOnOriginThread(this); | 217 task->CompleteOnOriginThread(this); |
| 216 task->DidComplete(); | 218 task->DidComplete(); |
| 217 | 219 |
| 218 task->RunReplyOnOriginThread(); | 220 task->RunReplyOnOriginThread(); |
| 219 } | 221 } |
| 220 completed_tasks_.clear(); | 222 completed_tasks_.clear(); |
| 221 | 223 |
| 222 context_provider_->ContextGL()->ShallowFlushCHROMIUM(); | 224 context_provider_->ContextGL()->ShallowFlushCHROMIUM(); |
| 223 } | 225 } |
| 224 | 226 |
| 225 scoped_ptr<RasterBuffer> ImageCopyRasterWorkerPool::AcquireBufferForRaster( | 227 scoped_ptr<RasterBuffer> OneCopyRasterWorkerPool::AcquireBufferForRaster( |
| 226 const Resource* resource) { | 228 const Resource* resource) { |
| 227 DCHECK_EQ(resource->format(), resource_pool_->resource_format()); | 229 DCHECK_EQ(resource->format(), resource_pool_->resource_format()); |
| 228 return make_scoped_ptr<RasterBuffer>( | 230 return make_scoped_ptr<RasterBuffer>( |
| 229 new RasterBufferImpl(resource_provider_, resource_pool_, resource)); | 231 new RasterBufferImpl(resource_provider_, resource_pool_, resource)); |
| 230 } | 232 } |
| 231 | 233 |
| 232 void ImageCopyRasterWorkerPool::ReleaseBufferForRaster( | 234 void OneCopyRasterWorkerPool::ReleaseBufferForRaster( |
| 233 scoped_ptr<RasterBuffer> buffer) { | 235 scoped_ptr<RasterBuffer> buffer) { |
| 234 // Nothing to do here. RasterBufferImpl destructor cleans up after itself. | 236 // Nothing to do here. RasterBufferImpl destructor cleans up after itself. |
| 235 } | 237 } |
| 236 | 238 |
| 237 void ImageCopyRasterWorkerPool::OnRasterFinished(TaskSet task_set) { | 239 void OneCopyRasterWorkerPool::OnRasterFinished(TaskSet task_set) { |
| 238 TRACE_EVENT1("cc", | 240 TRACE_EVENT1( |
| 239 "ImageCopyRasterWorkerPool::OnRasterFinished", | 241 "cc", "OneCopyRasterWorkerPool::OnRasterFinished", "task_set", task_set); |
| 240 "task_set", | |
| 241 task_set); | |
| 242 | 242 |
| 243 DCHECK(raster_pending_[task_set]); | 243 DCHECK(raster_pending_[task_set]); |
| 244 raster_pending_[task_set] = false; | 244 raster_pending_[task_set] = false; |
| 245 if (raster_pending_.any()) { | 245 if (raster_pending_.any()) { |
| 246 TRACE_EVENT_ASYNC_STEP_INTO1( | 246 TRACE_EVENT_ASYNC_STEP_INTO1( |
| 247 "cc", "ScheduledTasks", this, "rasterizing", "state", StateAsValue()); | 247 "cc", "ScheduledTasks", this, "rasterizing", "state", StateAsValue()); |
| 248 } else { | 248 } else { |
| 249 TRACE_EVENT_ASYNC_END0("cc", "ScheduledTasks", this); | 249 TRACE_EVENT_ASYNC_END0("cc", "ScheduledTasks", this); |
| 250 } | 250 } |
| 251 client_->DidFinishRunningTasks(task_set); | 251 client_->DidFinishRunningTasks(task_set); |
| 252 } | 252 } |
| 253 | 253 |
| 254 scoped_refptr<base::debug::ConvertableToTraceFormat> | 254 scoped_refptr<base::debug::ConvertableToTraceFormat> |
| 255 ImageCopyRasterWorkerPool::StateAsValue() const { | 255 OneCopyRasterWorkerPool::StateAsValue() const { |
| 256 scoped_refptr<base::debug::TracedValue> state = | 256 scoped_refptr<base::debug::TracedValue> state = |
| 257 new base::debug::TracedValue(); | 257 new base::debug::TracedValue(); |
| 258 | 258 |
| 259 state->BeginArray("tasks_pending"); | 259 state->BeginArray("tasks_pending"); |
| 260 for (TaskSet task_set = 0; task_set < kNumberOfTaskSets; ++task_set) | 260 for (TaskSet task_set = 0; task_set < kNumberOfTaskSets; ++task_set) |
| 261 state->AppendBoolean(raster_pending_[task_set]); | 261 state->AppendBoolean(raster_pending_[task_set]); |
| 262 state->EndArray(); | 262 state->EndArray(); |
| 263 state->BeginDictionary("staging_state"); | 263 state->BeginDictionary("staging_state"); |
| 264 StagingStateAsValueInto(state.get()); | 264 StagingStateAsValueInto(state.get()); |
| 265 state->EndDictionary(); | 265 state->EndDictionary(); |
| 266 | 266 |
| 267 return state; | 267 return state; |
| 268 } | 268 } |
| 269 void ImageCopyRasterWorkerPool::StagingStateAsValueInto( | 269 void OneCopyRasterWorkerPool::StagingStateAsValueInto( |
| 270 base::debug::TracedValue* staging_state) const { | 270 base::debug::TracedValue* staging_state) const { |
| 271 staging_state->SetInteger("staging_resource_count", | 271 staging_state->SetInteger("staging_resource_count", |
| 272 resource_pool_->total_resource_count()); | 272 resource_pool_->total_resource_count()); |
| 273 staging_state->SetInteger("bytes_used_for_staging_resources", | 273 staging_state->SetInteger("bytes_used_for_staging_resources", |
| 274 resource_pool_->total_memory_usage_bytes()); | 274 resource_pool_->total_memory_usage_bytes()); |
| 275 staging_state->SetInteger("pending_copy_count", | 275 staging_state->SetInteger("pending_copy_count", |
| 276 resource_pool_->total_resource_count() - | 276 resource_pool_->total_resource_count() - |
| 277 resource_pool_->acquired_resource_count()); | 277 resource_pool_->acquired_resource_count()); |
| 278 staging_state->SetInteger("bytes_pending_copy", | 278 staging_state->SetInteger("bytes_pending_copy", |
| 279 resource_pool_->total_memory_usage_bytes() - | 279 resource_pool_->total_memory_usage_bytes() - |
| 280 resource_pool_->acquired_memory_usage_bytes()); | 280 resource_pool_->acquired_memory_usage_bytes()); |
| 281 } | 281 } |
| 282 | 282 |
| 283 } // namespace cc | 283 } // namespace cc |
| OLD | NEW |