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

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

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