| 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
|
|
|