| 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/pixel_buffer_raster_worker_pool.h" | 5 #include "cc/resources/pixel_buffer_raster_worker_pool.h" |
| 6 | 6 |
| 7 #include "base/containers/stack_container.h" | 7 #include "base/containers/stack_container.h" |
| 8 #include "base/debug/trace_event.h" | 8 #include "base/debug/trace_event.h" |
| 9 #include "base/values.h" | 9 #include "base/values.h" |
| 10 #include "cc/debug/traced_value.h" | 10 #include "cc/debug/traced_value.h" |
| (...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 220 raster_task_states_.erase(task); | 220 raster_task_states_.erase(task); |
| 221 | 221 |
| 222 task->RunReplyOnOriginThread(); | 222 task->RunReplyOnOriginThread(); |
| 223 | 223 |
| 224 completed_raster_tasks_.pop_front(); | 224 completed_raster_tasks_.pop_front(); |
| 225 } | 225 } |
| 226 | 226 |
| 227 CheckForCompletedGpuRasterTasks(); | 227 CheckForCompletedGpuRasterTasks(); |
| 228 } | 228 } |
| 229 | 229 |
| 230 void* PixelBufferRasterWorkerPool::AcquireBufferForRaster( | 230 SkCanvas* PixelBufferRasterWorkerPool::AcquireCanvasForRaster( |
| 231 internal::RasterWorkerPoolTask* task, | 231 internal::RasterWorkerPoolTask* task) { |
| 232 int* stride) { | 232 if (task->use_gpu_rasterization()) |
| 233 // Request a pixel buffer. This will reserve shared memory. | 233 return resource_provider()->MapDirectRasterBuffer(task->resource()->id()); |
| 234 resource_provider()->AcquirePixelBuffer(task->resource()->id()); | |
| 235 | 234 |
| 236 *stride = 0; | 235 resource_provider()->AcquirePixelRasterBuffer(task->resource()->id()); |
| 237 return resource_provider()->MapPixelBuffer(task->resource()->id()); | 236 return resource_provider()->MapPixelRasterBuffer(task->resource()->id()); |
| 238 } | 237 } |
| 239 | 238 |
| 240 void PixelBufferRasterWorkerPool::OnRasterCompleted( | 239 void PixelBufferRasterWorkerPool::OnRasterCompleted( |
| 241 internal::RasterWorkerPoolTask* task, | 240 internal::RasterWorkerPoolTask* task, |
| 242 const PicturePileImpl::Analysis& analysis) { | 241 const PicturePileImpl::Analysis& analysis) { |
| 242 if (task->use_gpu_rasterization()) { |
| 243 resource_provider()->UnmapDirectRasterBuffer(task->resource()->id()); |
| 244 return; |
| 245 } |
| 246 |
| 243 TRACE_EVENT2(TRACE_DISABLED_BY_DEFAULT("cc"), | 247 TRACE_EVENT2(TRACE_DISABLED_BY_DEFAULT("cc"), |
| 244 "PixelBufferRasterWorkerPool::OnRasterCompleted", | 248 "PixelBufferRasterWorkerPool::OnRasterCompleted", |
| 245 "was_canceled", | 249 "was_canceled", |
| 246 !task->HasFinishedRunning(), | 250 !task->HasFinishedRunning(), |
| 247 "needs_upload", | 251 "needs_upload", |
| 248 task->HasFinishedRunning() && !analysis.is_solid_color); | 252 task->HasFinishedRunning() && !analysis.is_solid_color); |
| 249 | 253 |
| 250 DCHECK(raster_task_states_.find(task) != raster_task_states_.end()); | 254 DCHECK(raster_task_states_.find(task) != raster_task_states_.end()); |
| 251 DCHECK_EQ(SCHEDULED, raster_task_states_[task]); | 255 DCHECK_EQ(SCHEDULED, raster_task_states_[task]); |
| 252 | 256 |
| 253 // Balanced with MapPixelBuffer() call in AcquireBufferForRaster(). | 257 // Balanced with MapPixelRasterBuffer() call in AcquireCanvasForRaster(). |
| 254 resource_provider()->UnmapPixelBuffer(task->resource()->id()); | 258 resource_provider()->UnmapPixelRasterBuffer(task->resource()->id()); |
| 255 | 259 |
| 256 if (!task->HasFinishedRunning() || analysis.is_solid_color) { | 260 if (!task->HasFinishedRunning() || analysis.is_solid_color) { |
| 257 resource_provider()->ReleasePixelBuffer(task->resource()->id()); | 261 resource_provider()->ReleasePixelRasterBuffer(task->resource()->id()); |
| 258 | 262 |
| 259 if (!task->HasFinishedRunning()) { | 263 if (!task->HasFinishedRunning()) { |
| 260 // When priorites change, a raster task can be canceled as a result of | 264 // When priorites change, a raster task can be canceled as a result of |
| 261 // no longer being of high enough priority to fit in our throttled | 265 // no longer being of high enough priority to fit in our throttled |
| 262 // raster task budget. The task has not yet completed in this case. | 266 // raster task budget. The task has not yet completed in this case. |
| 263 for (RasterTaskQueueIterator it(&raster_tasks_); it; ++it) { | 267 for (RasterTaskQueueIterator it(&raster_tasks_); it; ++it) { |
| 264 if (*it == task) { | 268 if (*it == task) { |
| 265 raster_task_states_[task] = UNSCHEDULED; | 269 raster_task_states_[task] = UNSCHEDULED; |
| 266 return; | 270 return; |
| 267 } | 271 } |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 380 } | 384 } |
| 381 } | 385 } |
| 382 | 386 |
| 383 // Release shared memory and move tasks with completed uploads | 387 // Release shared memory and move tasks with completed uploads |
| 384 // to |completed_raster_tasks_|. | 388 // to |completed_raster_tasks_|. |
| 385 while (!tasks_with_completed_uploads.empty()) { | 389 while (!tasks_with_completed_uploads.empty()) { |
| 386 internal::RasterWorkerPoolTask* task = | 390 internal::RasterWorkerPoolTask* task = |
| 387 tasks_with_completed_uploads.front().get(); | 391 tasks_with_completed_uploads.front().get(); |
| 388 | 392 |
| 389 // It's now safe to release the pixel buffer and the shared memory. | 393 // It's now safe to release the pixel buffer and the shared memory. |
| 390 resource_provider()->ReleasePixelBuffer(task->resource()->id()); | 394 resource_provider()->ReleasePixelRasterBuffer(task->resource()->id()); |
| 391 | 395 |
| 392 bytes_pending_upload_ -= task->resource()->bytes(); | 396 bytes_pending_upload_ -= task->resource()->bytes(); |
| 393 | 397 |
| 394 DCHECK(std::find(completed_raster_tasks_.begin(), | 398 DCHECK(std::find(completed_raster_tasks_.begin(), |
| 395 completed_raster_tasks_.end(), | 399 completed_raster_tasks_.end(), |
| 396 task) == completed_raster_tasks_.end()); | 400 task) == completed_raster_tasks_.end()); |
| 397 completed_raster_tasks_.push_back(task); | 401 completed_raster_tasks_.push_back(task); |
| 398 raster_task_states_[task] = COMPLETED; | 402 raster_task_states_[task] = COMPLETED; |
| 399 | 403 |
| 400 raster_tasks_required_for_activation_.erase(task); | 404 raster_tasks_required_for_activation_.erase(task); |
| (...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 696 | 700 |
| 697 throttle_state->SetInteger("bytes_available_for_upload", | 701 throttle_state->SetInteger("bytes_available_for_upload", |
| 698 max_bytes_pending_upload_ - bytes_pending_upload_); | 702 max_bytes_pending_upload_ - bytes_pending_upload_); |
| 699 throttle_state->SetInteger("bytes_pending_upload", bytes_pending_upload_); | 703 throttle_state->SetInteger("bytes_pending_upload", bytes_pending_upload_); |
| 700 throttle_state->SetInteger("scheduled_raster_task_count", | 704 throttle_state->SetInteger("scheduled_raster_task_count", |
| 701 scheduled_raster_task_count_); | 705 scheduled_raster_task_count_); |
| 702 return throttle_state.PassAs<base::Value>(); | 706 return throttle_state.PassAs<base::Value>(); |
| 703 } | 707 } |
| 704 | 708 |
| 705 } // namespace cc | 709 } // namespace cc |
| OLD | NEW |