Chromium Code Reviews| Index: cc/resources/raster_worker_pool.cc |
| diff --git a/cc/resources/raster_worker_pool.cc b/cc/resources/raster_worker_pool.cc |
| index 84a8e8a6209f948c02e888ded33de9fbefd4737f..7ca38ea6d40fcbe5ed6887d33deaac88d814145f 100644 |
| --- a/cc/resources/raster_worker_pool.cc |
| +++ b/cc/resources/raster_worker_pool.cc |
| @@ -225,32 +225,6 @@ class ImageDecodeWorkerPoolTaskImpl : public internal::WorkerPoolTask { |
| DISALLOW_COPY_AND_ASSIGN(ImageDecodeWorkerPoolTaskImpl); |
| }; |
| -class RasterFinishedWorkerPoolTaskImpl : public internal::WorkerPoolTask { |
| - public: |
| - RasterFinishedWorkerPoolTaskImpl( |
| - base::MessageLoopProxy* origin_loop, |
| - const base::Closure& on_raster_finished_callback) |
| - : origin_loop_(origin_loop), |
| - on_raster_finished_callback_(on_raster_finished_callback) { |
| - } |
| - |
| - // Overridden from internal::WorkerPoolTask: |
| - virtual void RunOnWorkerThread(unsigned thread_index) OVERRIDE { |
| - origin_loop_->PostTask(FROM_HERE, on_raster_finished_callback_); |
| - } |
| - virtual void CompleteOnOriginThread() OVERRIDE {} |
| - |
| - private: |
| - virtual ~RasterFinishedWorkerPoolTaskImpl() {} |
| - |
| - scoped_refptr<base::MessageLoopProxy> origin_loop_; |
| - const base::Closure on_raster_finished_callback_; |
| - |
| - DISALLOW_COPY_AND_ASSIGN(RasterFinishedWorkerPoolTaskImpl); |
| -}; |
| - |
| -void Noop() {} |
| - |
| const char* kWorkerThreadNamePrefix = "CompositorRaster"; |
| } // namespace |
| @@ -362,56 +336,6 @@ void RasterWorkerPool::RasterTask::Reset() { |
| RasterWorkerPool::RasterTask::~RasterTask() { |
| } |
| -RasterWorkerPool::RasterTaskGraph::RasterTaskGraph() |
| - : raster_finished_node_(new GraphNode), |
| - next_priority_(1u) { |
| -} |
| - |
| -RasterWorkerPool::RasterTaskGraph::~RasterTaskGraph() { |
| -} |
| - |
| -void RasterWorkerPool::RasterTaskGraph::InsertRasterTask( |
| - internal::WorkerPoolTask* raster_task, |
| - const TaskVector& decode_tasks) { |
| - DCHECK(!raster_task->HasCompleted()); |
| - DCHECK(graph_.find(raster_task) == graph_.end()); |
| - |
| - scoped_ptr<GraphNode> raster_node(new GraphNode); |
| - raster_node->set_task(raster_task); |
| - raster_node->set_priority(next_priority_++); |
| - |
| - // Insert image decode tasks. |
| - for (TaskVector::const_iterator it = decode_tasks.begin(); |
| - it != decode_tasks.end(); ++it) { |
| - internal::WorkerPoolTask* decode_task = it->get(); |
| - |
| - // Skip if already decoded. |
| - if (decode_task->HasCompleted()) |
| - continue; |
| - |
| - raster_node->add_dependency(); |
| - |
| - // Check if decode task already exists in graph. |
| - GraphNodeMap::iterator decode_it = graph_.find(decode_task); |
| - if (decode_it != graph_.end()) { |
| - GraphNode* decode_node = decode_it->second; |
| - decode_node->add_dependent(raster_node.get()); |
| - continue; |
| - } |
| - |
| - scoped_ptr<GraphNode> decode_node(new GraphNode); |
| - decode_node->set_task(decode_task); |
| - decode_node->set_priority(next_priority_++); |
| - decode_node->add_dependent(raster_node.get()); |
| - graph_.set(decode_task, decode_node.Pass()); |
| - } |
| - |
| - raster_finished_node_->add_dependency(); |
| - raster_node->add_dependent(raster_finished_node_.get()); |
| - |
| - graph_.set(raster_task, raster_node.Pass()); |
| -} |
| - |
| // static |
| RasterWorkerPool::RasterTask RasterWorkerPool::CreateRasterTask( |
| const Resource* resource, |
| @@ -452,9 +376,7 @@ RasterWorkerPool::RasterWorkerPool(ResourceProvider* resource_provider, |
| size_t num_threads) |
| : WorkerPool(num_threads, kWorkerThreadNamePrefix), |
| client_(NULL), |
| - resource_provider_(resource_provider), |
| - weak_ptr_factory_(this), |
| - schedule_raster_tasks_count_(0) { |
| + resource_provider_(resource_provider) { |
| } |
| RasterWorkerPool::~RasterWorkerPool() { |
| @@ -465,12 +387,10 @@ void RasterWorkerPool::SetClient(RasterWorkerPoolClient* client) { |
| } |
| void RasterWorkerPool::Shutdown() { |
| + raster_tasks_.clear(); |
| TaskGraph empty; |
| SetTaskGraph(&empty); |
| WorkerPool::Shutdown(); |
| - raster_tasks_.clear(); |
| - // Cancel any pending OnRasterFinished callback. |
| - weak_ptr_factory_.InvalidateWeakPtrs(); |
| } |
| void RasterWorkerPool::SetRasterTasks(RasterTask::Queue* queue) { |
| @@ -479,33 +399,6 @@ void RasterWorkerPool::SetRasterTasks(RasterTask::Queue* queue) { |
| queue->tasks_required_for_activation_); |
| } |
| -void RasterWorkerPool::SetRasterTaskGraph(RasterTaskGraph* graph) { |
| - scoped_ptr<GraphNode> raster_finished_node( |
| - graph->raster_finished_node_.Pass()); |
| - TaskGraph new_graph; |
| - new_graph.swap(graph->graph_); |
| - |
| - if (new_graph.empty()) { |
| - SetTaskGraph(&new_graph); |
| - raster_finished_task_ = NULL; |
| - return; |
| - } |
| - |
| - ++schedule_raster_tasks_count_; |
| - |
| - scoped_refptr<internal::WorkerPoolTask> new_raster_finished_task( |
| - new RasterFinishedWorkerPoolTaskImpl( |
| - base::MessageLoopProxy::current(), |
| - base::Bind(&RasterWorkerPool::OnRasterFinished, |
| - weak_ptr_factory_.GetWeakPtr(), |
| - schedule_raster_tasks_count_))); |
| - raster_finished_node->set_task(new_raster_finished_task.get()); |
| - // Insert "raster finished" task before switching to new graph. |
| - new_graph.set(new_raster_finished_task.get(), raster_finished_node.Pass()); |
| - SetTaskGraph(&new_graph); |
| - raster_finished_task_.swap(new_raster_finished_task); |
| -} |
| - |
| bool RasterWorkerPool::IsRasterTaskRequiredForActivation( |
| internal::RasterWorkerPoolTask* task) const { |
| return |
| @@ -513,14 +406,41 @@ bool RasterWorkerPool::IsRasterTaskRequiredForActivation( |
| raster_tasks_required_for_activation_.end(); |
| } |
| -void RasterWorkerPool::OnRasterFinished(int64 schedule_raster_tasks_count) { |
| - TRACE_EVENT1("cc", "RasterWorkerPool::OnRasterFinished", |
| - "schedule_raster_tasks_count", schedule_raster_tasks_count); |
| - DCHECK_GE(schedule_raster_tasks_count_, schedule_raster_tasks_count); |
| - // Call OnRasterTasksFinished() when we've finished running all raster |
| - // tasks needed since last time SetRasterTaskGraph() was called. |
| - if (schedule_raster_tasks_count_ == schedule_raster_tasks_count) |
| - OnRasterTasksFinished(); |
| +// static |
| +scoped_ptr<WorkerPool::GraphNode> RasterWorkerPool::CreateRasterTaskGraphNode( |
|
vmpstr
2013/06/27 23:31:21
Can this be non-static on TaskGraph?
Something li
reveman
2013/06/28 17:26:07
TaskGraph is just a ScopedPtrHashMap at the moment
|
| + internal::WorkerPoolTask* raster_task, |
| + const TaskVector& decode_tasks, |
| + unsigned priority, |
| + TaskGraph* graph) { |
| + DCHECK(!raster_task->HasCompleted()); |
| + |
| + scoped_ptr<GraphNode> raster_node(new GraphNode(raster_task, priority)); |
| + |
| + // Insert image decode tasks. |
| + for (TaskVector::const_iterator it = decode_tasks.begin(); |
| + it != decode_tasks.end(); ++it) { |
| + internal::WorkerPoolTask* decode_task = it->get(); |
| + |
| + // Skip if already decoded. |
| + if (decode_task->HasCompleted()) |
| + continue; |
| + |
| + raster_node->add_dependency(); |
| + |
| + // Check if decode task already exists in graph. |
| + GraphNodeMap::iterator decode_it = graph->find(decode_task); |
| + if (decode_it != graph->end()) { |
| + GraphNode* decode_node = decode_it->second; |
| + decode_node->add_dependent(raster_node.get()); |
| + continue; |
| + } |
| + |
| + scoped_ptr<GraphNode> decode_node(new GraphNode(decode_task, priority)); |
| + decode_node->add_dependent(raster_node.get()); |
| + graph->set(decode_task, decode_node.Pass()); |
| + } |
| + |
| + return raster_node.Pass(); |
| } |
| } // namespace cc |