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

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

Issue 157293002: cc: Refactor WorkerPoolTaskClient::AcquireBufferForRaster (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: updated unittests 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/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 222 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 raster_task_states_.erase(task); 233 raster_task_states_.erase(task);
234 234
235 task->RunReplyOnOriginThread(); 235 task->RunReplyOnOriginThread();
236 236
237 completed_raster_tasks_.pop_front(); 237 completed_raster_tasks_.pop_front();
238 } 238 }
239 239
240 CheckForCompletedGpuRasterTasks(); 240 CheckForCompletedGpuRasterTasks();
241 } 241 }
242 242
243 void* PixelBufferRasterWorkerPool::AcquireBufferForRaster( 243 SkCanvas* PixelBufferRasterWorkerPool::AcquireCanvasForRaster(
244 internal::RasterWorkerPoolTask* task, 244 internal::RasterWorkerPoolTask* task) {
245 int* stride) { 245 if (task->use_gpu_rasterization())
246 // Request a pixel buffer. This will reserve shared memory. 246 return resource_provider()->MapDirectRasterBuffer(task->resource()->id());
247 resource_provider()->AcquirePixelBuffer(task->resource()->id());
248 247
249 *stride = 0; 248 resource_provider()->AcquirePixelRasterBuffer(task->resource()->id());
250 return resource_provider()->MapPixelBuffer(task->resource()->id()); 249 return resource_provider()->MapPixelRasterBuffer(task->resource()->id());
251 } 250 }
252 251
253 void PixelBufferRasterWorkerPool::OnRasterCompleted( 252 void PixelBufferRasterWorkerPool::OnRasterCompleted(
254 internal::RasterWorkerPoolTask* task, 253 internal::RasterWorkerPoolTask* task,
255 const PicturePileImpl::Analysis& analysis) { 254 const PicturePileImpl::Analysis& analysis) {
255 if (task->use_gpu_rasterization()) {
256 resource_provider()->UnmapDirectRasterBuffer(task->resource()->id());
257 return;
258 }
259
256 TRACE_EVENT2(TRACE_DISABLED_BY_DEFAULT("cc"), 260 TRACE_EVENT2(TRACE_DISABLED_BY_DEFAULT("cc"),
257 "PixelBufferRasterWorkerPool::OnRasterCompleted", 261 "PixelBufferRasterWorkerPool::OnRasterCompleted",
258 "was_canceled", 262 "was_canceled",
259 !task->HasFinishedRunning(), 263 !task->HasFinishedRunning(),
260 "needs_upload", 264 "needs_upload",
261 task->HasFinishedRunning() && !analysis.is_solid_color); 265 task->HasFinishedRunning() && !analysis.is_solid_color);
262 266
263 DCHECK(raster_task_states_.find(task) != raster_task_states_.end()); 267 DCHECK(raster_task_states_.find(task) != raster_task_states_.end());
264 DCHECK_EQ(SCHEDULED, raster_task_states_[task]); 268 DCHECK_EQ(SCHEDULED, raster_task_states_[task]);
265 269
266 // Balanced with MapPixelBuffer() call in AcquireBufferForRaster(). 270 // Balanced with MapPixelRasterBuffer() call in AcquireCanvasForRaster().
267 resource_provider()->UnmapPixelBuffer(task->resource()->id()); 271 resource_provider()->UnmapPixelRasterBuffer(task->resource()->id());
268 272
269 if (!task->HasFinishedRunning() || analysis.is_solid_color) { 273 if (!task->HasFinishedRunning() || analysis.is_solid_color) {
270 resource_provider()->ReleasePixelBuffer(task->resource()->id()); 274 resource_provider()->ReleasePixelRasterBuffer(task->resource()->id());
271 275
272 if (!task->HasFinishedRunning()) { 276 if (!task->HasFinishedRunning()) {
273 // When priorites change, a raster task can be canceled as a result of 277 // When priorites change, a raster task can be canceled as a result of
274 // no longer being of high enough priority to fit in our throttled 278 // no longer being of high enough priority to fit in our throttled
275 // raster task budget. The task has not yet completed in this case. 279 // raster task budget. The task has not yet completed in this case.
276 RasterTaskVector::const_iterator it = 280 RasterTaskVector::const_iterator it =
277 std::find(raster_tasks().begin(), raster_tasks().end(), task); 281 std::find(raster_tasks().begin(), raster_tasks().end(), task);
278 if (it != raster_tasks().end()) { 282 if (it != raster_tasks().end()) {
279 raster_task_states_[task] = UNSCHEDULED; 283 raster_task_states_[task] = UNSCHEDULED;
280 return; 284 return;
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
393 } 397 }
394 } 398 }
395 399
396 // Release shared memory and move tasks with completed uploads 400 // Release shared memory and move tasks with completed uploads
397 // to |completed_raster_tasks_|. 401 // to |completed_raster_tasks_|.
398 while (!tasks_with_completed_uploads.empty()) { 402 while (!tasks_with_completed_uploads.empty()) {
399 internal::RasterWorkerPoolTask* task = 403 internal::RasterWorkerPoolTask* task =
400 tasks_with_completed_uploads.front().get(); 404 tasks_with_completed_uploads.front().get();
401 405
402 // It's now safe to release the pixel buffer and the shared memory. 406 // It's now safe to release the pixel buffer and the shared memory.
403 resource_provider()->ReleasePixelBuffer(task->resource()->id()); 407 resource_provider()->ReleasePixelRasterBuffer(task->resource()->id());
404 408
405 bytes_pending_upload_ -= task->resource()->bytes(); 409 bytes_pending_upload_ -= task->resource()->bytes();
406 410
407 DCHECK(std::find(completed_raster_tasks_.begin(), 411 DCHECK(std::find(completed_raster_tasks_.begin(),
408 completed_raster_tasks_.end(), 412 completed_raster_tasks_.end(),
409 task) == completed_raster_tasks_.end()); 413 task) == completed_raster_tasks_.end());
410 completed_raster_tasks_.push_back(task); 414 completed_raster_tasks_.push_back(task);
411 raster_task_states_[task] = COMPLETED; 415 raster_task_states_[task] = COMPLETED;
412 416
413 raster_tasks_required_for_activation_.erase(task); 417 raster_tasks_required_for_activation_.erase(task);
(...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after
706 710
707 throttle_state->SetInteger("bytes_available_for_upload", 711 throttle_state->SetInteger("bytes_available_for_upload",
708 max_bytes_pending_upload_ - bytes_pending_upload_); 712 max_bytes_pending_upload_ - bytes_pending_upload_);
709 throttle_state->SetInteger("bytes_pending_upload", bytes_pending_upload_); 713 throttle_state->SetInteger("bytes_pending_upload", bytes_pending_upload_);
710 throttle_state->SetInteger("scheduled_raster_task_count", 714 throttle_state->SetInteger("scheduled_raster_task_count",
711 scheduled_raster_task_count_); 715 scheduled_raster_task_count_);
712 return throttle_state.PassAs<base::Value>(); 716 return throttle_state.PassAs<base::Value>();
713 } 717 }
714 718
715 } // namespace cc 719 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698