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