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

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

Issue 110883015: Add preliminary support for hw-accelerated tile rasterization. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: complete gpu tasks at appropriate time Created 7 years 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 | Annotate | Revision Log
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/raster_worker_pool.h" 5 #include "cc/resources/raster_worker_pool.h"
6 6
7 #include "base/json/json_writer.h" 7 #include "base/json/json_writer.h"
8 #include "base/metrics/histogram.h" 8 #include "base/metrics/histogram.h"
9 #include "base/values.h" 9 #include "base/values.h"
10 #include "cc/debug/devtools_instrumentation.h" 10 #include "cc/debug/devtools_instrumentation.h"
11 #include "cc/debug/traced_value.h" 11 #include "cc/debug/traced_value.h"
12 #include "cc/resources/picture_pile_impl.h" 12 #include "cc/resources/picture_pile_impl.h"
13 #include "skia/ext/lazy_pixel_ref.h" 13 #include "skia/ext/lazy_pixel_ref.h"
14 #include "skia/ext/paint_simplifier.h" 14 #include "skia/ext/paint_simplifier.h"
15 #include "third_party/skia/include/core/SkBitmap.h" 15 #include "third_party/skia/include/core/SkBitmap.h"
16 #include "third_party/skia/include/gpu/GrContext.h"
17 #include "third_party/skia/include/gpu/SkGpuDevice.h"
18 #include "third_party/WebKit/public/platform/WebGraphicsContext3D.h"
16 19
17 namespace cc { 20 namespace cc {
18 21
19 namespace { 22 namespace {
20 23
21 // Subclass of Allocator that takes a suitably allocated pointer and uses 24 // Subclass of Allocator that takes a suitably allocated pointer and uses
22 // it as the pixel memory for the bitmap. 25 // it as the pixel memory for the bitmap.
23 class IdentityAllocator : public SkBitmap::Allocator { 26 class IdentityAllocator : public SkBitmap::Allocator {
24 public: 27 public:
25 explicit IdentityAllocator(void* buffer) : buffer_(buffer) {} 28 explicit IdentityAllocator(void* buffer) : buffer_(buffer) {}
(...skipping 25 matching lines...) Expand all
51 public: 54 public:
52 RasterWorkerPoolTaskImpl(const Resource* resource, 55 RasterWorkerPoolTaskImpl(const Resource* resource,
53 PicturePileImpl* picture_pile, 56 PicturePileImpl* picture_pile,
54 gfx::Rect content_rect, 57 gfx::Rect content_rect,
55 float contents_scale, 58 float contents_scale,
56 RasterMode raster_mode, 59 RasterMode raster_mode,
57 TileResolution tile_resolution, 60 TileResolution tile_resolution,
58 int layer_id, 61 int layer_id,
59 const void* tile_id, 62 const void* tile_id,
60 int source_frame_number, 63 int source_frame_number,
64 bool use_gpu_rasterization,
61 RenderingStatsInstrumentation* rendering_stats, 65 RenderingStatsInstrumentation* rendering_stats,
62 const RasterWorkerPool::RasterTask::Reply& reply, 66 const RasterWorkerPool::RasterTask::Reply& reply,
63 TaskVector* dependencies) 67 TaskVector* dependencies)
64 : internal::RasterWorkerPoolTask(resource, dependencies), 68 : internal::RasterWorkerPoolTask(resource,
69 dependencies,
70 use_gpu_rasterization),
65 picture_pile_(picture_pile), 71 picture_pile_(picture_pile),
66 content_rect_(content_rect), 72 content_rect_(content_rect),
67 contents_scale_(contents_scale), 73 contents_scale_(contents_scale),
68 raster_mode_(raster_mode), 74 raster_mode_(raster_mode),
69 tile_resolution_(tile_resolution), 75 tile_resolution_(tile_resolution),
70 layer_id_(layer_id), 76 layer_id_(layer_id),
71 tile_id_(tile_id), 77 tile_id_(tile_id),
72 source_frame_number_(source_frame_number), 78 source_frame_number_(source_frame_number),
73 rendering_stats_(rendering_stats), 79 rendering_stats_(rendering_stats),
74 reply_(reply) {} 80 reply_(reply) {}
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 117
112 devtools_instrumentation::ScopedLayerTask raster_task( 118 devtools_instrumentation::ScopedLayerTask raster_task(
113 devtools_instrumentation::kRasterTask, layer_id_); 119 devtools_instrumentation::kRasterTask, layer_id_);
114 120
115 DCHECK(picture_pile_.get()); 121 DCHECK(picture_pile_.get());
116 DCHECK(buffer); 122 DCHECK(buffer);
117 123
118 if (analysis_.is_solid_color) 124 if (analysis_.is_solid_color)
119 return false; 125 return false;
120 126
121 PicturePileImpl* picture_clone =
122 picture_pile_->GetCloneForDrawingOnThread(thread_index);
123
124 SkBitmap bitmap; 127 SkBitmap bitmap;
125 switch (resource()->format()) { 128 switch (resource()->format()) {
126 case RGBA_4444: 129 case RGBA_4444:
127 // Use the default stride if we will eventually convert this 130 // Use the default stride if we will eventually convert this
128 // bitmap to 4444. 131 // bitmap to 4444.
129 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 132 bitmap.setConfig(SkBitmap::kARGB_8888_Config,
130 size.width(), 133 size.width(),
131 size.height()); 134 size.height());
132 bitmap.allocPixels(); 135 bitmap.allocPixels();
133 break; 136 break;
134 case RGBA_8888: 137 case RGBA_8888:
135 case BGRA_8888: 138 case BGRA_8888:
136 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 139 bitmap.setConfig(SkBitmap::kARGB_8888_Config,
137 size.width(), 140 size.width(),
138 size.height(), 141 size.height(),
139 stride); 142 stride);
140 bitmap.setPixels(buffer); 143 bitmap.setPixels(buffer);
141 break; 144 break;
142 case LUMINANCE_8: 145 case LUMINANCE_8:
143 case RGB_565: 146 case RGB_565:
144 case ETC1: 147 case ETC1:
145 NOTREACHED(); 148 NOTREACHED();
146 break; 149 break;
147 } 150 }
148 151
149 SkBitmapDevice device(bitmap); 152 SkBitmapDevice device(bitmap);
150 SkCanvas canvas(&device); 153 SkCanvas canvas(&device);
154 Raster(picture_pile_->GetCloneForDrawingOnThread(thread_index), &canvas);
155 ChangeBitmapConfigIfNeeded(bitmap, buffer);
156
157 return true;
158 }
159
160 // Overridden from internal::RasterWorkerPoolTask:
161 virtual bool RunOnWorkerThread(unsigned thread_index,
162 void* buffer,
163 gfx::Size size,
164 int stride) OVERRIDE {
165 // TODO(alokp): For now run-on-worker-thread implies software rasterization.
166 DCHECK(!use_gpu_rasterization());
167 RunAnalysisOnThread(thread_index);
168 return RunRasterOnThread(thread_index, buffer, size, stride);
169 }
170
171 virtual void RunOnOriginThread(ResourceProvider* resource_provider,
172 ContextProvider* context_provider) OVERRIDE {
173 // TODO(alokp): For now run-on-origin-thread implies gpu rasterization.
174 DCHECK(use_gpu_rasterization());
175 ResourceProvider::ScopedWriteLockGL lock(resource_provider,
176 resource()->id());
177 DCHECK_NE(lock.texture_id(), 0u);
178
179 GrBackendTextureDesc desc;
180 desc.fFlags = kRenderTarget_GrBackendTextureFlag;
181 desc.fWidth = content_rect_.width();
182 desc.fHeight = content_rect_.height();
183 desc.fConfig = ToGrFormat(resource()->format());
184 desc.fOrigin = kTopLeft_GrSurfaceOrigin;
185 desc.fTextureHandle = lock.texture_id();
186
187 GrContext* gr_context = context_provider->GrContext();
188 skia::RefPtr<GrTexture> texture =
189 skia::AdoptRef(gr_context->wrapBackendTexture(desc));
190 skia::RefPtr<SkGpuDevice> device =
191 skia::AdoptRef(SkGpuDevice::Create(texture.get()));
192 skia::RefPtr<SkCanvas> canvas = skia::AdoptRef(new SkCanvas(device.get()));
193
194 Raster(picture_pile_, canvas.get());
195 }
196
197 virtual void CompleteOnOriginThread() OVERRIDE {
198 reply_.Run(analysis_, !HasFinishedRunning() || WasCanceled());
199 }
200
201 protected:
202 virtual ~RasterWorkerPoolTaskImpl() {}
203
204 private:
205 scoped_ptr<base::Value> DataAsValue() const {
206 scoped_ptr<base::DictionaryValue> res(new base::DictionaryValue());
207 res->Set("tile_id", TracedValue::CreateIDRef(tile_id_).release());
208 res->Set("resolution", TileResolutionAsValue(tile_resolution_).release());
209 res->SetInteger("source_frame_number", source_frame_number_);
210 res->SetInteger("layer_id", layer_id_);
211 return res.PassAs<base::Value>();
212 }
213
214 static GrPixelConfig ToGrFormat(ResourceFormat format) {
215 switch (format) {
216 case RGBA_8888: return kRGBA_8888_GrPixelConfig;
217 case BGRA_8888: return kBGRA_8888_GrPixelConfig;
218 case RGBA_4444: return kRGBA_4444_GrPixelConfig;
219 default: break;
220 }
221 DCHECK(false) << "Unsupported resource format.";
222 return kSkia8888_GrPixelConfig;
223 }
224
225 void Raster(PicturePileImpl* picture_pile, SkCanvas* canvas) {
151 skia::RefPtr<SkDrawFilter> draw_filter; 226 skia::RefPtr<SkDrawFilter> draw_filter;
152 switch (raster_mode_) { 227 switch (raster_mode_) {
153 case LOW_QUALITY_RASTER_MODE: 228 case LOW_QUALITY_RASTER_MODE:
154 draw_filter = skia::AdoptRef(new skia::PaintSimplifier); 229 draw_filter = skia::AdoptRef(new skia::PaintSimplifier);
155 break; 230 break;
156 case HIGH_QUALITY_NO_LCD_RASTER_MODE: 231 case HIGH_QUALITY_NO_LCD_RASTER_MODE:
157 draw_filter = skia::AdoptRef(new DisableLCDTextFilter); 232 draw_filter = skia::AdoptRef(new DisableLCDTextFilter);
158 break; 233 break;
159 case HIGH_QUALITY_RASTER_MODE: 234 case HIGH_QUALITY_RASTER_MODE:
160 break; 235 break;
161 case NUM_RASTER_MODES: 236 case NUM_RASTER_MODES:
162 default: 237 default:
163 NOTREACHED(); 238 NOTREACHED();
164 } 239 }
165 240 canvas->setDrawFilter(draw_filter.get());
166 canvas.setDrawFilter(draw_filter.get());
167 241
168 base::TimeDelta prev_rasterize_time = 242 base::TimeDelta prev_rasterize_time =
169 rendering_stats_->impl_thread_rendering_stats().rasterize_time; 243 rendering_stats_->impl_thread_rendering_stats().rasterize_time;
170 244
171 // Only record rasterization time for highres tiles, because 245 // Only record rasterization time for highres tiles, because
172 // lowres tiles are not required for activation and therefore 246 // lowres tiles are not required for activation and therefore
173 // introduce noise in the measurement (sometimes they get rasterized 247 // introduce noise in the measurement (sometimes they get rasterized
174 // before we draw and sometimes they aren't) 248 // before we draw and sometimes they aren't)
175 if (tile_resolution_ == HIGH_RESOLUTION) { 249 RenderingStatsInstrumentation* stats = tile_resolution_ == HIGH_RESOLUTION ?
176 picture_clone->RasterToBitmap( 250 rendering_stats_ : NULL;
177 &canvas, content_rect_, contents_scale_, rendering_stats_); 251 picture_pile->RasterToBitmap(canvas, content_rect_, contents_scale_, stats);
178 } else {
179 picture_clone->RasterToBitmap(
180 &canvas, content_rect_, contents_scale_, NULL);
181 }
182 252
183 if (rendering_stats_->record_rendering_stats()) { 253 if (rendering_stats_->record_rendering_stats()) {
184 base::TimeDelta current_rasterize_time = 254 base::TimeDelta current_rasterize_time =
185 rendering_stats_->impl_thread_rendering_stats().rasterize_time; 255 rendering_stats_->impl_thread_rendering_stats().rasterize_time;
186 HISTOGRAM_CUSTOM_COUNTS( 256 HISTOGRAM_CUSTOM_COUNTS(
187 "Renderer4.PictureRasterTimeUS", 257 "Renderer4.PictureRasterTimeUS",
188 (current_rasterize_time - prev_rasterize_time).InMicroseconds(), 258 (current_rasterize_time - prev_rasterize_time).InMicroseconds(),
189 0, 259 0,
190 100000, 260 100000,
191 100); 261 100);
192 } 262 }
193
194 ChangeBitmapConfigIfNeeded(bitmap, buffer);
195
196 return true;
197 }
198
199 // Overridden from internal::RasterWorkerPoolTask:
200 virtual bool RunOnWorkerThread(unsigned thread_index,
201 void* buffer,
202 gfx::Size size,
203 int stride)
204 OVERRIDE {
205 RunAnalysisOnThread(thread_index);
206 return RunRasterOnThread(thread_index, buffer, size, stride);
207 }
208 virtual void CompleteOnOriginThread() OVERRIDE {
209 reply_.Run(analysis_, !HasFinishedRunning() || WasCanceled());
210 }
211
212 protected:
213 virtual ~RasterWorkerPoolTaskImpl() {}
214
215 private:
216 scoped_ptr<base::Value> DataAsValue() const {
217 scoped_ptr<base::DictionaryValue> res(new base::DictionaryValue());
218 res->Set("tile_id", TracedValue::CreateIDRef(tile_id_).release());
219 res->Set("resolution", TileResolutionAsValue(tile_resolution_).release());
220 res->SetInteger("source_frame_number", source_frame_number_);
221 res->SetInteger("layer_id", layer_id_);
222 return res.PassAs<base::Value>();
223 } 263 }
224 264
225 void ChangeBitmapConfigIfNeeded(const SkBitmap& bitmap, 265 void ChangeBitmapConfigIfNeeded(const SkBitmap& bitmap,
226 void* buffer) { 266 void* buffer) {
227 TRACE_EVENT0("cc", "RasterWorkerPoolTaskImpl::ChangeBitmapConfigIfNeeded"); 267 TRACE_EVENT0("cc", "RasterWorkerPoolTaskImpl::ChangeBitmapConfigIfNeeded");
228 SkBitmap::Config config = SkBitmapConfig(resource()->format()); 268 SkBitmap::Config config = SkBitmapConfig(resource()->format());
229 if (bitmap.getConfig() != config) { 269 if (bitmap.getConfig() != config) {
230 SkBitmap bitmap_dest; 270 SkBitmap bitmap_dest;
231 IdentityAllocator allocator(buffer); 271 IdentityAllocator allocator(buffer);
232 bitmap.copyTo(&bitmap_dest, config, &allocator); 272 bitmap.copyTo(&bitmap_dest, config, &allocator);
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
318 358
319 DISALLOW_COPY_AND_ASSIGN(RasterFinishedWorkerPoolTaskImpl); 359 DISALLOW_COPY_AND_ASSIGN(RasterFinishedWorkerPoolTaskImpl);
320 }; 360 };
321 361
322 const char* kWorkerThreadNamePrefix = "CompositorRaster"; 362 const char* kWorkerThreadNamePrefix = "CompositorRaster";
323 363
324 } // namespace 364 } // namespace
325 365
326 namespace internal { 366 namespace internal {
327 367
328 RasterWorkerPoolTask::RasterWorkerPoolTask( 368 RasterWorkerPoolTask::RasterWorkerPoolTask(const Resource* resource,
329 const Resource* resource, TaskVector* dependencies) 369 TaskVector* dependencies,
370 bool use_gpu_rasterization)
330 : did_run_(false), 371 : did_run_(false),
331 did_complete_(false), 372 did_complete_(false),
332 was_canceled_(false), 373 was_canceled_(false),
333 resource_(resource) { 374 resource_(resource),
375 use_gpu_rasterization_(use_gpu_rasterization) {
334 dependencies_.swap(*dependencies); 376 dependencies_.swap(*dependencies);
335 } 377 }
336 378
337 RasterWorkerPoolTask::~RasterWorkerPoolTask() { 379 RasterWorkerPoolTask::~RasterWorkerPoolTask() {
338 } 380 }
339 381
340 void RasterWorkerPoolTask::DidRun(bool was_canceled) { 382 void RasterWorkerPoolTask::DidRun(bool was_canceled) {
341 DCHECK(!did_run_); 383 DCHECK(!did_run_);
342 did_run_ = true; 384 did_run_ = true;
343 was_canceled_ = was_canceled; 385 was_canceled_ = was_canceled;
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
424 RasterWorkerPool::RasterTask RasterWorkerPool::CreateRasterTask( 466 RasterWorkerPool::RasterTask RasterWorkerPool::CreateRasterTask(
425 const Resource* resource, 467 const Resource* resource,
426 PicturePileImpl* picture_pile, 468 PicturePileImpl* picture_pile,
427 gfx::Rect content_rect, 469 gfx::Rect content_rect,
428 float contents_scale, 470 float contents_scale,
429 RasterMode raster_mode, 471 RasterMode raster_mode,
430 TileResolution tile_resolution, 472 TileResolution tile_resolution,
431 int layer_id, 473 int layer_id,
432 const void* tile_id, 474 const void* tile_id,
433 int source_frame_number, 475 int source_frame_number,
476 bool use_gpu_rasterization,
434 RenderingStatsInstrumentation* rendering_stats, 477 RenderingStatsInstrumentation* rendering_stats,
435 const RasterTask::Reply& reply, 478 const RasterTask::Reply& reply,
436 Task::Set* dependencies) { 479 Task::Set* dependencies) {
437 return RasterTask( 480 return RasterTask(
438 new RasterWorkerPoolTaskImpl(resource, 481 new RasterWorkerPoolTaskImpl(resource,
439 picture_pile, 482 picture_pile,
440 content_rect, 483 content_rect,
441 contents_scale, 484 contents_scale,
442 raster_mode, 485 raster_mode,
443 tile_resolution, 486 tile_resolution,
444 layer_id, 487 layer_id,
445 tile_id, 488 tile_id,
446 source_frame_number, 489 source_frame_number,
490 use_gpu_rasterization,
447 rendering_stats, 491 rendering_stats,
448 reply, 492 reply,
449 &dependencies->tasks_)); 493 &dependencies->tasks_));
450 } 494 }
451 495
452 // static 496 // static
453 RasterWorkerPool::Task RasterWorkerPool::CreateImageDecodeTask( 497 RasterWorkerPool::Task RasterWorkerPool::CreateImageDecodeTask(
454 skia::LazyPixelRef* pixel_ref, 498 skia::LazyPixelRef* pixel_ref,
455 int layer_id, 499 int layer_id,
456 RenderingStatsInstrumentation* stats_instrumentation, 500 RenderingStatsInstrumentation* stats_instrumentation,
457 const Task::Reply& reply) { 501 const Task::Reply& reply) {
458 return Task(new ImageDecodeWorkerPoolTaskImpl(pixel_ref, 502 return Task(new ImageDecodeWorkerPoolTaskImpl(pixel_ref,
459 layer_id, 503 layer_id,
460 stats_instrumentation, 504 stats_instrumentation,
461 reply)); 505 reply));
462 } 506 }
463 507
464 RasterWorkerPool::RasterWorkerPool(ResourceProvider* resource_provider, 508 RasterWorkerPool::RasterWorkerPool(ResourceProvider* resource_provider,
509 ContextProvider* context_provider,
465 size_t num_threads) 510 size_t num_threads)
466 : WorkerPool(num_threads, kWorkerThreadNamePrefix), 511 : WorkerPool(num_threads, kWorkerThreadNamePrefix),
467 client_(NULL), 512 client_(NULL),
468 resource_provider_(resource_provider), 513 resource_provider_(resource_provider),
514 context_provider_(context_provider),
469 weak_ptr_factory_(this) { 515 weak_ptr_factory_(this) {
470 } 516 }
471 517
472 RasterWorkerPool::~RasterWorkerPool() { 518 RasterWorkerPool::~RasterWorkerPool() {
473 } 519 }
474 520
475 void RasterWorkerPool::SetClient(RasterWorkerPoolClient* client) { 521 void RasterWorkerPool::SetClient(RasterWorkerPoolClient* client) {
476 client_ = client; 522 client_ = client;
477 } 523 }
478 524
479 void RasterWorkerPool::Shutdown() { 525 void RasterWorkerPool::Shutdown() {
480 raster_tasks_.clear(); 526 raster_tasks_.clear();
481 TaskGraph empty; 527 TaskGraph empty;
482 SetTaskGraph(&empty); 528 SetTaskGraph(&empty);
483 WorkerPool::Shutdown(); 529 WorkerPool::Shutdown();
484 weak_ptr_factory_.InvalidateWeakPtrs(); 530 weak_ptr_factory_.InvalidateWeakPtrs();
485 } 531 }
486 532
533 void RasterWorkerPool::CheckForCompletedTasks() {
534 TRACE_EVENT0("cc", "RasterWorkerPool::CheckForCompletedTasks");
535
536 WorkerPool::CheckForCompletedTasks();
537
538 // Complete gpu rasterization tasks.
539 for (RasterTaskVector::iterator it = gpu_raster_tasks_.begin();
540 it != gpu_raster_tasks_.end(); ++it) {
reveman 2013/12/19 01:36:47 nit: indent should align with RasterTaskV.. not 4
alokp 2013/12/19 06:25:42 Done. Is this in style guide?
reveman 2013/12/19 18:43:36 Maybe not but it's consistent with the rest of the
541 internal::RasterWorkerPoolTask* task = it->get();
542 task->WillComplete();
543 task->CompleteOnOriginThread();
544 task->DidComplete();
545 }
546 gpu_raster_tasks_.clear();
547 }
548
487 void RasterWorkerPool::SetRasterTasks(RasterTask::Queue* queue) { 549 void RasterWorkerPool::SetRasterTasks(RasterTask::Queue* queue) {
488 raster_tasks_.swap(queue->tasks_); 550 raster_tasks_.swap(queue->tasks_);
489 raster_tasks_required_for_activation_.swap( 551 raster_tasks_required_for_activation_.swap(
490 queue->tasks_required_for_activation_); 552 queue->tasks_required_for_activation_);
491 } 553 }
492 554
493 bool RasterWorkerPool::IsRasterTaskRequiredForActivation( 555 bool RasterWorkerPool::IsRasterTaskRequiredForActivation(
494 internal::RasterWorkerPoolTask* task) const { 556 internal::RasterWorkerPoolTask* task) const {
495 return 557 return
496 raster_tasks_required_for_activation_.find(task) != 558 raster_tasks_required_for_activation_.find(task) !=
497 raster_tasks_required_for_activation_.end(); 559 raster_tasks_required_for_activation_.end();
498 } 560 }
499 561
562 void RasterWorkerPool::RunGpuRasterTasks(RasterTaskVector* tasks) {
563 gpu_raster_tasks_.swap(*tasks);
vmpstr 2013/12/19 00:30:33 Can you DCHECK that current gpu_raster_tasks_ is e
reveman 2013/12/19 01:36:47 Yes, this function being called multiple times wit
alokp 2013/12/19 06:25:42 Done.
564 if (gpu_raster_tasks_.empty())
565 return;
566
567 blink::WebGraphicsContext3D* context = context_provider_->Context3d();
568 context->makeContextCurrent();
569
570 GrContext* gr_context = context_provider_->GrContext();
571 gr_context->resetContext();
572
573 for (RasterTaskVector::iterator it = gpu_raster_tasks_.begin();
574 it != gpu_raster_tasks_.end(); ++it) {
reveman 2013/12/19 01:36:47 nit: indent should align with RasterTaskV.. not 4
alokp 2013/12/19 06:25:42 Done.
575 internal::RasterWorkerPoolTask* task = it->get();
576 DCHECK(task->use_gpu_rasterization());
vmpstr 2013/12/19 00:30:33 This is already DCHECKed in RunOnOriginThread, unl
alokp 2013/12/19 06:25:42 This is permanent (if there is such a thing). I am
577 task->RunOnOriginThread(resource_provider_, context_provider_);
reveman 2013/12/19 01:36:47 Can we call DidSchedule() and WillRun() above this
alokp 2013/12/19 06:25:42 There are no RasterWorkerPoolTask::WillRun/DidSche
reveman 2013/12/19 18:43:36 Ah, ok.
578 task->DidRun(false);
579 }
580
581 gr_context->flush();
582 }
583
500 scoped_refptr<internal::WorkerPoolTask> 584 scoped_refptr<internal::WorkerPoolTask>
501 RasterWorkerPool::CreateRasterFinishedTask() { 585 RasterWorkerPool::CreateRasterFinishedTask() {
502 return make_scoped_refptr( 586 return make_scoped_refptr(
503 new RasterFinishedWorkerPoolTaskImpl( 587 new RasterFinishedWorkerPoolTaskImpl(
504 base::Bind(&RasterWorkerPool::OnRasterFinished, 588 base::Bind(&RasterWorkerPool::OnRasterFinished,
505 weak_ptr_factory_.GetWeakPtr()))); 589 weak_ptr_factory_.GetWeakPtr())));
506 } 590 }
507 591
508 scoped_refptr<internal::WorkerPoolTask> 592 scoped_refptr<internal::WorkerPoolTask>
509 RasterWorkerPool::CreateRasterRequiredForActivationFinishedTask() { 593 RasterWorkerPool::CreateRasterRequiredForActivationFinishedTask() {
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
587 671
588 internal::GraphNode* decode_node = CreateGraphNodeForTask( 672 internal::GraphNode* decode_node = CreateGraphNodeForTask(
589 decode_task, priority, graph); 673 decode_task, priority, graph);
590 decode_node->add_dependent(raster_node); 674 decode_node->add_dependent(raster_node);
591 } 675 }
592 676
593 return raster_node; 677 return raster_node;
594 } 678 }
595 679
596 } // namespace cc 680 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698