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 "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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |