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

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

Issue 143003012: Revert of cc: Remove WorkerPool class and instead use TaskGraphRunner directly. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 11 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
« no previous file with comments | « cc/resources/raster_worker_pool.h ('k') | cc/resources/raster_worker_pool_perftest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/raster_worker_pool.h" 5 #include "cc/resources/raster_worker_pool.h"
6 6
7 #include "base/debug/trace_event_synthetic_delay.h" 7 #include "base/debug/trace_event_synthetic_delay.h"
8 #include "base/json/json_writer.h" 8 #include "base/json/json_writer.h"
9 #include "base/lazy_instance.h"
10 #include "base/metrics/histogram.h" 9 #include "base/metrics/histogram.h"
11 #include "base/values.h" 10 #include "base/values.h"
12 #include "cc/debug/devtools_instrumentation.h" 11 #include "cc/debug/devtools_instrumentation.h"
13 #include "cc/debug/traced_value.h" 12 #include "cc/debug/traced_value.h"
14 #include "cc/resources/picture_pile_impl.h" 13 #include "cc/resources/picture_pile_impl.h"
15 #include "cc/resources/resource.h"
16 #include "cc/resources/resource_provider.h"
17 #include "skia/ext/paint_simplifier.h" 14 #include "skia/ext/paint_simplifier.h"
18 #include "third_party/skia/include/core/SkBitmap.h" 15 #include "third_party/skia/include/core/SkBitmap.h"
19 #include "third_party/skia/include/core/SkPixelRef.h" 16 #include "third_party/skia/include/core/SkPixelRef.h"
20 #include "third_party/skia/include/gpu/GrContext.h" 17 #include "third_party/skia/include/gpu/GrContext.h"
21 #include "third_party/skia/include/gpu/SkGpuDevice.h" 18 #include "third_party/skia/include/gpu/SkGpuDevice.h"
22 19
23 namespace cc { 20 namespace cc {
24 21
25 namespace { 22 namespace {
26 23
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 const gfx::Rect& content_rect, 68 const gfx::Rect& content_rect,
72 float contents_scale, 69 float contents_scale,
73 RasterMode raster_mode, 70 RasterMode raster_mode,
74 TileResolution tile_resolution, 71 TileResolution tile_resolution,
75 int layer_id, 72 int layer_id,
76 const void* tile_id, 73 const void* tile_id,
77 int source_frame_number, 74 int source_frame_number,
78 bool use_gpu_rasterization, 75 bool use_gpu_rasterization,
79 RenderingStatsInstrumentation* rendering_stats, 76 RenderingStatsInstrumentation* rendering_stats,
80 const RasterWorkerPool::RasterTask::Reply& reply, 77 const RasterWorkerPool::RasterTask::Reply& reply,
81 internal::Task::Vector* dependencies) 78 TaskVector* dependencies)
82 : internal::RasterWorkerPoolTask(resource, 79 : internal::RasterWorkerPoolTask(resource,
83 dependencies, 80 dependencies,
84 use_gpu_rasterization), 81 use_gpu_rasterization),
85 picture_pile_(picture_pile), 82 picture_pile_(picture_pile),
86 content_rect_(content_rect), 83 content_rect_(content_rect),
87 contents_scale_(contents_scale), 84 contents_scale_(contents_scale),
88 raster_mode_(raster_mode), 85 raster_mode_(raster_mode),
89 tile_resolution_(tile_resolution), 86 tile_resolution_(tile_resolution),
90 layer_id_(layer_id), 87 layer_id_(layer_id),
91 tile_id_(tile_id), 88 tile_id_(tile_id),
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
309 public: 306 public:
310 ImageDecodeWorkerPoolTaskImpl(SkPixelRef* pixel_ref, 307 ImageDecodeWorkerPoolTaskImpl(SkPixelRef* pixel_ref,
311 int layer_id, 308 int layer_id,
312 RenderingStatsInstrumentation* rendering_stats, 309 RenderingStatsInstrumentation* rendering_stats,
313 const RasterWorkerPool::Task::Reply& reply) 310 const RasterWorkerPool::Task::Reply& reply)
314 : pixel_ref_(skia::SharePtr(pixel_ref)), 311 : pixel_ref_(skia::SharePtr(pixel_ref)),
315 layer_id_(layer_id), 312 layer_id_(layer_id),
316 rendering_stats_(rendering_stats), 313 rendering_stats_(rendering_stats),
317 reply_(reply) {} 314 reply_(reply) {}
318 315
319 // Overridden from internal::Task: 316 // Overridden from internal::WorkerPoolTask:
320 virtual void RunOnWorkerThread(unsigned thread_index) OVERRIDE { 317 virtual void RunOnWorkerThread(unsigned thread_index) OVERRIDE {
321 TRACE_EVENT0("cc", "ImageDecodeWorkerPoolTaskImpl::RunOnWorkerThread"); 318 TRACE_EVENT0("cc", "ImageDecodeWorkerPoolTaskImpl::RunOnWorkerThread");
322 devtools_instrumentation::ScopedImageDecodeTask image_decode_task( 319 devtools_instrumentation::ScopedImageDecodeTask image_decode_task(
323 pixel_ref_.get()); 320 pixel_ref_.get());
324 // This will cause the image referred to by pixel ref to be decoded. 321 // This will cause the image referred to by pixel ref to be decoded.
325 pixel_ref_->lockPixels(); 322 pixel_ref_->lockPixels();
326 pixel_ref_->unlockPixels(); 323 pixel_ref_->unlockPixels();
327 } 324 }
328
329 // Overridden from internal::WorkerPoolTask:
330 virtual void CompleteOnOriginThread() OVERRIDE { 325 virtual void CompleteOnOriginThread() OVERRIDE {
331 reply_.Run(!HasFinishedRunning()); 326 reply_.Run(!HasFinishedRunning());
332 } 327 }
333 328
334 protected: 329 protected:
335 virtual ~ImageDecodeWorkerPoolTaskImpl() {} 330 virtual ~ImageDecodeWorkerPoolTaskImpl() {}
336 331
337 private: 332 private:
338 skia::RefPtr<SkPixelRef> pixel_ref_; 333 skia::RefPtr<SkPixelRef> pixel_ref_;
339 int layer_id_; 334 int layer_id_;
340 RenderingStatsInstrumentation* rendering_stats_; 335 RenderingStatsInstrumentation* rendering_stats_;
341 const RasterWorkerPool::Task::Reply reply_; 336 const RasterWorkerPool::Task::Reply reply_;
342 337
343 DISALLOW_COPY_AND_ASSIGN(ImageDecodeWorkerPoolTaskImpl); 338 DISALLOW_COPY_AND_ASSIGN(ImageDecodeWorkerPoolTaskImpl);
344 }; 339 };
345 340
346 class RasterFinishedWorkerPoolTaskImpl : public internal::WorkerPoolTask { 341 class RasterFinishedWorkerPoolTaskImpl : public internal::WorkerPoolTask {
347 public: 342 public:
348 typedef base::Callback<void(const internal::WorkerPoolTask* source)> Callback; 343 typedef base::Callback<void(const internal::WorkerPoolTask* source)>
344 Callback;
349 345
350 RasterFinishedWorkerPoolTaskImpl( 346 RasterFinishedWorkerPoolTaskImpl(
351 const Callback& on_raster_finished_callback) 347 const Callback& on_raster_finished_callback)
352 : origin_loop_(base::MessageLoopProxy::current().get()), 348 : origin_loop_(base::MessageLoopProxy::current().get()),
353 on_raster_finished_callback_(on_raster_finished_callback) { 349 on_raster_finished_callback_(on_raster_finished_callback) {
354 } 350 }
355 351
356 // Overridden from internal::WorkerPoolTask: 352 // Overridden from internal::WorkerPoolTask:
357 virtual void RunOnWorkerThread(unsigned thread_index) OVERRIDE { 353 virtual void RunOnWorkerThread(unsigned thread_index) OVERRIDE {
358 TRACE_EVENT0("cc", "RasterFinishedWorkerPoolTaskImpl::RunOnWorkerThread"); 354 TRACE_EVENT0("cc", "RasterFinishedWorkerPoolTaskImpl::RunOnWorkerThread");
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
407 private: 403 private:
408 virtual ~RasterRequiredForActivationFinishedWorkerPoolTaskImpl() {} 404 virtual ~RasterRequiredForActivationFinishedWorkerPoolTaskImpl() {}
409 405
410 base::TimeTicks activation_delay_end_time_; 406 base::TimeTicks activation_delay_end_time_;
411 const size_t tasks_required_for_activation_count_; 407 const size_t tasks_required_for_activation_count_;
412 408
413 DISALLOW_COPY_AND_ASSIGN( 409 DISALLOW_COPY_AND_ASSIGN(
414 RasterRequiredForActivationFinishedWorkerPoolTaskImpl); 410 RasterRequiredForActivationFinishedWorkerPoolTaskImpl);
415 }; 411 };
416 412
417 class RasterTaskGraphRunner : public internal::TaskGraphRunner {
418 public:
419 RasterTaskGraphRunner()
420 : internal::TaskGraphRunner(RasterWorkerPool::GetNumRasterThreads(),
421 "CompositorRaster") {}
422 };
423 base::LazyInstance<RasterTaskGraphRunner>::Leaky g_task_graph_runner =
424 LAZY_INSTANCE_INITIALIZER;
425
426 const int kDefaultNumRasterThreads = 1;
427
428 int g_num_raster_threads = 0;
429 413
430 } // namespace 414 } // namespace
431 415
432 namespace internal { 416 namespace internal {
433 417
434 WorkerPoolTask::WorkerPoolTask() : did_complete_(false) {} 418 RasterWorkerPoolTask::RasterWorkerPoolTask(const Resource* resource,
435 419 TaskVector* dependencies,
436 WorkerPoolTask::~WorkerPoolTask() { 420 bool use_gpu_rasterization)
437 DCHECK_EQ(did_schedule_, did_complete_);
438 DCHECK(!did_run_ || did_complete_);
439 }
440
441 void WorkerPoolTask::WillComplete() {
442 DCHECK(!did_complete_);
443 }
444
445 void WorkerPoolTask::DidComplete() {
446 DCHECK(did_schedule_);
447 DCHECK(!did_complete_);
448 did_complete_ = true;
449 }
450
451 bool WorkerPoolTask::HasCompleted() const {
452 return did_complete_;
453 }
454
455 RasterWorkerPoolTask::RasterWorkerPoolTask(
456 const Resource* resource,
457 internal::Task::Vector* dependencies,
458 bool use_gpu_rasterization)
459 : did_run_(false), 421 : did_run_(false),
460 did_complete_(false), 422 did_complete_(false),
461 was_canceled_(false), 423 was_canceled_(false),
462 resource_(resource), 424 resource_(resource),
463 use_gpu_rasterization_(use_gpu_rasterization) { 425 use_gpu_rasterization_(use_gpu_rasterization) {
464 dependencies_.swap(*dependencies); 426 dependencies_.swap(*dependencies);
465 } 427 }
466 428
467 RasterWorkerPoolTask::~RasterWorkerPoolTask() {} 429 RasterWorkerPoolTask::~RasterWorkerPoolTask() {
430 }
468 431
469 void RasterWorkerPoolTask::DidRun(bool was_canceled) { 432 void RasterWorkerPoolTask::DidRun(bool was_canceled) {
470 DCHECK(!did_run_); 433 DCHECK(!did_run_);
471 did_run_ = true; 434 did_run_ = true;
472 was_canceled_ = was_canceled; 435 was_canceled_ = was_canceled;
473 } 436 }
474 437
475 bool RasterWorkerPoolTask::HasFinishedRunning() const { 438 bool RasterWorkerPoolTask::HasFinishedRunning() const {
476 return did_run_; 439 return did_run_;
477 } 440 }
(...skipping 10 matching lines...) Expand all
488 DCHECK(!did_complete_); 451 DCHECK(!did_complete_);
489 did_complete_ = true; 452 did_complete_ = true;
490 } 453 }
491 454
492 bool RasterWorkerPoolTask::HasCompleted() const { 455 bool RasterWorkerPoolTask::HasCompleted() const {
493 return did_complete_; 456 return did_complete_;
494 } 457 }
495 458
496 } // namespace internal 459 } // namespace internal
497 460
498 RasterWorkerPool::Task::Set::Set() {} 461 RasterWorkerPool::Task::Set::Set() {
462 }
499 463
500 RasterWorkerPool::Task::Set::~Set() {} 464 RasterWorkerPool::Task::Set::~Set() {
465 }
501 466
502 void RasterWorkerPool::Task::Set::Insert(const Task& task) { 467 void RasterWorkerPool::Task::Set::Insert(const Task& task) {
503 DCHECK(!task.is_null()); 468 DCHECK(!task.is_null());
504 tasks_.push_back(task.internal_); 469 tasks_.push_back(task.internal_);
505 } 470 }
506 471
507 RasterWorkerPool::Task::Task() {} 472 RasterWorkerPool::Task::Task() {
473 }
508 474
509 RasterWorkerPool::Task::Task(internal::WorkerPoolTask* internal) 475 RasterWorkerPool::Task::Task(internal::WorkerPoolTask* internal)
510 : internal_(internal) { 476 : internal_(internal) {
511 } 477 }
512 478
513 RasterWorkerPool::Task::~Task() {} 479 RasterWorkerPool::Task::~Task() {
480 }
514 481
515 void RasterWorkerPool::Task::Reset() { 482 void RasterWorkerPool::Task::Reset() {
516 internal_ = NULL; 483 internal_ = NULL;
517 } 484 }
518 485
519 RasterWorkerPool::RasterTask::Queue::Queue() {} 486 RasterWorkerPool::RasterTask::Queue::Queue() {
487 }
520 488
521 RasterWorkerPool::RasterTask::Queue::~Queue() {} 489 RasterWorkerPool::RasterTask::Queue::~Queue() {
490 }
522 491
523 void RasterWorkerPool::RasterTask::Queue::Append( 492 void RasterWorkerPool::RasterTask::Queue::Append(
524 const RasterTask& task, bool required_for_activation) { 493 const RasterTask& task, bool required_for_activation) {
525 DCHECK(!task.is_null()); 494 DCHECK(!task.is_null());
526 tasks_.push_back(task.internal_); 495 tasks_.push_back(task.internal_);
527 if (required_for_activation) 496 if (required_for_activation)
528 tasks_required_for_activation_.insert(task.internal_.get()); 497 tasks_required_for_activation_.insert(task.internal_.get());
529 } 498 }
530 499
531 RasterWorkerPool::RasterTask::RasterTask() {} 500 RasterWorkerPool::RasterTask::RasterTask() {
501 }
532 502
533 RasterWorkerPool::RasterTask::RasterTask( 503 RasterWorkerPool::RasterTask::RasterTask(
534 internal::RasterWorkerPoolTask* internal) 504 internal::RasterWorkerPoolTask* internal)
535 : internal_(internal) { 505 : internal_(internal) {
536 } 506 }
537 507
538 void RasterWorkerPool::RasterTask::Reset() { 508 void RasterWorkerPool::RasterTask::Reset() {
539 internal_ = NULL; 509 internal_ = NULL;
540 } 510 }
541 511
542 RasterWorkerPool::RasterTask::~RasterTask() {} 512 RasterWorkerPool::RasterTask::~RasterTask() {
543
544 RasterWorkerPool::RasterWorkerPool(ResourceProvider* resource_provider,
545 ContextProvider* context_provider)
546 : namespace_token_(g_task_graph_runner.Pointer()->GetNamespaceToken()),
547 client_(NULL),
548 resource_provider_(resource_provider),
549 context_provider_(context_provider),
550 weak_ptr_factory_(this) {}
551
552 RasterWorkerPool::~RasterWorkerPool() {}
553
554 // static
555 void RasterWorkerPool::SetNumRasterThreads(int num_threads) {
556 DCHECK_LT(0, num_threads);
557 DCHECK_EQ(0, g_num_raster_threads);
558
559 g_num_raster_threads = num_threads;
560 } 513 }
561 514
562 // static 515 // static
563 int RasterWorkerPool::GetNumRasterThreads() {
564 if (!g_num_raster_threads)
565 g_num_raster_threads = kDefaultNumRasterThreads;
566
567 return g_num_raster_threads;
568 }
569
570 // static
571 RasterWorkerPool::RasterTask RasterWorkerPool::CreateRasterTask( 516 RasterWorkerPool::RasterTask RasterWorkerPool::CreateRasterTask(
572 const Resource* resource, 517 const Resource* resource,
573 PicturePileImpl* picture_pile, 518 PicturePileImpl* picture_pile,
574 const gfx::Rect& content_rect, 519 const gfx::Rect& content_rect,
575 float contents_scale, 520 float contents_scale,
576 RasterMode raster_mode, 521 RasterMode raster_mode,
577 TileResolution tile_resolution, 522 TileResolution tile_resolution,
578 int layer_id, 523 int layer_id,
579 const void* tile_id, 524 const void* tile_id,
580 int source_frame_number, 525 int source_frame_number,
(...skipping 22 matching lines...) Expand all
603 SkPixelRef* pixel_ref, 548 SkPixelRef* pixel_ref,
604 int layer_id, 549 int layer_id,
605 RenderingStatsInstrumentation* stats_instrumentation, 550 RenderingStatsInstrumentation* stats_instrumentation,
606 const Task::Reply& reply) { 551 const Task::Reply& reply) {
607 return Task(new ImageDecodeWorkerPoolTaskImpl(pixel_ref, 552 return Task(new ImageDecodeWorkerPoolTaskImpl(pixel_ref,
608 layer_id, 553 layer_id,
609 stats_instrumentation, 554 stats_instrumentation,
610 reply)); 555 reply));
611 } 556 }
612 557
558 RasterWorkerPool::RasterWorkerPool(ResourceProvider* resource_provider,
559 ContextProvider* context_provider)
560 : client_(NULL),
561 resource_provider_(resource_provider),
562 context_provider_(context_provider),
563 weak_ptr_factory_(this) {
564 }
565
566 RasterWorkerPool::~RasterWorkerPool() {
567 }
568
613 void RasterWorkerPool::SetClient(RasterWorkerPoolClient* client) { 569 void RasterWorkerPool::SetClient(RasterWorkerPoolClient* client) {
614 client_ = client; 570 client_ = client;
615 } 571 }
616 572
617 void RasterWorkerPool::Shutdown() { 573 void RasterWorkerPool::Shutdown() {
618 TRACE_EVENT0("cc", "RasterWorkerPool::Shutdown");
619
620 raster_tasks_.clear(); 574 raster_tasks_.clear();
621 TaskGraph empty; 575 TaskGraph empty;
622 SetTaskGraph(&empty); 576 SetTaskGraph(&empty);
623 g_task_graph_runner.Pointer()->WaitForTasksToFinishRunning(namespace_token_); 577 WorkerPool::Shutdown();
624 weak_ptr_factory_.InvalidateWeakPtrs(); 578 weak_ptr_factory_.InvalidateWeakPtrs();
625 } 579 }
626 580
627 void RasterWorkerPool::CheckForCompletedTasks() { 581 void RasterWorkerPool::CheckForCompletedTasks() {
628 TRACE_EVENT0("cc", "RasterWorkerPool::CheckForCompletedTasks"); 582 TRACE_EVENT0("cc", "RasterWorkerPool::CheckForCompletedTasks");
629 583
630 CheckForCompletedWorkerPoolTasks(); 584 // Check for completed worker-thread tasks.
585 CheckForCompletedWorkerTasks();
631 586
632 // Complete gpu rasterization tasks. 587 // Complete gpu rasterization tasks.
633 while (!completed_gpu_raster_tasks_.empty()) { 588 while (!completed_gpu_raster_tasks_.empty()) {
634 internal::RasterWorkerPoolTask* task = 589 internal::RasterWorkerPoolTask* task =
635 completed_gpu_raster_tasks_.front().get(); 590 completed_gpu_raster_tasks_.front().get();
636
637 task->WillComplete(); 591 task->WillComplete();
638 task->CompleteOnOriginThread(); 592 task->CompleteOnOriginThread();
639 task->DidComplete(); 593 task->DidComplete();
640 594
641 completed_gpu_raster_tasks_.pop_front(); 595 completed_gpu_raster_tasks_.pop_front();
642 } 596 }
643 } 597 }
644 598
645 void RasterWorkerPool::CheckForCompletedWorkerPoolTasks() {
646 internal::Task::Vector completed_tasks;
647 g_task_graph_runner.Pointer()->CollectCompletedTasks(namespace_token_,
648 &completed_tasks);
649
650 for (internal::Task::Vector::const_iterator it = completed_tasks.begin();
651 it != completed_tasks.end();
652 ++it) {
653 internal::WorkerPoolTask* task = static_cast<internal::WorkerPoolTask*>(
654 it->get());
655
656 task->WillComplete();
657 task->CompleteOnOriginThread();
658 task->DidComplete();
659 }
660 }
661
662 void RasterWorkerPool::SetTaskGraph(TaskGraph* graph) {
663 TRACE_EVENT1(
664 "cc", "RasterWorkerPool::SetTaskGraph", "num_tasks", graph->size());
665
666 g_task_graph_runner.Pointer()->SetTaskGraph(namespace_token_, graph);
667 }
668
669 void RasterWorkerPool::SetRasterTasks(RasterTask::Queue* queue) { 599 void RasterWorkerPool::SetRasterTasks(RasterTask::Queue* queue) {
670 raster_tasks_.swap(queue->tasks_); 600 raster_tasks_.swap(queue->tasks_);
671 raster_tasks_required_for_activation_.swap( 601 raster_tasks_required_for_activation_.swap(
672 queue->tasks_required_for_activation_); 602 queue->tasks_required_for_activation_);
673 } 603 }
674 604
675 bool RasterWorkerPool::IsRasterTaskRequiredForActivation( 605 bool RasterWorkerPool::IsRasterTaskRequiredForActivation(
676 internal::RasterWorkerPoolTask* task) const { 606 internal::RasterWorkerPoolTask* task) const {
677 return 607 return
678 raster_tasks_required_for_activation_.find(task) != 608 raster_tasks_required_for_activation_.find(task) !=
(...skipping 27 matching lines...) Expand all
706 scoped_refptr<internal::WorkerPoolTask> 636 scoped_refptr<internal::WorkerPoolTask>
707 RasterWorkerPool::CreateRasterFinishedTask() { 637 RasterWorkerPool::CreateRasterFinishedTask() {
708 return make_scoped_refptr( 638 return make_scoped_refptr(
709 new RasterFinishedWorkerPoolTaskImpl( 639 new RasterFinishedWorkerPoolTaskImpl(
710 base::Bind(&RasterWorkerPool::OnRasterFinished, 640 base::Bind(&RasterWorkerPool::OnRasterFinished,
711 weak_ptr_factory_.GetWeakPtr()))); 641 weak_ptr_factory_.GetWeakPtr())));
712 } 642 }
713 643
714 scoped_refptr<internal::WorkerPoolTask> 644 scoped_refptr<internal::WorkerPoolTask>
715 RasterWorkerPool::CreateRasterRequiredForActivationFinishedTask( 645 RasterWorkerPool::CreateRasterRequiredForActivationFinishedTask(
716 size_t tasks_required_for_activation_count) { 646 size_t tasks_required_for_activation_count) {
717 return make_scoped_refptr( 647 return make_scoped_refptr(
718 new RasterRequiredForActivationFinishedWorkerPoolTaskImpl( 648 new RasterRequiredForActivationFinishedWorkerPoolTaskImpl(
719 base::Bind(&RasterWorkerPool::OnRasterRequiredForActivationFinished, 649 base::Bind(&RasterWorkerPool::OnRasterRequiredForActivationFinished,
720 weak_ptr_factory_.GetWeakPtr()), 650 weak_ptr_factory_.GetWeakPtr()),
721 tasks_required_for_activation_count)); 651 tasks_required_for_activation_count));
722 } 652 }
723 653
724 void RasterWorkerPool::OnRasterFinished( 654 void RasterWorkerPool::OnRasterFinished(
725 const internal::WorkerPoolTask* source) { 655 const internal::WorkerPoolTask* source) {
726 TRACE_EVENT0("cc", "RasterWorkerPool::OnRasterFinished"); 656 TRACE_EVENT0("cc", "RasterWorkerPool::OnRasterFinished");
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
759 TaskGraph* graph) { 689 TaskGraph* graph) {
760 internal::GraphNode* node = new internal::GraphNode(task, priority); 690 internal::GraphNode* node = new internal::GraphNode(task, priority);
761 DCHECK(graph->find(task) == graph->end()); 691 DCHECK(graph->find(task) == graph->end());
762 graph->set(task, make_scoped_ptr(node)); 692 graph->set(task, make_scoped_ptr(node));
763 return node; 693 return node;
764 } 694 }
765 695
766 // static 696 // static
767 internal::GraphNode* RasterWorkerPool::CreateGraphNodeForRasterTask( 697 internal::GraphNode* RasterWorkerPool::CreateGraphNodeForRasterTask(
768 internal::WorkerPoolTask* raster_task, 698 internal::WorkerPoolTask* raster_task,
769 const internal::Task::Vector& decode_tasks, 699 const TaskVector& decode_tasks,
770 unsigned priority, 700 unsigned priority,
771 TaskGraph* graph) { 701 TaskGraph* graph) {
772 DCHECK(!raster_task->HasCompleted()); 702 DCHECK(!raster_task->HasCompleted());
773 703
774 internal::GraphNode* raster_node = CreateGraphNodeForTask( 704 internal::GraphNode* raster_node = CreateGraphNodeForTask(
775 raster_task, priority, graph); 705 raster_task, priority, graph);
776 706
777 // Insert image decode tasks. 707 // Insert image decode tasks.
778 for (internal::Task::Vector::const_iterator it = decode_tasks.begin(); 708 for (TaskVector::const_iterator it = decode_tasks.begin();
779 it != decode_tasks.end(); ++it) { 709 it != decode_tasks.end(); ++it) {
780 internal::WorkerPoolTask* decode_task = 710 internal::WorkerPoolTask* decode_task = it->get();
781 static_cast<internal::WorkerPoolTask*>(it->get());
782 711
783 // Skip if already decoded. 712 // Skip if already decoded.
784 if (decode_task->HasCompleted()) 713 if (decode_task->HasCompleted())
785 continue; 714 continue;
786 715
787 raster_node->add_dependency(); 716 raster_node->add_dependency();
788 717
789 // Check if decode task already exists in graph. 718 // Check if decode task already exists in graph.
790 internal::GraphNode::Map::iterator decode_it = graph->find(decode_task); 719 GraphNodeMap::iterator decode_it = graph->find(decode_task);
791 if (decode_it != graph->end()) { 720 if (decode_it != graph->end()) {
792 internal::GraphNode* decode_node = decode_it->second; 721 internal::GraphNode* decode_node = decode_it->second;
793 decode_node->add_dependent(raster_node); 722 decode_node->add_dependent(raster_node);
794 continue; 723 continue;
795 } 724 }
796 725
797 internal::GraphNode* decode_node = CreateGraphNodeForTask( 726 internal::GraphNode* decode_node = CreateGraphNodeForTask(
798 decode_task, priority, graph); 727 decode_task, priority, graph);
799 decode_node->add_dependent(raster_node); 728 decode_node->add_dependent(raster_node);
800 } 729 }
801 730
802 return raster_node; 731 return raster_node;
803 } 732 }
804 733
805 } // namespace cc 734 } // namespace cc
OLDNEW
« no previous file with comments | « cc/resources/raster_worker_pool.h ('k') | cc/resources/raster_worker_pool_perftest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698