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

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: build fix 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
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),
89 source_frame_number_(source_frame_number), 92 source_frame_number_(source_frame_number),
90 rendering_stats_(rendering_stats), 93 rendering_stats_(rendering_stats),
91 reply_(reply) {} 94 reply_(reply) {
sohanjg 2014/01/21 09:41:08 nit: do we need this line here ?
reveman 2014/01/21 15:37:48 I'm trying to make the code consistent in that onl
danakj 2014/01/21 15:47:05 FWIW the easiest way to be consistent is to just r
reveman 2014/01/21 16:10:44 Good point. I'm not going to "cl format" this patc
95 }
92 96
93 void RunAnalysisOnThread(unsigned thread_index) { 97 void RunAnalysisOnThread(unsigned thread_index) {
94 TRACE_EVENT1("cc", 98 TRACE_EVENT1("cc",
95 "RasterWorkerPoolTaskImpl::RunAnalysisOnThread", 99 "RasterWorkerPoolTaskImpl::RunAnalysisOnThread",
96 "data", 100 "data",
97 TracedValue::FromValue(DataAsValue().release())); 101 TracedValue::FromValue(DataAsValue().release()));
98 102
99 DCHECK(picture_pile_.get()); 103 DCHECK(picture_pile_.get());
100 DCHECK(rendering_stats_); 104 DCHECK(rendering_stats_);
101 105
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
304 308
305 class ImageDecodeWorkerPoolTaskImpl : public internal::WorkerPoolTask { 309 class ImageDecodeWorkerPoolTaskImpl : public internal::WorkerPoolTask {
306 public: 310 public:
307 ImageDecodeWorkerPoolTaskImpl(SkPixelRef* pixel_ref, 311 ImageDecodeWorkerPoolTaskImpl(SkPixelRef* pixel_ref,
308 int layer_id, 312 int layer_id,
309 RenderingStatsInstrumentation* rendering_stats, 313 RenderingStatsInstrumentation* rendering_stats,
310 const RasterWorkerPool::Task::Reply& reply) 314 const RasterWorkerPool::Task::Reply& reply)
311 : pixel_ref_(skia::SharePtr(pixel_ref)), 315 : pixel_ref_(skia::SharePtr(pixel_ref)),
312 layer_id_(layer_id), 316 layer_id_(layer_id),
313 rendering_stats_(rendering_stats), 317 rendering_stats_(rendering_stats),
314 reply_(reply) {} 318 reply_(reply) {
sohanjg 2014/01/21 09:41:08 nit: do we need this line here ?
reveman 2014/01/21 19:51:32 sohanjg, you're right. clang-format prefer it the
319 }
315 320
316 // Overridden from internal::WorkerPoolTask: 321 // Overridden from internal::Task:
317 virtual void RunOnWorkerThread(unsigned thread_index) OVERRIDE { 322 virtual void RunOnWorkerThread(unsigned thread_index) OVERRIDE {
318 TRACE_EVENT0("cc", "ImageDecodeWorkerPoolTaskImpl::RunOnWorkerThread"); 323 TRACE_EVENT0("cc", "ImageDecodeWorkerPoolTaskImpl::RunOnWorkerThread");
319 devtools_instrumentation::ScopedImageDecodeTask image_decode_task( 324 devtools_instrumentation::ScopedImageDecodeTask image_decode_task(
320 pixel_ref_.get()); 325 pixel_ref_.get());
321 // This will cause the image referred to by pixel ref to be decoded. 326 // This will cause the image referred to by pixel ref to be decoded.
322 pixel_ref_->lockPixels(); 327 pixel_ref_->lockPixels();
323 pixel_ref_->unlockPixels(); 328 pixel_ref_->unlockPixels();
324 } 329 }
330
331 // Overridden from internal::WorkerPoolTask:
325 virtual void CompleteOnOriginThread() OVERRIDE { 332 virtual void CompleteOnOriginThread() OVERRIDE {
326 reply_.Run(!HasFinishedRunning()); 333 reply_.Run(!HasFinishedRunning());
327 } 334 }
328 335
329 protected: 336 protected:
330 virtual ~ImageDecodeWorkerPoolTaskImpl() {} 337 virtual ~ImageDecodeWorkerPoolTaskImpl() {}
331 338
332 private: 339 private:
333 skia::RefPtr<SkPixelRef> pixel_ref_; 340 skia::RefPtr<SkPixelRef> pixel_ref_;
334 int layer_id_; 341 int layer_id_;
335 RenderingStatsInstrumentation* rendering_stats_; 342 RenderingStatsInstrumentation* rendering_stats_;
336 const RasterWorkerPool::Task::Reply reply_; 343 const RasterWorkerPool::Task::Reply reply_;
337 344
338 DISALLOW_COPY_AND_ASSIGN(ImageDecodeWorkerPoolTaskImpl); 345 DISALLOW_COPY_AND_ASSIGN(ImageDecodeWorkerPoolTaskImpl);
339 }; 346 };
340 347
341 class RasterFinishedWorkerPoolTaskImpl : public internal::WorkerPoolTask { 348 class RasterFinishedWorkerPoolTaskImpl : public internal::WorkerPoolTask {
342 public: 349 public:
343 typedef base::Callback<void(const internal::WorkerPoolTask* source)> 350 typedef base::Callback<void(const internal::WorkerPoolTask* source)> Callback;
344 Callback;
345 351
346 RasterFinishedWorkerPoolTaskImpl( 352 RasterFinishedWorkerPoolTaskImpl(
347 const Callback& on_raster_finished_callback) 353 const Callback& on_raster_finished_callback)
348 : origin_loop_(base::MessageLoopProxy::current().get()), 354 : origin_loop_(base::MessageLoopProxy::current().get()),
349 on_raster_finished_callback_(on_raster_finished_callback) { 355 on_raster_finished_callback_(on_raster_finished_callback) {
350 } 356 }
351 357
352 // Overridden from internal::WorkerPoolTask: 358 // Overridden from internal::WorkerPoolTask:
353 virtual void RunOnWorkerThread(unsigned thread_index) OVERRIDE { 359 virtual void RunOnWorkerThread(unsigned thread_index) OVERRIDE {
354 TRACE_EVENT0("cc", "RasterFinishedWorkerPoolTaskImpl::RunOnWorkerThread"); 360 TRACE_EVENT0("cc", "RasterFinishedWorkerPoolTaskImpl::RunOnWorkerThread");
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
403 private: 409 private:
404 virtual ~RasterRequiredForActivationFinishedWorkerPoolTaskImpl() {} 410 virtual ~RasterRequiredForActivationFinishedWorkerPoolTaskImpl() {}
405 411
406 base::TimeTicks activation_delay_end_time_; 412 base::TimeTicks activation_delay_end_time_;
407 const size_t tasks_required_for_activation_count_; 413 const size_t tasks_required_for_activation_count_;
408 414
409 DISALLOW_COPY_AND_ASSIGN( 415 DISALLOW_COPY_AND_ASSIGN(
410 RasterRequiredForActivationFinishedWorkerPoolTaskImpl); 416 RasterRequiredForActivationFinishedWorkerPoolTaskImpl);
411 }; 417 };
412 418
419 class RasterTaskGraphRunner : public internal::TaskGraphRunner {
420 public:
421 RasterTaskGraphRunner()
422 : internal::TaskGraphRunner(RasterWorkerPool::GetNumRasterThreads(),
423 "CompositorRaster") {
424 }
425 };
426 base::LazyInstance<RasterTaskGraphRunner>::Leaky g_task_graph_runner =
427 LAZY_INSTANCE_INITIALIZER;
428
429 const int kDefaultNumRasterThreads = 1;
430
431 int g_num_raster_threads = 0;
alokp 2014/01/21 18:42:50 make these static members of RasterTaskGraphRunner
reveman 2014/01/21 19:51:32 I prefer anonymous namespace and hiding these from
413 432
414 } // namespace 433 } // namespace
415 434
416 namespace internal { 435 namespace internal {
417 436
418 RasterWorkerPoolTask::RasterWorkerPoolTask(const Resource* resource, 437 WorkerPoolTask::WorkerPoolTask() : did_complete_(false) {}
419 TaskVector* dependencies, 438
420 bool use_gpu_rasterization) 439 WorkerPoolTask::~WorkerPoolTask() {
440 DCHECK_EQ(did_schedule_, did_complete_);
441 DCHECK(!did_run_ || did_complete_);
442 }
443
444 void WorkerPoolTask::WillComplete() {
445 DCHECK(!did_complete_);
446 }
447
448 void WorkerPoolTask::DidComplete() {
449 DCHECK(did_schedule_);
450 DCHECK(!did_complete_);
451 did_complete_ = true;
452 }
453
454 bool WorkerPoolTask::HasCompleted() const {
455 return did_complete_;
456 }
457
458 RasterWorkerPoolTask::RasterWorkerPoolTask(
459 const Resource* resource,
460 internal::Task::Vector* dependencies,
461 bool use_gpu_rasterization)
421 : did_run_(false), 462 : did_run_(false),
422 did_complete_(false), 463 did_complete_(false),
423 was_canceled_(false), 464 was_canceled_(false),
424 resource_(resource), 465 resource_(resource),
425 use_gpu_rasterization_(use_gpu_rasterization) { 466 use_gpu_rasterization_(use_gpu_rasterization) {
426 dependencies_.swap(*dependencies); 467 dependencies_.swap(*dependencies);
427 } 468 }
428 469
429 RasterWorkerPoolTask::~RasterWorkerPoolTask() { 470 RasterWorkerPoolTask::~RasterWorkerPoolTask() {}
430 }
431 471
432 void RasterWorkerPoolTask::DidRun(bool was_canceled) { 472 void RasterWorkerPoolTask::DidRun(bool was_canceled) {
433 DCHECK(!did_run_); 473 DCHECK(!did_run_);
434 did_run_ = true; 474 did_run_ = true;
435 was_canceled_ = was_canceled; 475 was_canceled_ = was_canceled;
436 } 476 }
437 477
438 bool RasterWorkerPoolTask::HasFinishedRunning() const { 478 bool RasterWorkerPoolTask::HasFinishedRunning() const {
439 return did_run_; 479 return did_run_;
440 } 480 }
(...skipping 10 matching lines...) Expand all
451 DCHECK(!did_complete_); 491 DCHECK(!did_complete_);
452 did_complete_ = true; 492 did_complete_ = true;
453 } 493 }
454 494
455 bool RasterWorkerPoolTask::HasCompleted() const { 495 bool RasterWorkerPoolTask::HasCompleted() const {
456 return did_complete_; 496 return did_complete_;
457 } 497 }
458 498
459 } // namespace internal 499 } // namespace internal
460 500
461 RasterWorkerPool::Task::Set::Set() { 501 RasterWorkerPool::Task::Set::Set() {}
462 }
463 502
464 RasterWorkerPool::Task::Set::~Set() { 503 RasterWorkerPool::Task::Set::~Set() {}
465 }
466 504
467 void RasterWorkerPool::Task::Set::Insert(const Task& task) { 505 void RasterWorkerPool::Task::Set::Insert(const Task& task) {
468 DCHECK(!task.is_null()); 506 DCHECK(!task.is_null());
469 tasks_.push_back(task.internal_); 507 tasks_.push_back(task.internal_);
470 } 508 }
471 509
472 RasterWorkerPool::Task::Task() { 510 RasterWorkerPool::Task::Task() {}
473 }
474 511
475 RasterWorkerPool::Task::Task(internal::WorkerPoolTask* internal) 512 RasterWorkerPool::Task::Task(internal::WorkerPoolTask* internal)
476 : internal_(internal) { 513 : internal_(internal) {
477 } 514 }
478 515
479 RasterWorkerPool::Task::~Task() { 516 RasterWorkerPool::Task::~Task() {}
480 }
481 517
482 void RasterWorkerPool::Task::Reset() { 518 void RasterWorkerPool::Task::Reset() {
483 internal_ = NULL; 519 internal_ = NULL;
484 } 520 }
485 521
486 RasterWorkerPool::RasterTask::Queue::Queue() { 522 RasterWorkerPool::RasterTask::Queue::Queue() {}
487 }
488 523
489 RasterWorkerPool::RasterTask::Queue::~Queue() { 524 RasterWorkerPool::RasterTask::Queue::~Queue() {}
490 }
491 525
492 void RasterWorkerPool::RasterTask::Queue::Append( 526 void RasterWorkerPool::RasterTask::Queue::Append(
493 const RasterTask& task, bool required_for_activation) { 527 const RasterTask& task, bool required_for_activation) {
494 DCHECK(!task.is_null()); 528 DCHECK(!task.is_null());
495 tasks_.push_back(task.internal_); 529 tasks_.push_back(task.internal_);
496 if (required_for_activation) 530 if (required_for_activation)
497 tasks_required_for_activation_.insert(task.internal_.get()); 531 tasks_required_for_activation_.insert(task.internal_.get());
498 } 532 }
499 533
500 RasterWorkerPool::RasterTask::RasterTask() { 534 RasterWorkerPool::RasterTask::RasterTask() {}
501 }
502 535
503 RasterWorkerPool::RasterTask::RasterTask( 536 RasterWorkerPool::RasterTask::RasterTask(
504 internal::RasterWorkerPoolTask* internal) 537 internal::RasterWorkerPoolTask* internal)
505 : internal_(internal) { 538 : internal_(internal) {
506 } 539 }
507 540
508 void RasterWorkerPool::RasterTask::Reset() { 541 void RasterWorkerPool::RasterTask::Reset() {
509 internal_ = NULL; 542 internal_ = NULL;
510 } 543 }
511 544
512 RasterWorkerPool::RasterTask::~RasterTask() { 545 RasterWorkerPool::RasterTask::~RasterTask() {}
546
547 RasterWorkerPool::RasterWorkerPool(ResourceProvider* resource_provider,
548 ContextProvider* context_provider)
549 : namespace_token_(g_task_graph_runner.Pointer()->GetNamespaceToken()),
550 client_(NULL),
551 resource_provider_(resource_provider),
552 context_provider_(context_provider),
553 weak_ptr_factory_(this) {
554 }
555
556 RasterWorkerPool::~RasterWorkerPool() {}
557
558 // static
559 void RasterWorkerPool::SetNumRasterThreads(int num_threads) {
560 DCHECK_LT(0, num_threads);
561 DCHECK_EQ(0, g_num_raster_threads);
alokp 2014/01/21 18:42:50 Are you trying to make sure that SetNumRasterThrea
reveman 2014/01/21 19:51:32 I also want to make sure it's not called after Get
562
563 g_num_raster_threads = num_threads;
513 } 564 }
514 565
515 // static 566 // static
567 int RasterWorkerPool::GetNumRasterThreads() {
568 if (!g_num_raster_threads)
569 g_num_raster_threads = kDefaultNumRasterThreads;
570
571 return g_num_raster_threads;
572 }
573
574 // static
516 RasterWorkerPool::RasterTask RasterWorkerPool::CreateRasterTask( 575 RasterWorkerPool::RasterTask RasterWorkerPool::CreateRasterTask(
517 const Resource* resource, 576 const Resource* resource,
518 PicturePileImpl* picture_pile, 577 PicturePileImpl* picture_pile,
519 const gfx::Rect& content_rect, 578 const gfx::Rect& content_rect,
520 float contents_scale, 579 float contents_scale,
521 RasterMode raster_mode, 580 RasterMode raster_mode,
522 TileResolution tile_resolution, 581 TileResolution tile_resolution,
523 int layer_id, 582 int layer_id,
524 const void* tile_id, 583 const void* tile_id,
525 int source_frame_number, 584 int source_frame_number,
(...skipping 22 matching lines...) Expand all
548 SkPixelRef* pixel_ref, 607 SkPixelRef* pixel_ref,
549 int layer_id, 608 int layer_id,
550 RenderingStatsInstrumentation* stats_instrumentation, 609 RenderingStatsInstrumentation* stats_instrumentation,
551 const Task::Reply& reply) { 610 const Task::Reply& reply) {
552 return Task(new ImageDecodeWorkerPoolTaskImpl(pixel_ref, 611 return Task(new ImageDecodeWorkerPoolTaskImpl(pixel_ref,
553 layer_id, 612 layer_id,
554 stats_instrumentation, 613 stats_instrumentation,
555 reply)); 614 reply));
556 } 615 }
557 616
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) { 617 void RasterWorkerPool::SetClient(RasterWorkerPoolClient* client) {
570 client_ = client; 618 client_ = client;
571 } 619 }
572 620
573 void RasterWorkerPool::Shutdown() { 621 void RasterWorkerPool::Shutdown() {
622 TRACE_EVENT0("cc", "RasterWorkerPool::Shutdown");
623
574 raster_tasks_.clear(); 624 raster_tasks_.clear();
575 TaskGraph empty; 625 TaskGraph empty;
576 SetTaskGraph(&empty); 626 SetTaskGraph(&empty);
577 WorkerPool::Shutdown(); 627 g_task_graph_runner.Pointer()->WaitForTasksToFinishRunning(namespace_token_);
578 weak_ptr_factory_.InvalidateWeakPtrs(); 628 weak_ptr_factory_.InvalidateWeakPtrs();
579 } 629 }
580 630
581 void RasterWorkerPool::CheckForCompletedTasks() { 631 void RasterWorkerPool::CheckForCompletedTasks() {
582 TRACE_EVENT0("cc", "RasterWorkerPool::CheckForCompletedTasks"); 632 TRACE_EVENT0("cc", "RasterWorkerPool::CheckForCompletedTasks");
583 633
584 // Check for completed worker-thread tasks. 634 CheckForCompletedWorkerPoolTasks();
585 CheckForCompletedWorkerTasks();
586 635
587 // Complete gpu rasterization tasks. 636 // Complete gpu rasterization tasks.
588 while (!completed_gpu_raster_tasks_.empty()) { 637 while (!completed_gpu_raster_tasks_.empty()) {
589 internal::RasterWorkerPoolTask* task = 638 internal::RasterWorkerPoolTask* task =
590 completed_gpu_raster_tasks_.front().get(); 639 completed_gpu_raster_tasks_.front().get();
640
591 task->WillComplete(); 641 task->WillComplete();
592 task->CompleteOnOriginThread(); 642 task->CompleteOnOriginThread();
593 task->DidComplete(); 643 task->DidComplete();
594 644
595 completed_gpu_raster_tasks_.pop_front(); 645 completed_gpu_raster_tasks_.pop_front();
596 } 646 }
597 } 647 }
598 648
649 void RasterWorkerPool::CheckForCompletedWorkerPoolTasks() {
650 internal::Task::Vector completed_tasks;
sohanjg 2014/01/21 09:41:08 nit: can we typedef internal::Task::Vector ?
reveman 2014/01/21 15:37:48 To what? I think it's good to not remove the inter
651 g_task_graph_runner.Pointer()->CollectCompletedTasks(
652 namespace_token_, &completed_tasks);
653
654 for (internal::Task::Vector::const_iterator it = completed_tasks.begin();
655 it != completed_tasks.end();
656 ++it) {
657 internal::WorkerPoolTask* task = static_cast<internal::WorkerPoolTask*>(
658 it->get());
659
660 task->WillComplete();
661 task->CompleteOnOriginThread();
662 task->DidComplete();
663 }
664 }
665
666 void RasterWorkerPool::SetTaskGraph(TaskGraph* graph) {
667 TRACE_EVENT1("cc", "RasterWorkerPool::SetTaskGraph",
668 "num_tasks", graph->size());
669
670 g_task_graph_runner.Pointer()->SetTaskGraph(namespace_token_, graph);
671 }
672
599 void RasterWorkerPool::SetRasterTasks(RasterTask::Queue* queue) { 673 void RasterWorkerPool::SetRasterTasks(RasterTask::Queue* queue) {
600 raster_tasks_.swap(queue->tasks_); 674 raster_tasks_.swap(queue->tasks_);
601 raster_tasks_required_for_activation_.swap( 675 raster_tasks_required_for_activation_.swap(
602 queue->tasks_required_for_activation_); 676 queue->tasks_required_for_activation_);
603 } 677 }
604 678
605 bool RasterWorkerPool::IsRasterTaskRequiredForActivation( 679 bool RasterWorkerPool::IsRasterTaskRequiredForActivation(
606 internal::RasterWorkerPoolTask* task) const { 680 internal::RasterWorkerPoolTask* task) const {
607 return 681 return
608 raster_tasks_required_for_activation_.find(task) != 682 raster_tasks_required_for_activation_.find(task) !=
(...skipping 27 matching lines...) Expand all
636 scoped_refptr<internal::WorkerPoolTask> 710 scoped_refptr<internal::WorkerPoolTask>
637 RasterWorkerPool::CreateRasterFinishedTask() { 711 RasterWorkerPool::CreateRasterFinishedTask() {
638 return make_scoped_refptr( 712 return make_scoped_refptr(
639 new RasterFinishedWorkerPoolTaskImpl( 713 new RasterFinishedWorkerPoolTaskImpl(
640 base::Bind(&RasterWorkerPool::OnRasterFinished, 714 base::Bind(&RasterWorkerPool::OnRasterFinished,
641 weak_ptr_factory_.GetWeakPtr()))); 715 weak_ptr_factory_.GetWeakPtr())));
642 } 716 }
643 717
644 scoped_refptr<internal::WorkerPoolTask> 718 scoped_refptr<internal::WorkerPoolTask>
645 RasterWorkerPool::CreateRasterRequiredForActivationFinishedTask( 719 RasterWorkerPool::CreateRasterRequiredForActivationFinishedTask(
646 size_t tasks_required_for_activation_count) { 720 size_t tasks_required_for_activation_count) {
647 return make_scoped_refptr( 721 return make_scoped_refptr(
648 new RasterRequiredForActivationFinishedWorkerPoolTaskImpl( 722 new RasterRequiredForActivationFinishedWorkerPoolTaskImpl(
649 base::Bind(&RasterWorkerPool::OnRasterRequiredForActivationFinished, 723 base::Bind(&RasterWorkerPool::OnRasterRequiredForActivationFinished,
650 weak_ptr_factory_.GetWeakPtr()), 724 weak_ptr_factory_.GetWeakPtr()),
651 tasks_required_for_activation_count)); 725 tasks_required_for_activation_count));
652 } 726 }
653 727
654 void RasterWorkerPool::OnRasterFinished( 728 void RasterWorkerPool::OnRasterFinished(
655 const internal::WorkerPoolTask* source) { 729 const internal::WorkerPoolTask* source) {
656 TRACE_EVENT0("cc", "RasterWorkerPool::OnRasterFinished"); 730 TRACE_EVENT0("cc", "RasterWorkerPool::OnRasterFinished");
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
689 TaskGraph* graph) { 763 TaskGraph* graph) {
690 internal::GraphNode* node = new internal::GraphNode(task, priority); 764 internal::GraphNode* node = new internal::GraphNode(task, priority);
691 DCHECK(graph->find(task) == graph->end()); 765 DCHECK(graph->find(task) == graph->end());
692 graph->set(task, make_scoped_ptr(node)); 766 graph->set(task, make_scoped_ptr(node));
693 return node; 767 return node;
694 } 768 }
695 769
696 // static 770 // static
697 internal::GraphNode* RasterWorkerPool::CreateGraphNodeForRasterTask( 771 internal::GraphNode* RasterWorkerPool::CreateGraphNodeForRasterTask(
698 internal::WorkerPoolTask* raster_task, 772 internal::WorkerPoolTask* raster_task,
699 const TaskVector& decode_tasks, 773 const internal::Task::Vector& decode_tasks,
700 unsigned priority, 774 unsigned priority,
701 TaskGraph* graph) { 775 TaskGraph* graph) {
702 DCHECK(!raster_task->HasCompleted()); 776 DCHECK(!raster_task->HasCompleted());
703 777
704 internal::GraphNode* raster_node = CreateGraphNodeForTask( 778 internal::GraphNode* raster_node = CreateGraphNodeForTask(
705 raster_task, priority, graph); 779 raster_task, priority, graph);
706 780
707 // Insert image decode tasks. 781 // Insert image decode tasks.
708 for (TaskVector::const_iterator it = decode_tasks.begin(); 782 for (internal::Task::Vector::const_iterator it = decode_tasks.begin();
709 it != decode_tasks.end(); ++it) { 783 it != decode_tasks.end(); ++it) {
710 internal::WorkerPoolTask* decode_task = it->get(); 784 internal::WorkerPoolTask* decode_task =
785 static_cast<internal::WorkerPoolTask*>(it->get());
711 786
712 // Skip if already decoded. 787 // Skip if already decoded.
713 if (decode_task->HasCompleted()) 788 if (decode_task->HasCompleted())
714 continue; 789 continue;
715 790
716 raster_node->add_dependency(); 791 raster_node->add_dependency();
717 792
718 // Check if decode task already exists in graph. 793 // Check if decode task already exists in graph.
719 GraphNodeMap::iterator decode_it = graph->find(decode_task); 794 internal::GraphNode::Map::iterator decode_it = graph->find(decode_task);
sohanjg 2014/01/21 09:41:08 nit: And typedef internal::GraphNode::Map too ?
sohanjg 2014/01/21 09:41:08 nit: And typedef internal::GraphNode::Map too ?
reveman 2014/01/21 15:37:48 what are you suggesting we typedef to? I like to k
720 if (decode_it != graph->end()) { 795 if (decode_it != graph->end()) {
721 internal::GraphNode* decode_node = decode_it->second; 796 internal::GraphNode* decode_node = decode_it->second;
722 decode_node->add_dependent(raster_node); 797 decode_node->add_dependent(raster_node);
723 continue; 798 continue;
724 } 799 }
725 800
726 internal::GraphNode* decode_node = CreateGraphNodeForTask( 801 internal::GraphNode* decode_node = CreateGraphNodeForTask(
727 decode_task, priority, graph); 802 decode_task, priority, graph);
728 decode_node->add_dependent(raster_node); 803 decode_node->add_dependent(raster_node);
729 } 804 }
730 805
731 return raster_node; 806 return raster_node;
732 } 807 }
733 808
734 } // namespace cc 809 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698