Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(474)

Side by Side Diff: cc/resources/image_raster_worker_pool.cc

Issue 17351017: Re-land: cc: Add raster finished signals to RasterWorkerPool. (Closed) Base URL: http://git.chromium.org/chromium/src.git@new-graph-build
Patch Set: vmpstr's review and a number of other fixes Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/resources/image_raster_worker_pool.h" 5 #include "cc/resources/image_raster_worker_pool.h"
6 6
7 #include "base/debug/trace_event.h" 7 #include "base/debug/trace_event.h"
8 #include "cc/resources/resource.h" 8 #include "cc/resources/resource.h"
9 #include "third_party/skia/include/core/SkDevice.h" 9 #include "third_party/skia/include/core/SkDevice.h"
10 10
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 RasterWorkerPool::SetRasterTasks(queue); 72 RasterWorkerPool::SetRasterTasks(queue);
73 73
74 RasterTaskGraph graph; 74 RasterTaskGraph graph;
75 for (RasterTaskVector::const_iterator it = raster_tasks().begin(); 75 for (RasterTaskVector::const_iterator it = raster_tasks().begin();
76 it != raster_tasks().end(); ++it) { 76 it != raster_tasks().end(); ++it) {
77 internal::RasterWorkerPoolTask* task = it->get(); 77 internal::RasterWorkerPoolTask* task = it->get();
78 78
79 TaskMap::iterator image_it = image_tasks_.find(task); 79 TaskMap::iterator image_it = image_tasks_.find(task);
80 if (image_it != image_tasks_.end()) { 80 if (image_it != image_tasks_.end()) {
81 internal::WorkerPoolTask* image_task = image_it->second.get(); 81 internal::WorkerPoolTask* image_task = image_it->second.get();
82 graph.InsertRasterTask(image_task, task->dependencies()); 82 graph.InsertRasterTask(image_task,
83 task->dependencies(),
84 IsRasterTaskRequiredForActivation(task));
83 continue; 85 continue;
84 } 86 }
85 87
86 // Acquire image for resource. 88 // Acquire image for resource.
87 resource_provider()->AcquireImage(task->resource()->id()); 89 resource_provider()->AcquireImage(task->resource()->id());
88 90
89 // Map image for raster. 91 // Map image for raster.
90 uint8* buffer = resource_provider()->MapImage(task->resource()->id()); 92 uint8* buffer = resource_provider()->MapImage(task->resource()->id());
91 int stride = resource_provider()->GetImageStride(task->resource()->id()); 93 int stride = resource_provider()->GetImageStride(task->resource()->id());
92 94
93 scoped_refptr<internal::WorkerPoolTask> new_image_task( 95 scoped_refptr<internal::WorkerPoolTask> new_image_task(
94 new ImageWorkerPoolTaskImpl( 96 new ImageWorkerPoolTaskImpl(
95 task, 97 task,
96 buffer, 98 buffer,
97 stride, 99 stride,
98 base::Bind(&ImageRasterWorkerPool::OnRasterTaskCompleted, 100 base::Bind(&ImageRasterWorkerPool::OnRasterTaskCompleted,
99 base::Unretained(this), 101 base::Unretained(this),
100 make_scoped_refptr(task)))); 102 make_scoped_refptr(task))));
101 image_tasks_[task] = new_image_task; 103 image_tasks_[task] = new_image_task;
102 graph.InsertRasterTask(new_image_task.get(), task->dependencies()); 104 graph.InsertRasterTask(new_image_task.get(),
105 task->dependencies(),
106 IsRasterTaskRequiredForActivation(task));
103 } 107 }
104 108
105 SetRasterTaskGraph(&graph); 109 SetRasterTaskGraph(&graph);
106 } 110 }
107 111
112 void ImageRasterWorkerPool::OnRasterTasksFinished() {
113 client()->DidFinishedRunningTasks();
114 }
115
116 void ImageRasterWorkerPool::OnRasterTasksRequiredForActivationFinished() {
117 client()->DidFinishedRunningTasksRequiredForActivation();
118 }
119
108 void ImageRasterWorkerPool::OnRasterTaskCompleted( 120 void ImageRasterWorkerPool::OnRasterTaskCompleted(
109 scoped_refptr<internal::RasterWorkerPoolTask> task, 121 scoped_refptr<internal::RasterWorkerPoolTask> task,
110 bool was_canceled) { 122 bool was_canceled) {
111 TRACE_EVENT1("cc", "ImageRasterWorkerPool::OnRasterTaskCompleted", 123 TRACE_EVENT1("cc", "ImageRasterWorkerPool::OnRasterTaskCompleted",
112 "was_canceled", was_canceled); 124 "was_canceled", was_canceled);
113 125
114 DCHECK(image_tasks_.find(task.get()) != image_tasks_.end()); 126 DCHECK(image_tasks_.find(task.get()) != image_tasks_.end());
115 127
116 // Balanced with MapImage() call in ScheduleTasks(). 128 // Balanced with MapImage() call in ScheduleTasks().
117 resource_provider()->UnmapImage(task->resource()->id()); 129 resource_provider()->UnmapImage(task->resource()->id());
118 130
119 // Bind image to resource. 131 // Bind image to resource.
120 resource_provider()->BindImage(task->resource()->id()); 132 resource_provider()->BindImage(task->resource()->id());
121 133
122 task->DidRun(was_canceled); 134 task->DidRun(was_canceled);
123 task->DidComplete(); 135 task->DidComplete();
124 task->DispatchCompletionCallback(); 136 task->DispatchCompletionCallback();
125 137
126 image_tasks_.erase(task.get()); 138 image_tasks_.erase(task.get());
127 } 139 }
128 140
129 } // namespace cc 141 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698