OLD | NEW |
---|---|
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/raster_worker_pool.h" | 5 #include "cc/resources/raster_worker_pool.h" |
6 | 6 |
7 #include "base/debug/trace_event_synthetic_delay.h" | 7 #include "base/debug/trace_event_synthetic_delay.h" |
8 #include "base/json/json_writer.h" | 8 #include "base/json/json_writer.h" |
9 #include "base/lazy_instance.h" | 9 #include "base/lazy_instance.h" |
10 #include "base/metrics/histogram.h" | 10 #include "base/metrics/histogram.h" |
11 #include "base/strings/stringprintf.h" | 11 #include "base/strings/stringprintf.h" |
12 #include "base/values.h" | 12 #include "base/values.h" |
13 #include "cc/debug/devtools_instrumentation.h" | 13 #include "cc/debug/devtools_instrumentation.h" |
14 #include "cc/debug/traced_value.h" | 14 #include "cc/debug/traced_value.h" |
15 #include "cc/resources/picture_pile_impl.h" | 15 #include "cc/resources/picture_pile_impl.h" |
16 #include "cc/resources/resource.h" | 16 #include "cc/resources/resource.h" |
17 #include "cc/resources/resource_provider.h" | 17 #include "cc/resources/resource_provider.h" |
18 #include "gpu/command_buffer/client/gles2_interface.h" | 18 #include "gpu/command_buffer/client/gles2_interface.h" |
19 #include "skia/ext/paint_simplifier.h" | 19 #include "skia/ext/paint_simplifier.h" |
20 #include "third_party/skia/include/core/SkBitmap.h" | 20 #include "third_party/skia/include/core/SkBitmap.h" |
21 #include "third_party/skia/include/core/SkPixelRef.h" | 21 #include "third_party/skia/include/core/SkPixelRef.h" |
22 #include "third_party/skia/include/gpu/GrContext.h" | 22 #include "third_party/skia/include/gpu/GrContext.h" |
23 #include "third_party/skia/include/gpu/SkGpuDevice.h" | |
24 | 23 |
25 namespace cc { | 24 namespace cc { |
26 namespace { | 25 namespace { |
27 | 26 |
28 // Subclass of Allocator that takes a suitably allocated pointer and uses | 27 // Subclass of Allocator that takes a suitably allocated pointer and uses |
29 // it as the pixel memory for the bitmap. | 28 // it as the pixel memory for the bitmap. |
30 class IdentityAllocator : public SkBitmap::Allocator { | 29 class IdentityAllocator : public SkBitmap::Allocator { |
31 public: | 30 public: |
32 explicit IdentityAllocator(void* buffer) : buffer_(buffer) {} | 31 explicit IdentityAllocator(void* buffer) : buffer_(buffer) {} |
33 virtual bool allocPixelRef(SkBitmap* dst, SkColorTable*) OVERRIDE { | 32 virtual bool allocPixelRef(SkBitmap* dst, SkColorTable*) OVERRIDE { |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
87 picture_pile_(picture_pile), | 86 picture_pile_(picture_pile), |
88 content_rect_(content_rect), | 87 content_rect_(content_rect), |
89 contents_scale_(contents_scale), | 88 contents_scale_(contents_scale), |
90 raster_mode_(raster_mode), | 89 raster_mode_(raster_mode), |
91 tile_resolution_(tile_resolution), | 90 tile_resolution_(tile_resolution), |
92 layer_id_(layer_id), | 91 layer_id_(layer_id), |
93 tile_id_(tile_id), | 92 tile_id_(tile_id), |
94 source_frame_number_(source_frame_number), | 93 source_frame_number_(source_frame_number), |
95 rendering_stats_(rendering_stats), | 94 rendering_stats_(rendering_stats), |
96 reply_(reply), | 95 reply_(reply), |
97 buffer_(NULL), | 96 canvas_(NULL) {} |
98 stride_(0) {} | |
99 | 97 |
100 void RunAnalysisOnThread(unsigned thread_index) { | 98 void RunAnalysisOnThread(unsigned thread_index) { |
101 TRACE_EVENT1("cc", | 99 TRACE_EVENT1("cc", |
102 "RasterWorkerPoolTaskImpl::RunAnalysisOnThread", | 100 "RasterWorkerPoolTaskImpl::RunAnalysisOnThread", |
103 "data", | 101 "data", |
104 TracedValue::FromValue(DataAsValue().release())); | 102 TracedValue::FromValue(DataAsValue().release())); |
105 | 103 |
106 DCHECK(picture_pile_.get()); | 104 DCHECK(picture_pile_.get()); |
107 DCHECK(rendering_stats_); | 105 DCHECK(rendering_stats_); |
108 | 106 |
109 PicturePileImpl* picture_clone = | 107 PicturePileImpl* picture_clone = |
110 picture_pile_->GetCloneForDrawingOnThread(thread_index); | 108 picture_pile_->GetCloneForDrawingOnThread(thread_index); |
111 | 109 |
112 DCHECK(picture_clone); | 110 DCHECK(picture_clone); |
113 | 111 |
114 picture_clone->AnalyzeInRect( | 112 picture_clone->AnalyzeInRect( |
115 content_rect_, contents_scale_, &analysis_, rendering_stats_); | 113 content_rect_, contents_scale_, &analysis_, rendering_stats_); |
116 | 114 |
117 // Record the solid color prediction. | 115 // Record the solid color prediction. |
118 UMA_HISTOGRAM_BOOLEAN("Renderer4.SolidColorTilesAnalyzed", | 116 UMA_HISTOGRAM_BOOLEAN("Renderer4.SolidColorTilesAnalyzed", |
119 analysis_.is_solid_color); | 117 analysis_.is_solid_color); |
120 | 118 |
121 // Clear the flag if we're not using the estimator. | 119 // Clear the flag if we're not using the estimator. |
122 analysis_.is_solid_color &= kUseColorEstimator; | 120 analysis_.is_solid_color &= kUseColorEstimator; |
123 } | 121 } |
124 | 122 |
125 void RunRasterOnThread(unsigned thread_index, | 123 void RunRasterOnThread(unsigned thread_index) { |
126 void* buffer, | |
127 const gfx::Size& size, | |
128 int stride) { | |
129 TRACE_EVENT2( | 124 TRACE_EVENT2( |
130 "cc", | 125 "cc", |
131 "RasterWorkerPoolTaskImpl::RunRasterOnThread", | 126 "RasterWorkerPoolTaskImpl::RunRasterOnThread", |
132 "data", | 127 "data", |
133 TracedValue::FromValue(DataAsValue().release()), | 128 TracedValue::FromValue(DataAsValue().release()), |
134 "raster_mode", | 129 "raster_mode", |
135 TracedValue::FromValue(RasterModeAsValue(raster_mode_).release())); | 130 TracedValue::FromValue(RasterModeAsValue(raster_mode_).release())); |
136 | 131 |
137 devtools_instrumentation::ScopedLayerTask raster_task( | 132 devtools_instrumentation::ScopedLayerTask raster_task( |
138 devtools_instrumentation::kRasterTask, layer_id_); | 133 devtools_instrumentation::kRasterTask, layer_id_); |
139 | 134 |
140 DCHECK(picture_pile_.get()); | 135 DCHECK(picture_pile_.get()); |
141 DCHECK(buffer); | 136 Raster(picture_pile_->GetCloneForDrawingOnThread(thread_index)); |
142 | |
143 SkBitmap bitmap; | |
144 switch (resource()->format()) { | |
145 case RGBA_4444: | |
146 // Use the default stride if we will eventually convert this | |
147 // bitmap to 4444. | |
148 bitmap.setConfig( | |
149 SkBitmap::kARGB_8888_Config, size.width(), size.height()); | |
150 bitmap.allocPixels(); | |
151 break; | |
152 case RGBA_8888: | |
153 case BGRA_8888: | |
154 bitmap.setConfig( | |
155 SkBitmap::kARGB_8888_Config, size.width(), size.height(), stride); | |
156 bitmap.setPixels(buffer); | |
157 break; | |
158 case LUMINANCE_8: | |
159 case RGB_565: | |
160 case ETC1: | |
161 NOTREACHED(); | |
162 break; | |
163 } | |
164 | |
165 SkBitmapDevice device(bitmap); | |
166 SkCanvas canvas(&device); | |
167 Raster(picture_pile_->GetCloneForDrawingOnThread(thread_index), &canvas); | |
168 ChangeBitmapConfigIfNeeded(bitmap, buffer); | |
169 } | 137 } |
170 | 138 |
171 // Overridden from internal::Task: | 139 // Overridden from internal::Task: |
172 virtual void RunOnWorkerThread(unsigned thread_index) OVERRIDE { | 140 virtual void RunOnWorkerThread(unsigned thread_index) OVERRIDE { |
173 // TODO(alokp): For now run-on-worker-thread implies software rasterization. | 141 // TODO(alokp): For now run-on-worker-thread implies software rasterization. |
174 DCHECK(!use_gpu_rasterization()); | 142 DCHECK(!use_gpu_rasterization()); |
175 RunAnalysisOnThread(thread_index); | 143 RunAnalysisOnThread(thread_index); |
176 if (buffer_ && !analysis_.is_solid_color) | 144 if (canvas_ && !analysis_.is_solid_color) |
177 RunRasterOnThread(thread_index, buffer_, resource()->size(), stride_); | 145 RunRasterOnThread(thread_index); |
178 } | 146 } |
179 | 147 |
180 // Overridden from internal::WorkerPoolTask: | 148 // Overridden from internal::WorkerPoolTask: |
181 virtual void ScheduleOnOriginThread(internal::WorkerPoolTaskClient* client) | 149 virtual void ScheduleOnOriginThread(internal::WorkerPoolTaskClient* client) |
182 OVERRIDE { | 150 OVERRIDE { |
183 if (use_gpu_rasterization()) | 151 DCHECK(!canvas_); |
184 return; | 152 canvas_ = client->AcquireCanvasForRaster(this); |
185 DCHECK(!buffer_); | |
186 buffer_ = client->AcquireBufferForRaster(this, &stride_); | |
187 } | 153 } |
188 virtual void CompleteOnOriginThread(internal::WorkerPoolTaskClient* client) | 154 virtual void CompleteOnOriginThread(internal::WorkerPoolTaskClient* client) |
189 OVERRIDE { | 155 OVERRIDE { |
190 if (use_gpu_rasterization()) | 156 canvas_ = NULL; |
191 return; | |
192 buffer_ = NULL; | |
193 client->OnRasterCompleted(this, analysis_); | 157 client->OnRasterCompleted(this, analysis_); |
194 } | 158 } |
195 virtual void RunReplyOnOriginThread() OVERRIDE { | 159 virtual void RunReplyOnOriginThread() OVERRIDE { |
196 DCHECK(!buffer_); | 160 DCHECK(!canvas_); |
197 reply_.Run(analysis_, !HasFinishedRunning()); | 161 reply_.Run(analysis_, !HasFinishedRunning()); |
198 } | 162 } |
199 | 163 |
200 // Overridden from internal::RasterWorkerPoolTask: | 164 // Overridden from internal::RasterWorkerPoolTask: |
201 virtual void RunOnOriginThread(ResourceProvider* resource_provider, | 165 virtual void RunOnOriginThread(ResourceProvider* resource_provider, |
202 ContextProvider* context_provider) OVERRIDE { | 166 ContextProvider* context_provider) OVERRIDE { |
203 // TODO(alokp): Use a trace macro to push/pop markers. | 167 // TODO(alokp): Use a trace macro to push/pop markers. |
204 // Using push/pop functions directly incurs cost to evaluate function | 168 // Using push/pop functions directly incurs cost to evaluate function |
205 // arguments even when tracing is disabled. | 169 // arguments even when tracing is disabled. |
206 context_provider->ContextGL()->PushGroupMarkerEXT( | 170 context_provider->ContextGL()->PushGroupMarkerEXT( |
207 0, | 171 0, |
208 base::StringPrintf( | 172 base::StringPrintf( |
209 "Raster-%d-%d-%p", source_frame_number_, layer_id_, tile_id_) | 173 "Raster-%d-%d-%p", source_frame_number_, layer_id_, tile_id_) |
210 .c_str()); | 174 .c_str()); |
211 // TODO(alokp): For now run-on-origin-thread implies gpu rasterization. | 175 // TODO(alokp): For now run-on-origin-thread implies gpu rasterization. |
212 DCHECK(use_gpu_rasterization()); | 176 DCHECK(use_gpu_rasterization()); |
213 ResourceProvider::ScopedWriteLockGL lock(resource_provider, | 177 Raster(picture_pile_); |
214 resource()->id()); | |
215 DCHECK_NE(lock.texture_id(), 0u); | |
216 | |
217 GrBackendTextureDesc desc; | |
218 desc.fFlags = kRenderTarget_GrBackendTextureFlag; | |
219 desc.fWidth = content_rect_.width(); | |
220 desc.fHeight = content_rect_.height(); | |
221 desc.fConfig = ToGrFormat(resource()->format()); | |
222 desc.fOrigin = kTopLeft_GrSurfaceOrigin; | |
223 desc.fTextureHandle = lock.texture_id(); | |
224 | |
225 GrContext* gr_context = context_provider->GrContext(); | |
226 skia::RefPtr<GrTexture> texture = | |
227 skia::AdoptRef(gr_context->wrapBackendTexture(desc)); | |
228 skia::RefPtr<SkGpuDevice> device = | |
229 skia::AdoptRef(SkGpuDevice::Create(texture.get())); | |
230 skia::RefPtr<SkCanvas> canvas = skia::AdoptRef(new SkCanvas(device.get())); | |
231 | |
232 Raster(picture_pile_, canvas.get()); | |
233 context_provider->ContextGL()->PopGroupMarkerEXT(); | 178 context_provider->ContextGL()->PopGroupMarkerEXT(); |
234 } | 179 } |
235 | 180 |
236 protected: | 181 protected: |
237 virtual ~RasterWorkerPoolTaskImpl() { DCHECK(!buffer_); } | 182 virtual ~RasterWorkerPoolTaskImpl() { DCHECK(!canvas_); } |
238 | 183 |
239 private: | 184 private: |
240 scoped_ptr<base::Value> DataAsValue() const { | 185 scoped_ptr<base::Value> DataAsValue() const { |
241 scoped_ptr<base::DictionaryValue> res(new base::DictionaryValue()); | 186 scoped_ptr<base::DictionaryValue> res(new base::DictionaryValue()); |
242 res->Set("tile_id", TracedValue::CreateIDRef(tile_id_).release()); | 187 res->Set("tile_id", TracedValue::CreateIDRef(tile_id_).release()); |
243 res->Set("resolution", TileResolutionAsValue(tile_resolution_).release()); | 188 res->Set("resolution", TileResolutionAsValue(tile_resolution_).release()); |
244 res->SetInteger("source_frame_number", source_frame_number_); | 189 res->SetInteger("source_frame_number", source_frame_number_); |
245 res->SetInteger("layer_id", layer_id_); | 190 res->SetInteger("layer_id", layer_id_); |
246 return res.PassAs<base::Value>(); | 191 return res.PassAs<base::Value>(); |
247 } | 192 } |
248 | 193 |
249 static GrPixelConfig ToGrFormat(ResourceFormat format) { | 194 void Raster(PicturePileImpl* picture_pile) { |
250 switch (format) { | |
251 case RGBA_8888: | |
252 return kRGBA_8888_GrPixelConfig; | |
253 case BGRA_8888: | |
254 return kBGRA_8888_GrPixelConfig; | |
255 case RGBA_4444: | |
256 return kRGBA_4444_GrPixelConfig; | |
257 default: | |
258 break; | |
259 } | |
260 DCHECK(false) << "Unsupported resource format."; | |
261 return kSkia8888_GrPixelConfig; | |
262 } | |
263 | |
264 void Raster(PicturePileImpl* picture_pile, SkCanvas* canvas) { | |
265 skia::RefPtr<SkDrawFilter> draw_filter; | 195 skia::RefPtr<SkDrawFilter> draw_filter; |
266 switch (raster_mode_) { | 196 switch (raster_mode_) { |
267 case LOW_QUALITY_RASTER_MODE: | 197 case LOW_QUALITY_RASTER_MODE: |
268 draw_filter = skia::AdoptRef(new skia::PaintSimplifier); | 198 draw_filter = skia::AdoptRef(new skia::PaintSimplifier); |
269 break; | 199 break; |
270 case HIGH_QUALITY_NO_LCD_RASTER_MODE: | 200 case HIGH_QUALITY_NO_LCD_RASTER_MODE: |
271 draw_filter = skia::AdoptRef(new DisableLCDTextFilter); | 201 draw_filter = skia::AdoptRef(new DisableLCDTextFilter); |
272 break; | 202 break; |
273 case HIGH_QUALITY_RASTER_MODE: | 203 case HIGH_QUALITY_RASTER_MODE: |
274 break; | 204 break; |
275 case NUM_RASTER_MODES: | 205 case NUM_RASTER_MODES: |
276 default: | 206 default: |
277 NOTREACHED(); | 207 NOTREACHED(); |
278 } | 208 } |
279 canvas->setDrawFilter(draw_filter.get()); | 209 canvas_->setDrawFilter(draw_filter.get()); |
280 | 210 |
281 base::TimeDelta prev_rasterize_time = | 211 base::TimeDelta prev_rasterize_time = |
282 rendering_stats_->impl_thread_rendering_stats().rasterize_time; | 212 rendering_stats_->impl_thread_rendering_stats().rasterize_time; |
283 | 213 |
284 // Only record rasterization time for highres tiles, because | 214 // Only record rasterization time for highres tiles, because |
285 // lowres tiles are not required for activation and therefore | 215 // lowres tiles are not required for activation and therefore |
286 // introduce noise in the measurement (sometimes they get rasterized | 216 // introduce noise in the measurement (sometimes they get rasterized |
287 // before we draw and sometimes they aren't) | 217 // before we draw and sometimes they aren't) |
288 RenderingStatsInstrumentation* stats = | 218 RenderingStatsInstrumentation* stats = |
289 tile_resolution_ == HIGH_RESOLUTION ? rendering_stats_ : NULL; | 219 tile_resolution_ == HIGH_RESOLUTION ? rendering_stats_ : NULL; |
290 picture_pile->RasterToBitmap(canvas, content_rect_, contents_scale_, stats); | 220 picture_pile->RasterToBitmap( |
221 canvas_, content_rect_, contents_scale_, stats); | |
291 | 222 |
292 if (rendering_stats_->record_rendering_stats()) { | 223 if (rendering_stats_->record_rendering_stats()) { |
293 base::TimeDelta current_rasterize_time = | 224 base::TimeDelta current_rasterize_time = |
294 rendering_stats_->impl_thread_rendering_stats().rasterize_time; | 225 rendering_stats_->impl_thread_rendering_stats().rasterize_time; |
295 HISTOGRAM_CUSTOM_COUNTS( | 226 HISTOGRAM_CUSTOM_COUNTS( |
296 "Renderer4.PictureRasterTimeUS", | 227 "Renderer4.PictureRasterTimeUS", |
297 (current_rasterize_time - prev_rasterize_time).InMicroseconds(), | 228 (current_rasterize_time - prev_rasterize_time).InMicroseconds(), |
298 0, | 229 0, |
299 100000, | 230 100000, |
300 100); | 231 100); |
301 } | 232 } |
302 } | 233 } |
303 | 234 |
304 void ChangeBitmapConfigIfNeeded(const SkBitmap& bitmap, void* buffer) { | |
305 TRACE_EVENT0("cc", "RasterWorkerPoolTaskImpl::ChangeBitmapConfigIfNeeded"); | |
306 SkBitmap::Config config = SkBitmapConfig(resource()->format()); | |
307 if (bitmap.getConfig() != config) { | |
308 SkBitmap bitmap_dest; | |
309 IdentityAllocator allocator(buffer); | |
310 bitmap.copyTo(&bitmap_dest, config, &allocator); | |
311 // TODO(kaanb): The GL pipeline assumes a 4-byte alignment for the | |
312 // bitmap data. This check will be removed once crbug.com/293728 is fixed. | |
313 CHECK_EQ(0u, bitmap_dest.rowBytes() % 4); | |
314 } | |
315 } | |
reveman
2014/02/11 02:00:44
Where does this bitmap conversion code go?
alokp
2014/02/11 07:05:21
It somehow got lost while moving code! Added in Bi
| |
316 | |
317 PicturePileImpl::Analysis analysis_; | 235 PicturePileImpl::Analysis analysis_; |
318 scoped_refptr<PicturePileImpl> picture_pile_; | 236 scoped_refptr<PicturePileImpl> picture_pile_; |
319 gfx::Rect content_rect_; | 237 gfx::Rect content_rect_; |
320 float contents_scale_; | 238 float contents_scale_; |
321 RasterMode raster_mode_; | 239 RasterMode raster_mode_; |
322 TileResolution tile_resolution_; | 240 TileResolution tile_resolution_; |
323 int layer_id_; | 241 int layer_id_; |
324 const void* tile_id_; | 242 const void* tile_id_; |
325 int source_frame_number_; | 243 int source_frame_number_; |
326 RenderingStatsInstrumentation* rendering_stats_; | 244 RenderingStatsInstrumentation* rendering_stats_; |
327 const RasterWorkerPool::RasterTask::Reply reply_; | 245 const RasterWorkerPool::RasterTask::Reply reply_; |
328 void* buffer_; | 246 SkCanvas* canvas_; |
329 int stride_; | |
330 | 247 |
331 DISALLOW_COPY_AND_ASSIGN(RasterWorkerPoolTaskImpl); | 248 DISALLOW_COPY_AND_ASSIGN(RasterWorkerPoolTaskImpl); |
332 }; | 249 }; |
333 | 250 |
334 class ImageDecodeWorkerPoolTaskImpl : public internal::WorkerPoolTask { | 251 class ImageDecodeWorkerPoolTaskImpl : public internal::WorkerPoolTask { |
335 public: | 252 public: |
336 ImageDecodeWorkerPoolTaskImpl(SkPixelRef* pixel_ref, | 253 ImageDecodeWorkerPoolTaskImpl(SkPixelRef* pixel_ref, |
337 int layer_id, | 254 int layer_id, |
338 RenderingStatsInstrumentation* rendering_stats, | 255 RenderingStatsInstrumentation* rendering_stats, |
339 const RasterWorkerPool::Task::Reply& reply) | 256 const RasterWorkerPool::Task::Reply& reply) |
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
609 // static | 526 // static |
610 RasterWorkerPool::Task RasterWorkerPool::CreateImageDecodeTask( | 527 RasterWorkerPool::Task RasterWorkerPool::CreateImageDecodeTask( |
611 SkPixelRef* pixel_ref, | 528 SkPixelRef* pixel_ref, |
612 int layer_id, | 529 int layer_id, |
613 RenderingStatsInstrumentation* rendering_stats, | 530 RenderingStatsInstrumentation* rendering_stats, |
614 const Task::Reply& reply) { | 531 const Task::Reply& reply) { |
615 return Task(new ImageDecodeWorkerPoolTaskImpl( | 532 return Task(new ImageDecodeWorkerPoolTaskImpl( |
616 pixel_ref, layer_id, rendering_stats, reply)); | 533 pixel_ref, layer_id, rendering_stats, reply)); |
617 } | 534 } |
618 | 535 |
536 SkCanvas* RasterWorkerPool::AcquireCanvasForRaster( | |
537 internal::RasterWorkerPoolTask* task) { | |
538 DCHECK(task->use_gpu_rasterization()); | |
539 return resource_provider()->MapDirectRasterBuffer(task->resource()->id()); | |
540 } | |
541 | |
542 void RasterWorkerPool::OnRasterCompleted( | |
543 internal::RasterWorkerPoolTask* task, | |
544 const PicturePileImpl::Analysis& analysis) { | |
545 DCHECK(task->use_gpu_rasterization()); | |
546 resource_provider()->UnmapDirectRasterBuffer(task->resource()->id()); | |
547 } | |
reveman
2014/02/11 02:00:44
I think RasterWorkerPool should be an interface an
alokp
2014/02/11 07:05:21
Done.
| |
548 | |
619 void RasterWorkerPool::SetClient(RasterWorkerPoolClient* client) { | 549 void RasterWorkerPool::SetClient(RasterWorkerPoolClient* client) { |
620 client_ = client; | 550 client_ = client; |
621 } | 551 } |
622 | 552 |
623 void RasterWorkerPool::Shutdown() { | 553 void RasterWorkerPool::Shutdown() { |
624 TRACE_EVENT0("cc", "RasterWorkerPool::Shutdown"); | 554 TRACE_EVENT0("cc", "RasterWorkerPool::Shutdown"); |
625 | 555 |
626 raster_tasks_.clear(); | 556 raster_tasks_.clear(); |
627 internal::TaskGraph empty; | 557 internal::TaskGraph empty; |
628 SetTaskGraph(&empty); | 558 SetTaskGraph(&empty); |
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
803 if (decode_it == graph->nodes.end()) | 733 if (decode_it == graph->nodes.end()) |
804 InsertNodeForTask(graph, decode_task, priority, 0u); | 734 InsertNodeForTask(graph, decode_task, priority, 0u); |
805 | 735 |
806 graph->edges.push_back(internal::TaskGraph::Edge(decode_task, raster_task)); | 736 graph->edges.push_back(internal::TaskGraph::Edge(decode_task, raster_task)); |
807 } | 737 } |
808 | 738 |
809 InsertNodeForTask(graph, raster_task, priority, dependencies); | 739 InsertNodeForTask(graph, raster_task, priority, dependencies); |
810 } | 740 } |
811 | 741 |
812 } // namespace cc | 742 } // namespace cc |
OLD | NEW |