| 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/raster_worker_pool.h" | 5 #include "cc/resources/raster_worker_pool.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/debug/trace_event_synthetic_delay.h" | 9 #include "base/debug/trace_event_synthetic_delay.h" |
| 10 #include "base/json/json_writer.h" | 10 #include "base/json/json_writer.h" |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 62 if (type != SkDrawFilter::kText_Type) | 62 if (type != SkDrawFilter::kText_Type) |
| 63 return true; | 63 return true; |
| 64 | 64 |
| 65 paint->setLCDRenderText(false); | 65 paint->setLCDRenderText(false); |
| 66 return true; | 66 return true; |
| 67 } | 67 } |
| 68 }; | 68 }; |
| 69 | 69 |
| 70 class RasterWorkerPoolTaskImpl : public internal::RasterWorkerPoolTask { | 70 class RasterWorkerPoolTaskImpl : public internal::RasterWorkerPoolTask { |
| 71 public: | 71 public: |
| 72 RasterWorkerPoolTaskImpl(const Resource* resource, | 72 RasterWorkerPoolTaskImpl( |
| 73 PicturePileImpl* picture_pile, | 73 const Resource* resource, |
| 74 const gfx::Rect& content_rect, | 74 PicturePileImpl* picture_pile, |
| 75 float contents_scale, | 75 const gfx::Rect& content_rect, |
| 76 RasterMode raster_mode, | 76 float contents_scale, |
| 77 TileResolution tile_resolution, | 77 RasterMode raster_mode, |
| 78 int layer_id, | 78 TileResolution tile_resolution, |
| 79 const void* tile_id, | 79 int layer_id, |
| 80 int source_frame_number, | 80 const void* tile_id, |
| 81 RenderingStatsInstrumentation* rendering_stats, | 81 int source_frame_number, |
| 82 const RasterWorkerPool::RasterTask::Reply& reply, | 82 RenderingStatsInstrumentation* rendering_stats, |
| 83 internal::WorkerPoolTask::Vector* dependencies, | 83 const base::Callback<void(const PicturePileImpl::Analysis&, bool)>& reply, |
| 84 ContextProvider* context_provider) | 84 internal::WorkerPoolTask::Vector* dependencies, |
| 85 ContextProvider* context_provider) |
| 85 : internal::RasterWorkerPoolTask(resource, dependencies), | 86 : internal::RasterWorkerPoolTask(resource, dependencies), |
| 86 picture_pile_(picture_pile), | 87 picture_pile_(picture_pile), |
| 87 content_rect_(content_rect), | 88 content_rect_(content_rect), |
| 88 contents_scale_(contents_scale), | 89 contents_scale_(contents_scale), |
| 89 raster_mode_(raster_mode), | 90 raster_mode_(raster_mode), |
| 90 tile_resolution_(tile_resolution), | 91 tile_resolution_(tile_resolution), |
| 91 layer_id_(layer_id), | 92 layer_id_(layer_id), |
| 92 tile_id_(tile_id), | 93 tile_id_(tile_id), |
| 93 source_frame_number_(source_frame_number), | 94 source_frame_number_(source_frame_number), |
| 94 rendering_stats_(rendering_stats), | 95 rendering_stats_(rendering_stats), |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 229 PicturePileImpl::Analysis analysis_; | 230 PicturePileImpl::Analysis analysis_; |
| 230 scoped_refptr<PicturePileImpl> picture_pile_; | 231 scoped_refptr<PicturePileImpl> picture_pile_; |
| 231 gfx::Rect content_rect_; | 232 gfx::Rect content_rect_; |
| 232 float contents_scale_; | 233 float contents_scale_; |
| 233 RasterMode raster_mode_; | 234 RasterMode raster_mode_; |
| 234 TileResolution tile_resolution_; | 235 TileResolution tile_resolution_; |
| 235 int layer_id_; | 236 int layer_id_; |
| 236 const void* tile_id_; | 237 const void* tile_id_; |
| 237 int source_frame_number_; | 238 int source_frame_number_; |
| 238 RenderingStatsInstrumentation* rendering_stats_; | 239 RenderingStatsInstrumentation* rendering_stats_; |
| 239 const RasterWorkerPool::RasterTask::Reply reply_; | 240 const base::Callback<void(const PicturePileImpl::Analysis&, bool)> reply_; |
| 240 ContextProvider* context_provider_; | 241 ContextProvider* context_provider_; |
| 241 SkCanvas* canvas_; | 242 SkCanvas* canvas_; |
| 242 | 243 |
| 243 DISALLOW_COPY_AND_ASSIGN(RasterWorkerPoolTaskImpl); | 244 DISALLOW_COPY_AND_ASSIGN(RasterWorkerPoolTaskImpl); |
| 244 }; | 245 }; |
| 245 | 246 |
| 246 class ImageDecodeWorkerPoolTaskImpl : public internal::WorkerPoolTask { | 247 class ImageDecodeWorkerPoolTaskImpl : public internal::WorkerPoolTask { |
| 247 public: | 248 public: |
| 248 ImageDecodeWorkerPoolTaskImpl(SkPixelRef* pixel_ref, | 249 ImageDecodeWorkerPoolTaskImpl( |
| 249 int layer_id, | 250 SkPixelRef* pixel_ref, |
| 250 RenderingStatsInstrumentation* rendering_stats, | 251 int layer_id, |
| 251 const RasterWorkerPool::Task::Reply& reply) | 252 RenderingStatsInstrumentation* rendering_stats, |
| 253 const base::Callback<void(bool was_canceled)>& reply) |
| 252 : pixel_ref_(skia::SharePtr(pixel_ref)), | 254 : pixel_ref_(skia::SharePtr(pixel_ref)), |
| 253 layer_id_(layer_id), | 255 layer_id_(layer_id), |
| 254 rendering_stats_(rendering_stats), | 256 rendering_stats_(rendering_stats), |
| 255 reply_(reply) {} | 257 reply_(reply) {} |
| 256 | 258 |
| 257 // Overridden from internal::Task: | 259 // Overridden from internal::Task: |
| 258 virtual void RunOnWorkerThread(unsigned thread_index) OVERRIDE { | 260 virtual void RunOnWorkerThread(unsigned thread_index) OVERRIDE { |
| 259 TRACE_EVENT0("cc", "ImageDecodeWorkerPoolTaskImpl::RunOnWorkerThread"); | 261 TRACE_EVENT0("cc", "ImageDecodeWorkerPoolTaskImpl::RunOnWorkerThread"); |
| 260 Decode(); | 262 Decode(); |
| 261 } | 263 } |
| (...skipping 21 matching lines...) Expand all Loading... |
| 283 devtools_instrumentation::ScopedImageDecodeTask image_decode_task( | 285 devtools_instrumentation::ScopedImageDecodeTask image_decode_task( |
| 284 pixel_ref_.get()); | 286 pixel_ref_.get()); |
| 285 // This will cause the image referred to by pixel ref to be decoded. | 287 // This will cause the image referred to by pixel ref to be decoded. |
| 286 pixel_ref_->lockPixels(); | 288 pixel_ref_->lockPixels(); |
| 287 pixel_ref_->unlockPixels(); | 289 pixel_ref_->unlockPixels(); |
| 288 } | 290 } |
| 289 | 291 |
| 290 skia::RefPtr<SkPixelRef> pixel_ref_; | 292 skia::RefPtr<SkPixelRef> pixel_ref_; |
| 291 int layer_id_; | 293 int layer_id_; |
| 292 RenderingStatsInstrumentation* rendering_stats_; | 294 RenderingStatsInstrumentation* rendering_stats_; |
| 293 const RasterWorkerPool::Task::Reply reply_; | 295 const base::Callback<void(bool was_canceled)>& reply_; |
| 294 | 296 |
| 295 DISALLOW_COPY_AND_ASSIGN(ImageDecodeWorkerPoolTaskImpl); | 297 DISALLOW_COPY_AND_ASSIGN(ImageDecodeWorkerPoolTaskImpl); |
| 296 }; | 298 }; |
| 297 | 299 |
| 298 class RasterFinishedWorkerPoolTaskImpl : public internal::WorkerPoolTask { | 300 class RasterFinishedWorkerPoolTaskImpl : public internal::WorkerPoolTask { |
| 299 public: | 301 public: |
| 300 typedef base::Callback<void(const internal::WorkerPoolTask* source)> Callback; | 302 typedef base::Callback<void(const internal::WorkerPoolTask* source)> Callback; |
| 301 | 303 |
| 302 explicit RasterFinishedWorkerPoolTaskImpl( | 304 explicit RasterFinishedWorkerPoolTaskImpl( |
| 303 const Callback& on_raster_finished_callback) | 305 const Callback& on_raster_finished_callback) |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 440 const Resource* resource, | 442 const Resource* resource, |
| 441 internal::WorkerPoolTask::Vector* dependencies) | 443 internal::WorkerPoolTask::Vector* dependencies) |
| 442 : resource_(resource) { | 444 : resource_(resource) { |
| 443 dependencies_.swap(*dependencies); | 445 dependencies_.swap(*dependencies); |
| 444 } | 446 } |
| 445 | 447 |
| 446 RasterWorkerPoolTask::~RasterWorkerPoolTask() {} | 448 RasterWorkerPoolTask::~RasterWorkerPoolTask() {} |
| 447 | 449 |
| 448 } // namespace internal | 450 } // namespace internal |
| 449 | 451 |
| 450 RasterWorkerPool::Task::Set::Set() {} | 452 RasterTaskQueue::Item::Item(internal::RasterWorkerPoolTask* task, |
| 453 bool required_for_activation) |
| 454 : task(task), required_for_activation(required_for_activation) {} |
| 451 | 455 |
| 452 RasterWorkerPool::Task::Set::~Set() {} | 456 RasterTaskQueue::Item::~Item() {} |
| 453 | 457 |
| 454 void RasterWorkerPool::Task::Set::Insert(const Task& task) { | 458 RasterTaskQueue::RasterTaskQueue() : required_for_activation_count(0u) {} |
| 455 DCHECK(!task.is_null()); | 459 |
| 456 tasks_.push_back(task.internal_); | 460 RasterTaskQueue::~RasterTaskQueue() {} |
| 461 |
| 462 void RasterTaskQueue::Swap(RasterTaskQueue* other) { |
| 463 items.swap(other->items); |
| 464 std::swap(required_for_activation_count, |
| 465 other->required_for_activation_count); |
| 457 } | 466 } |
| 458 | 467 |
| 459 RasterWorkerPool::Task::Task() {} | 468 void RasterTaskQueue::Reset() { |
| 460 | 469 required_for_activation_count = 0u; |
| 461 RasterWorkerPool::Task::Task(internal::WorkerPoolTask* internal) | 470 items.clear(); |
| 462 : internal_(internal) {} | |
| 463 | |
| 464 RasterWorkerPool::Task::~Task() {} | |
| 465 | |
| 466 void RasterWorkerPool::Task::Reset() { internal_ = NULL; } | |
| 467 | |
| 468 RasterWorkerPool::RasterTask::Queue::QueuedTask::QueuedTask( | |
| 469 internal::RasterWorkerPoolTask* task, | |
| 470 bool required_for_activation) | |
| 471 : task(task), required_for_activation(required_for_activation) {} | |
| 472 | |
| 473 RasterWorkerPool::RasterTask::Queue::QueuedTask::~QueuedTask() {} | |
| 474 | |
| 475 RasterWorkerPool::RasterTask::Queue::Queue() | |
| 476 : required_for_activation_count_(0u) {} | |
| 477 | |
| 478 RasterWorkerPool::RasterTask::Queue::~Queue() {} | |
| 479 | |
| 480 void RasterWorkerPool::RasterTask::Queue::Reset() { | |
| 481 tasks_.clear(); | |
| 482 required_for_activation_count_ = 0u; | |
| 483 } | 471 } |
| 484 | 472 |
| 485 void RasterWorkerPool::RasterTask::Queue::Append(const RasterTask& task, | |
| 486 bool required_for_activation) { | |
| 487 DCHECK(!task.is_null()); | |
| 488 tasks_.push_back(QueuedTask(task.internal_, required_for_activation)); | |
| 489 required_for_activation_count_ += required_for_activation; | |
| 490 } | |
| 491 | |
| 492 void RasterWorkerPool::RasterTask::Queue::Swap(Queue* other) { | |
| 493 tasks_.swap(other->tasks_); | |
| 494 std::swap(required_for_activation_count_, | |
| 495 other->required_for_activation_count_); | |
| 496 } | |
| 497 | |
| 498 RasterWorkerPool::RasterTask::RasterTask() {} | |
| 499 | |
| 500 RasterWorkerPool::RasterTask::RasterTask( | |
| 501 internal::RasterWorkerPoolTask* internal) | |
| 502 : internal_(internal) {} | |
| 503 | |
| 504 void RasterWorkerPool::RasterTask::Reset() { internal_ = NULL; } | |
| 505 | |
| 506 RasterWorkerPool::RasterTask::~RasterTask() {} | |
| 507 | |
| 508 // This allows an external rasterize on-demand system to run raster tasks | 473 // This allows an external rasterize on-demand system to run raster tasks |
| 509 // with highest priority using the same task graph runner instance. | 474 // with highest priority using the same task graph runner instance. |
| 510 unsigned RasterWorkerPool::kOnDemandRasterTaskPriority = 0u; | 475 unsigned RasterWorkerPool::kOnDemandRasterTaskPriority = 0u; |
| 511 // Task priorities that make sure raster finished tasks run before any | 476 // Task priorities that make sure raster finished tasks run before any |
| 512 // remaining raster tasks. | 477 // remaining raster tasks. |
| 513 unsigned RasterWorkerPool::kRasterFinishedTaskPriority = 2u; | 478 unsigned RasterWorkerPool::kRasterFinishedTaskPriority = 2u; |
| 514 unsigned RasterWorkerPool::kRasterRequiredForActivationFinishedTaskPriority = | 479 unsigned RasterWorkerPool::kRasterRequiredForActivationFinishedTaskPriority = |
| 515 1u; | 480 1u; |
| 516 unsigned RasterWorkerPool::kRasterTaskPriorityBase = 3u; | 481 unsigned RasterWorkerPool::kRasterTaskPriorityBase = 3u; |
| 517 | 482 |
| (...skipping 24 matching lines...) Expand all Loading... |
| 542 | 507 |
| 543 return g_num_raster_threads; | 508 return g_num_raster_threads; |
| 544 } | 509 } |
| 545 | 510 |
| 546 // static | 511 // static |
| 547 internal::TaskGraphRunner* RasterWorkerPool::GetTaskGraphRunner() { | 512 internal::TaskGraphRunner* RasterWorkerPool::GetTaskGraphRunner() { |
| 548 return g_task_graph_runner.Pointer(); | 513 return g_task_graph_runner.Pointer(); |
| 549 } | 514 } |
| 550 | 515 |
| 551 // static | 516 // static |
| 552 RasterWorkerPool::RasterTask RasterWorkerPool::CreateRasterTask( | 517 scoped_refptr<internal::RasterWorkerPoolTask> |
| 518 RasterWorkerPool::CreateRasterTask( |
| 553 const Resource* resource, | 519 const Resource* resource, |
| 554 PicturePileImpl* picture_pile, | 520 PicturePileImpl* picture_pile, |
| 555 const gfx::Rect& content_rect, | 521 const gfx::Rect& content_rect, |
| 556 float contents_scale, | 522 float contents_scale, |
| 557 RasterMode raster_mode, | 523 RasterMode raster_mode, |
| 558 TileResolution tile_resolution, | 524 TileResolution tile_resolution, |
| 559 int layer_id, | 525 int layer_id, |
| 560 const void* tile_id, | 526 const void* tile_id, |
| 561 int source_frame_number, | 527 int source_frame_number, |
| 562 RenderingStatsInstrumentation* rendering_stats, | 528 RenderingStatsInstrumentation* rendering_stats, |
| 563 const RasterTask::Reply& reply, | 529 const base::Callback<void(const PicturePileImpl::Analysis&, bool)>& reply, |
| 564 Task::Set* dependencies, | 530 internal::WorkerPoolTask::Vector* dependencies, |
| 565 ContextProvider* context_provider) { | 531 ContextProvider* context_provider) { |
| 566 return RasterTask(new RasterWorkerPoolTaskImpl(resource, | 532 return make_scoped_refptr(new RasterWorkerPoolTaskImpl(resource, |
| 567 picture_pile, | 533 picture_pile, |
| 568 content_rect, | 534 content_rect, |
| 569 contents_scale, | 535 contents_scale, |
| 570 raster_mode, | 536 raster_mode, |
| 571 tile_resolution, | 537 tile_resolution, |
| 572 layer_id, | 538 layer_id, |
| 573 tile_id, | 539 tile_id, |
| 574 source_frame_number, | 540 source_frame_number, |
| 575 rendering_stats, | 541 rendering_stats, |
| 576 reply, | 542 reply, |
| 577 &dependencies->tasks_, | 543 dependencies, |
| 578 context_provider)); | 544 context_provider)); |
| 579 } | 545 } |
| 580 | 546 |
| 581 // static | 547 // static |
| 582 RasterWorkerPool::Task RasterWorkerPool::CreateImageDecodeTask( | 548 scoped_refptr<internal::WorkerPoolTask> RasterWorkerPool::CreateImageDecodeTask( |
| 583 SkPixelRef* pixel_ref, | 549 SkPixelRef* pixel_ref, |
| 584 int layer_id, | 550 int layer_id, |
| 585 RenderingStatsInstrumentation* rendering_stats, | 551 RenderingStatsInstrumentation* rendering_stats, |
| 586 const Task::Reply& reply) { | 552 const base::Callback<void(bool was_canceled)>& reply) { |
| 587 return Task(new ImageDecodeWorkerPoolTaskImpl( | 553 return make_scoped_refptr(new ImageDecodeWorkerPoolTaskImpl( |
| 588 pixel_ref, layer_id, rendering_stats, reply)); | 554 pixel_ref, layer_id, rendering_stats, reply)); |
| 589 } | 555 } |
| 590 | 556 |
| 591 void RasterWorkerPool::SetClient(RasterWorkerPoolClient* client) { | 557 void RasterWorkerPool::SetClient(RasterWorkerPoolClient* client) { |
| 592 client_ = client; | 558 client_ = client; |
| 593 } | 559 } |
| 594 | 560 |
| 595 void RasterWorkerPool::Shutdown() { | 561 void RasterWorkerPool::Shutdown() { |
| 596 TRACE_EVENT0("cc", "RasterWorkerPool::Shutdown"); | 562 TRACE_EVENT0("cc", "RasterWorkerPool::Shutdown"); |
| 597 | 563 |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 726 if (decode_it == graph->nodes.end()) | 692 if (decode_it == graph->nodes.end()) |
| 727 InsertNodeForTask(graph, decode_task, priority, 0u); | 693 InsertNodeForTask(graph, decode_task, priority, 0u); |
| 728 | 694 |
| 729 graph->edges.push_back(internal::TaskGraph::Edge(decode_task, raster_task)); | 695 graph->edges.push_back(internal::TaskGraph::Edge(decode_task, raster_task)); |
| 730 } | 696 } |
| 731 | 697 |
| 732 InsertNodeForTask(graph, raster_task, priority, dependencies); | 698 InsertNodeForTask(graph, raster_task, priority, dependencies); |
| 733 } | 699 } |
| 734 | 700 |
| 735 } // namespace cc | 701 } // namespace cc |
| OLD | NEW |