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

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

Issue 140333006: cc: Move internal::Task::did_schedule_ to internal::WorkerPoolTask. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: cleanup Created 6 years, 10 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/lazy_instance.h"
10 #include "base/metrics/histogram.h" 10 #include "base/metrics/histogram.h"
(...skipping 438 matching lines...) Expand 10 before | Expand all | Expand 10 after
449 LAZY_INSTANCE_INITIALIZER; 449 LAZY_INSTANCE_INITIALIZER;
450 450
451 const int kDefaultNumRasterThreads = 1; 451 const int kDefaultNumRasterThreads = 1;
452 452
453 int g_num_raster_threads = 0; 453 int g_num_raster_threads = 0;
454 454
455 } // namespace 455 } // namespace
456 456
457 namespace internal { 457 namespace internal {
458 458
459 WorkerPoolTask::WorkerPoolTask() : did_complete_(false) {} 459 WorkerPoolTask::WorkerPoolTask() : did_schedule_(false), did_complete_(false) {}
460 460
461 WorkerPoolTask::~WorkerPoolTask() { 461 WorkerPoolTask::~WorkerPoolTask() {
462 DCHECK_EQ(did_schedule_, did_complete_); 462 DCHECK_EQ(did_schedule_, did_complete_);
463 DCHECK(!did_run_ || did_complete_); 463 DCHECK(!did_run_ || did_complete_);
464 } 464 }
465 465
466 void WorkerPoolTask::WillSchedule() {}
467
468 void WorkerPoolTask::DidSchedule() {
469 did_schedule_ = true;
470 did_complete_ = false;
471 }
472
473 bool WorkerPoolTask::HasBeenScheduled() const { return did_schedule_; }
474
466 void WorkerPoolTask::WillComplete() { DCHECK(!did_complete_); } 475 void WorkerPoolTask::WillComplete() { DCHECK(!did_complete_); }
467 476
468 void WorkerPoolTask::DidComplete() { 477 void WorkerPoolTask::DidComplete() {
469 DCHECK(did_schedule_); 478 DCHECK(did_schedule_);
470 DCHECK(!did_complete_); 479 DCHECK(!did_complete_);
471 did_complete_ = true; 480 did_complete_ = true;
472 } 481 }
473 482
474 bool WorkerPoolTask::HasCompleted() const { return did_complete_; } 483 bool WorkerPoolTask::HasCompleted() const { return did_complete_; }
475 484
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
613 bool RasterWorkerPool::IsRasterTaskRequiredForActivation( 622 bool RasterWorkerPool::IsRasterTaskRequiredForActivation(
614 internal::RasterWorkerPoolTask* task) const { 623 internal::RasterWorkerPoolTask* task) const {
615 return raster_tasks_required_for_activation_.find(task) != 624 return raster_tasks_required_for_activation_.find(task) !=
616 raster_tasks_required_for_activation_.end(); 625 raster_tasks_required_for_activation_.end();
617 } 626 }
618 627
619 void RasterWorkerPool::SetTaskGraph(TaskGraph* graph) { 628 void RasterWorkerPool::SetTaskGraph(TaskGraph* graph) {
620 TRACE_EVENT1( 629 TRACE_EVENT1(
621 "cc", "RasterWorkerPool::SetTaskGraph", "num_tasks", graph->size()); 630 "cc", "RasterWorkerPool::SetTaskGraph", "num_tasks", graph->size());
622 631
632 for (internal::GraphNode::Map::iterator it = graph->begin();
633 it != graph->end();
634 ++it) {
635 internal::WorkerPoolTask* task =
vmpstr 2014/02/05 16:56:23 Can you do a DCHECK here to ensure that this task
reveman 2014/02/05 18:00:00 The task might have finished running. We can't kno
vmpstr 2014/02/05 18:07:42 I think that makes sense. From the task perspectiv
reveman 2014/02/05 19:52:42 Take a look at latest patch.
636 static_cast<internal::WorkerPoolTask*>(it->first);
637
638 task->WillSchedule();
639 task->ScheduleOnOriginThread(this);
640 task->DidSchedule();
641 }
642
623 g_task_graph_runner.Pointer()->SetTaskGraph(namespace_token_, graph); 643 g_task_graph_runner.Pointer()->SetTaskGraph(namespace_token_, graph);
624 } 644 }
625 645
626 void RasterWorkerPool::CollectCompletedWorkerPoolTasks( 646 void RasterWorkerPool::CollectCompletedWorkerPoolTasks(
627 internal::Task::Vector* completed_tasks) { 647 internal::Task::Vector* completed_tasks) {
628 g_task_graph_runner.Pointer()->CollectCompletedTasks(namespace_token_, 648 g_task_graph_runner.Pointer()->CollectCompletedTasks(namespace_token_,
629 completed_tasks); 649 completed_tasks);
630 } 650 }
631 651
632 void RasterWorkerPool::RunGpuRasterTasks(const RasterTaskVector& tasks) { 652 void RasterWorkerPool::RunGpuRasterTasks(const RasterTaskVector& tasks) {
633 if (tasks.empty()) 653 if (tasks.empty())
634 return; 654 return;
635 655
636 GrContext* gr_context = context_provider_->GrContext(); 656 GrContext* gr_context = context_provider_->GrContext();
637 // TODO(alokp): Implement TestContextProvider::GrContext(). 657 // TODO(alokp): Implement TestContextProvider::GrContext().
638 if (gr_context) 658 if (gr_context)
639 gr_context->resetContext(); 659 gr_context->resetContext();
640 660
641 for (RasterTaskVector::const_iterator it = tasks.begin(); it != tasks.end(); 661 for (RasterTaskVector::const_iterator it = tasks.begin(); it != tasks.end();
642 ++it) { 662 ++it) {
643 internal::RasterWorkerPoolTask* task = it->get(); 663 internal::RasterWorkerPoolTask* task = it->get();
644 DCHECK(task->use_gpu_rasterization()); 664 DCHECK(task->use_gpu_rasterization());
645 665
666 task->WillSchedule();
vmpstr 2014/02/05 16:56:23 Does this also need a ScheduleOnOriginThread? Ther
reveman 2014/02/05 18:00:00 I agree. Did the same for CompleteOnOriginThread()
vmpstr 2014/02/05 18:07:42 Thanks! I think it looks nice now (ie symmetrical
646 task->DidSchedule(); 667 task->DidSchedule();
647 task->WillRun(); 668 task->WillRun();
648 task->RunOnOriginThread(resource_provider_, context_provider_); 669 task->RunOnOriginThread(resource_provider_, context_provider_);
649 task->DidRun(); 670 task->DidRun();
650 task->WillComplete(); 671 task->WillComplete();
651 task->DidComplete(); 672 task->DidComplete();
652 673
653 completed_gpu_raster_tasks_.push_back(task); 674 completed_gpu_raster_tasks_.push_back(task);
654 } 675 }
655 676
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
726 graph->set(task, make_scoped_ptr(node)); 747 graph->set(task, make_scoped_ptr(node));
727 return node; 748 return node;
728 } 749 }
729 750
730 // static 751 // static
731 internal::GraphNode* RasterWorkerPool::CreateGraphNodeForRasterTask( 752 internal::GraphNode* RasterWorkerPool::CreateGraphNodeForRasterTask(
732 internal::WorkerPoolTask* raster_task, 753 internal::WorkerPoolTask* raster_task,
733 const internal::Task::Vector& decode_tasks, 754 const internal::Task::Vector& decode_tasks,
734 unsigned priority, 755 unsigned priority,
735 TaskGraph* graph) { 756 TaskGraph* graph) {
736 DCHECK(!raster_task->HasCompleted());
737
738 internal::GraphNode* raster_node = 757 internal::GraphNode* raster_node =
739 CreateGraphNodeForTask(raster_task, priority, graph); 758 CreateGraphNodeForTask(raster_task, priority, graph);
740 759
741 // Insert image decode tasks. 760 // Insert image decode tasks.
742 for (internal::Task::Vector::const_iterator it = decode_tasks.begin(); 761 for (internal::Task::Vector::const_iterator it = decode_tasks.begin();
743 it != decode_tasks.end(); 762 it != decode_tasks.end();
744 ++it) { 763 ++it) {
745 internal::WorkerPoolTask* decode_task = 764 internal::WorkerPoolTask* decode_task =
746 static_cast<internal::WorkerPoolTask*>(it->get()); 765 static_cast<internal::WorkerPoolTask*>(it->get());
747 766
(...skipping 13 matching lines...) Expand all
761 780
762 internal::GraphNode* decode_node = 781 internal::GraphNode* decode_node =
763 CreateGraphNodeForTask(decode_task, priority, graph); 782 CreateGraphNodeForTask(decode_task, priority, graph);
764 decode_node->add_dependent(raster_node); 783 decode_node->add_dependent(raster_node);
765 } 784 }
766 785
767 return raster_node; 786 return raster_node;
768 } 787 }
769 788
770 } // namespace cc 789 } // 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