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

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: fix cc_unittests 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 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
172 // TODO(alokp): For now run-on-worker-thread implies software rasterization. 172 // TODO(alokp): For now run-on-worker-thread implies software rasterization.
173 DCHECK(!use_gpu_rasterization()); 173 DCHECK(!use_gpu_rasterization());
174 RunAnalysisOnThread(thread_index); 174 RunAnalysisOnThread(thread_index);
175 if (buffer_ && !analysis_.is_solid_color) 175 if (buffer_ && !analysis_.is_solid_color)
176 RunRasterOnThread(thread_index, buffer_, resource()->size(), stride_); 176 RunRasterOnThread(thread_index, buffer_, resource()->size(), stride_);
177 } 177 }
178 178
179 // Overridden from internal::WorkerPoolTask: 179 // Overridden from internal::WorkerPoolTask:
180 virtual void ScheduleOnOriginThread(internal::WorkerPoolTaskClient* client) 180 virtual void ScheduleOnOriginThread(internal::WorkerPoolTaskClient* client)
181 OVERRIDE { 181 OVERRIDE {
182 DCHECK(!use_gpu_rasterization()); 182 if (use_gpu_rasterization())
183 if (buffer_)
184 return; 183 return;
184 DCHECK(!buffer_);
185 buffer_ = client->AcquireBufferForRaster(this, &stride_); 185 buffer_ = client->AcquireBufferForRaster(this, &stride_);
186 } 186 }
187 virtual void CompleteOnOriginThread(internal::WorkerPoolTaskClient* client) 187 virtual void CompleteOnOriginThread(internal::WorkerPoolTaskClient* client)
188 OVERRIDE { 188 OVERRIDE {
189 DCHECK(!use_gpu_rasterization()); 189 if (use_gpu_rasterization())
190 return;
190 buffer_ = NULL; 191 buffer_ = NULL;
191 client->OnRasterCompleted(this, analysis_); 192 client->OnRasterCompleted(this, analysis_);
192 } 193 }
193 virtual void RunReplyOnOriginThread() OVERRIDE { 194 virtual void RunReplyOnOriginThread() OVERRIDE {
194 DCHECK(!buffer_); 195 DCHECK(!buffer_);
195 reply_.Run(analysis_, !HasFinishedRunning()); 196 reply_.Run(analysis_, !HasFinishedRunning());
196 } 197 }
197 198
198 // Overridden from internal::RasterWorkerPoolTask: 199 // Overridden from internal::RasterWorkerPoolTask:
199 virtual void RunOnOriginThread(ResourceProvider* resource_provider, 200 virtual void RunOnOriginThread(ResourceProvider* resource_provider,
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after
451 LAZY_INSTANCE_INITIALIZER; 452 LAZY_INSTANCE_INITIALIZER;
452 453
453 const int kDefaultNumRasterThreads = 1; 454 const int kDefaultNumRasterThreads = 1;
454 455
455 int g_num_raster_threads = 0; 456 int g_num_raster_threads = 0;
456 457
457 } // namespace 458 } // namespace
458 459
459 namespace internal { 460 namespace internal {
460 461
461 WorkerPoolTask::WorkerPoolTask() : did_complete_(false) {} 462 WorkerPoolTask::WorkerPoolTask() : did_schedule_(false), did_complete_(false) {}
462 463
463 WorkerPoolTask::~WorkerPoolTask() { 464 WorkerPoolTask::~WorkerPoolTask() {
464 DCHECK_EQ(did_schedule_, did_complete_); 465 DCHECK(!did_schedule_);
465 DCHECK(!did_run_ || did_complete_); 466 DCHECK(!did_run_ || did_complete_);
466 } 467 }
467 468
469 void WorkerPoolTask::WillSchedule() { DCHECK(!did_schedule_); }
470
471 void WorkerPoolTask::DidSchedule() {
472 did_schedule_ = true;
473 did_complete_ = false;
474 }
475
476 bool WorkerPoolTask::HasBeenScheduled() const { return did_schedule_; }
477
468 void WorkerPoolTask::WillComplete() { DCHECK(!did_complete_); } 478 void WorkerPoolTask::WillComplete() { DCHECK(!did_complete_); }
469 479
470 void WorkerPoolTask::DidComplete() { 480 void WorkerPoolTask::DidComplete() {
471 DCHECK(did_schedule_); 481 DCHECK(did_schedule_);
472 DCHECK(!did_complete_); 482 DCHECK(!did_complete_);
483 did_schedule_ = false;
473 did_complete_ = true; 484 did_complete_ = true;
474 } 485 }
475 486
476 bool WorkerPoolTask::HasCompleted() const { return did_complete_; } 487 bool WorkerPoolTask::HasCompleted() const { return did_complete_; }
477 488
478 RasterWorkerPoolTask::RasterWorkerPoolTask(const Resource* resource, 489 RasterWorkerPoolTask::RasterWorkerPoolTask(const Resource* resource,
479 internal::Task::Vector* dependencies, 490 internal::Task::Vector* dependencies,
480 bool use_gpu_rasterization) 491 bool use_gpu_rasterization)
481 : resource_(resource), use_gpu_rasterization_(use_gpu_rasterization) { 492 : resource_(resource), use_gpu_rasterization_(use_gpu_rasterization) {
482 dependencies_.swap(*dependencies); 493 dependencies_.swap(*dependencies);
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
615 bool RasterWorkerPool::IsRasterTaskRequiredForActivation( 626 bool RasterWorkerPool::IsRasterTaskRequiredForActivation(
616 internal::RasterWorkerPoolTask* task) const { 627 internal::RasterWorkerPoolTask* task) const {
617 return raster_tasks_required_for_activation_.find(task) != 628 return raster_tasks_required_for_activation_.find(task) !=
618 raster_tasks_required_for_activation_.end(); 629 raster_tasks_required_for_activation_.end();
619 } 630 }
620 631
621 void RasterWorkerPool::SetTaskGraph(TaskGraph* graph) { 632 void RasterWorkerPool::SetTaskGraph(TaskGraph* graph) {
622 TRACE_EVENT1( 633 TRACE_EVENT1(
623 "cc", "RasterWorkerPool::SetTaskGraph", "num_tasks", graph->size()); 634 "cc", "RasterWorkerPool::SetTaskGraph", "num_tasks", graph->size());
624 635
636 for (internal::GraphNode::Map::iterator it = graph->begin();
637 it != graph->end();
638 ++it) {
639 internal::WorkerPoolTask* task =
640 static_cast<internal::WorkerPoolTask*>(it->first);
641
642 if (!task->HasBeenScheduled()) {
643 task->WillSchedule();
644 task->ScheduleOnOriginThread(this);
645 task->DidSchedule();
646 }
647 }
648
625 g_task_graph_runner.Pointer()->SetTaskGraph(namespace_token_, graph); 649 g_task_graph_runner.Pointer()->SetTaskGraph(namespace_token_, graph);
626 } 650 }
627 651
628 void RasterWorkerPool::CollectCompletedWorkerPoolTasks( 652 void RasterWorkerPool::CollectCompletedWorkerPoolTasks(
629 internal::Task::Vector* completed_tasks) { 653 internal::Task::Vector* completed_tasks) {
630 g_task_graph_runner.Pointer()->CollectCompletedTasks(namespace_token_, 654 g_task_graph_runner.Pointer()->CollectCompletedTasks(namespace_token_,
631 completed_tasks); 655 completed_tasks);
632 } 656 }
633 657
634 void RasterWorkerPool::RunGpuRasterTasks(const RasterTaskVector& tasks) { 658 void RasterWorkerPool::RunGpuRasterTasks(const RasterTaskVector& tasks) {
635 if (tasks.empty()) 659 if (tasks.empty())
636 return; 660 return;
637 661
638 GrContext* gr_context = context_provider_->GrContext(); 662 GrContext* gr_context = context_provider_->GrContext();
639 // TODO(alokp): Implement TestContextProvider::GrContext(). 663 // TODO(alokp): Implement TestContextProvider::GrContext().
640 if (gr_context) 664 if (gr_context)
641 gr_context->resetContext(); 665 gr_context->resetContext();
642 666
643 for (RasterTaskVector::const_iterator it = tasks.begin(); it != tasks.end(); 667 for (RasterTaskVector::const_iterator it = tasks.begin(); it != tasks.end();
644 ++it) { 668 ++it) {
645 internal::RasterWorkerPoolTask* task = it->get(); 669 internal::RasterWorkerPoolTask* task = it->get();
646 DCHECK(task->use_gpu_rasterization()); 670 DCHECK(task->use_gpu_rasterization());
647 671
672 task->WillSchedule();
673 task->ScheduleOnOriginThread(this);
648 task->DidSchedule(); 674 task->DidSchedule();
675
649 task->WillRun(); 676 task->WillRun();
650 task->RunOnOriginThread(resource_provider_, context_provider_); 677 task->RunOnOriginThread(resource_provider_, context_provider_);
651 task->DidRun(); 678 task->DidRun();
679
652 task->WillComplete(); 680 task->WillComplete();
681 task->CompleteOnOriginThread(this);
653 task->DidComplete(); 682 task->DidComplete();
654 683
655 completed_gpu_raster_tasks_.push_back(task); 684 completed_gpu_raster_tasks_.push_back(task);
656 } 685 }
657 686
658 // TODO(alokp): Implement TestContextProvider::GrContext(). 687 // TODO(alokp): Implement TestContextProvider::GrContext().
659 if (gr_context) 688 if (gr_context)
660 gr_context->flush(); 689 gr_context->flush();
661 } 690 }
662 691
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
728 graph->set(task, make_scoped_ptr(node)); 757 graph->set(task, make_scoped_ptr(node));
729 return node; 758 return node;
730 } 759 }
731 760
732 // static 761 // static
733 internal::GraphNode* RasterWorkerPool::CreateGraphNodeForRasterTask( 762 internal::GraphNode* RasterWorkerPool::CreateGraphNodeForRasterTask(
734 internal::WorkerPoolTask* raster_task, 763 internal::WorkerPoolTask* raster_task,
735 const internal::Task::Vector& decode_tasks, 764 const internal::Task::Vector& decode_tasks,
736 unsigned priority, 765 unsigned priority,
737 TaskGraph* graph) { 766 TaskGraph* graph) {
738 DCHECK(!raster_task->HasCompleted());
739
740 internal::GraphNode* raster_node = 767 internal::GraphNode* raster_node =
741 CreateGraphNodeForTask(raster_task, priority, graph); 768 CreateGraphNodeForTask(raster_task, priority, graph);
742 769
743 // Insert image decode tasks. 770 // Insert image decode tasks.
744 for (internal::Task::Vector::const_iterator it = decode_tasks.begin(); 771 for (internal::Task::Vector::const_iterator it = decode_tasks.begin();
745 it != decode_tasks.end(); 772 it != decode_tasks.end();
746 ++it) { 773 ++it) {
747 internal::WorkerPoolTask* decode_task = 774 internal::WorkerPoolTask* decode_task =
748 static_cast<internal::WorkerPoolTask*>(it->get()); 775 static_cast<internal::WorkerPoolTask*>(it->get());
749 776
(...skipping 13 matching lines...) Expand all
763 790
764 internal::GraphNode* decode_node = 791 internal::GraphNode* decode_node =
765 CreateGraphNodeForTask(decode_task, priority, graph); 792 CreateGraphNodeForTask(decode_task, priority, graph);
766 decode_node->add_dependent(raster_node); 793 decode_node->add_dependent(raster_node);
767 } 794 }
768 795
769 return raster_node; 796 return raster_node;
770 } 797 }
771 798
772 } // namespace cc 799 } // 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