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 |