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 0da81e247c64a1059e5587cb1d83651ef78c266d..b43bd4edfd9e7fb2abec405e5c8d03ae01aecd7b 100644 |
| --- a/cc/resources/raster_worker_pool.cc |
| +++ b/cc/resources/raster_worker_pool.cc |
| @@ -456,13 +456,22 @@ int g_num_raster_threads = 0; |
| namespace internal { |
| -WorkerPoolTask::WorkerPoolTask() : did_complete_(false) {} |
| +WorkerPoolTask::WorkerPoolTask() : did_schedule_(false), did_complete_(false) {} |
| WorkerPoolTask::~WorkerPoolTask() { |
| DCHECK_EQ(did_schedule_, did_complete_); |
| DCHECK(!did_run_ || did_complete_); |
| } |
| +void WorkerPoolTask::WillSchedule() {} |
| + |
| +void WorkerPoolTask::DidSchedule() { |
| + did_schedule_ = true; |
| + did_complete_ = false; |
| +} |
| + |
| +bool WorkerPoolTask::HasBeenScheduled() const { return did_schedule_; } |
| + |
| void WorkerPoolTask::WillComplete() { DCHECK(!did_complete_); } |
| void WorkerPoolTask::DidComplete() { |
| @@ -620,6 +629,17 @@ void RasterWorkerPool::SetTaskGraph(TaskGraph* graph) { |
| TRACE_EVENT1( |
| "cc", "RasterWorkerPool::SetTaskGraph", "num_tasks", graph->size()); |
| + for (internal::GraphNode::Map::iterator it = graph->begin(); |
| + it != graph->end(); |
| + ++it) { |
| + internal::WorkerPoolTask* task = |
|
vmpstr
2014/02/05 16:56:23
Can you do a DCHECK here to ensure that this task
reveman
2014/02/05 18:00:00
The task might have finished running. We can't kno
vmpstr
2014/02/05 18:07:42
I think that makes sense. From the task perspectiv
reveman
2014/02/05 19:52:42
Take a look at latest patch.
|
| + static_cast<internal::WorkerPoolTask*>(it->first); |
| + |
| + task->WillSchedule(); |
| + task->ScheduleOnOriginThread(this); |
| + task->DidSchedule(); |
| + } |
| + |
| g_task_graph_runner.Pointer()->SetTaskGraph(namespace_token_, graph); |
| } |
| @@ -643,6 +663,7 @@ void RasterWorkerPool::RunGpuRasterTasks(const RasterTaskVector& tasks) { |
| internal::RasterWorkerPoolTask* task = it->get(); |
| DCHECK(task->use_gpu_rasterization()); |
| + task->WillSchedule(); |
|
vmpstr
2014/02/05 16:56:23
Does this also need a ScheduleOnOriginThread? Ther
reveman
2014/02/05 18:00:00
I agree. Did the same for CompleteOnOriginThread()
vmpstr
2014/02/05 18:07:42
Thanks! I think it looks nice now (ie symmetrical
|
| task->DidSchedule(); |
| task->WillRun(); |
| task->RunOnOriginThread(resource_provider_, context_provider_); |
| @@ -733,8 +754,6 @@ internal::GraphNode* RasterWorkerPool::CreateGraphNodeForRasterTask( |
| const internal::Task::Vector& decode_tasks, |
| unsigned priority, |
| TaskGraph* graph) { |
| - DCHECK(!raster_task->HasCompleted()); |
| - |
| internal::GraphNode* raster_node = |
| CreateGraphNodeForTask(raster_task, priority, graph); |