Index: cc/resources/gpu_tile_task_worker_pool.cc |
diff --git a/cc/resources/gpu_tile_task_worker_pool.cc b/cc/resources/gpu_tile_task_worker_pool.cc |
index 2cd4edd73d58a2e0223b89efbf356f2d2384fac5..2b49f74d44ad3739ad2d6d46d84a5ab4d3c1fd32 100644 |
--- a/cc/resources/gpu_tile_task_worker_pool.cc |
+++ b/cc/resources/gpu_tile_task_worker_pool.cc |
@@ -76,21 +76,23 @@ class RasterBufferImpl : public RasterBuffer { |
// static |
scoped_ptr<TileTaskWorkerPool> GpuTileTaskWorkerPool::Create( |
base::SequencedTaskRunner* task_runner, |
+ TaskGraphRunner* task_graph_runner, |
ContextProvider* context_provider, |
ResourceProvider* resource_provider, |
bool use_distance_field_text) { |
- return make_scoped_ptr<TileTaskWorkerPool>( |
- new GpuTileTaskWorkerPool(task_runner, context_provider, |
- resource_provider, use_distance_field_text)); |
+ return make_scoped_ptr<TileTaskWorkerPool>(new GpuTileTaskWorkerPool( |
+ task_runner, task_graph_runner, context_provider, resource_provider, |
+ use_distance_field_text)); |
} |
GpuTileTaskWorkerPool::GpuTileTaskWorkerPool( |
base::SequencedTaskRunner* task_runner, |
+ TaskGraphRunner* task_graph_runner, |
ContextProvider* context_provider, |
ResourceProvider* resource_provider, |
bool use_distance_field_text) |
: task_runner_(task_runner), |
- task_graph_runner_(new TaskGraphRunner), |
+ task_graph_runner_(task_graph_runner), |
namespace_token_(task_graph_runner_->GetNamespaceToken()), |
context_provider_(context_provider), |
resource_provider_(resource_provider), |
@@ -172,8 +174,6 @@ void GpuTileTaskWorkerPool::ScheduleTasks(TileTaskQueue* queue) { |
ScheduleTasksOnOriginThread(this, &graph_); |
task_graph_runner_->ScheduleTasks(namespace_token_, &graph_); |
- ScheduleRunTasksOnOriginThread(); |
- |
std::copy(new_task_set_finished_tasks, |
new_task_set_finished_tasks + kNumberOfTaskSets, |
task_set_finished_tasks_); |
@@ -184,15 +184,19 @@ void GpuTileTaskWorkerPool::CheckForCompletedTasks() { |
task_graph_runner_->CollectCompletedTasks(namespace_token_, |
&completed_tasks_); |
- for (Task::Vector::const_iterator it = completed_tasks_.begin(); |
- it != completed_tasks_.end(); ++it) { |
- TileTask* task = static_cast<TileTask*>(it->get()); |
+ CompleteTasks(completed_tasks_); |
+ completed_tasks_.clear(); |
+} |
+ |
+void GpuTileTaskWorkerPool::CompleteTasks(const Task::Vector& tasks) { |
+ for (auto& task : tasks) { |
+ RasterTask* raster_task = static_cast<RasterTask*>(task.get()); |
- task->WillComplete(); |
- task->CompleteOnOriginThread(this); |
- task->DidComplete(); |
+ raster_task->WillComplete(); |
+ raster_task->CompleteOnOriginThread(this); |
+ raster_task->DidComplete(); |
- task->RunReplyOnOriginThread(); |
+ raster_task->RunReplyOnOriginThread(); |
} |
completed_tasks_.clear(); |
} |
@@ -215,31 +219,8 @@ void GpuTileTaskWorkerPool::OnTaskSetFinished(TaskSet task_set) { |
DCHECK(tasks_pending_[task_set]); |
tasks_pending_[task_set] = false; |
- client_->DidFinishRunningTileTasks(task_set); |
-} |
- |
-void GpuTileTaskWorkerPool::ScheduleRunTasksOnOriginThread() { |
- if (run_tasks_on_origin_thread_pending_) |
- return; |
- task_runner_->PostTask( |
- FROM_HERE, base::Bind(&GpuTileTaskWorkerPool::RunTasksOnOriginThread, |
- weak_ptr_factory_.GetWeakPtr())); |
- run_tasks_on_origin_thread_pending_ = true; |
-} |
- |
-void GpuTileTaskWorkerPool::RunTasksOnOriginThread() { |
- TRACE_EVENT0("cc", "GpuTileTaskWorkerPool::RunTasksOnOriginThread"); |
- |
- DCHECK(run_tasks_on_origin_thread_pending_); |
- run_tasks_on_origin_thread_pending_ = false; |
- |
- ScopedGpuRaster gpu_raster(context_provider_); |
- task_graph_runner_->RunUntilIdle(); |
- |
- // Draw each all of the pictures that were collected. This will also clear |
- // the pictures and canvases added to |multi_picture_draw_| |
- multi_picture_draw_.draw(); |
+ client_->DidFinishRunningTileTasks(task_set); |
} |
} // namespace cc |