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

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

Issue 170783007: Re-land: cc: Cleanup internal::WorkerPoolTaskClient interface. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix bad DCHECK Created 6 years, 10 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 | Annotate | Revision Log
« no previous file with comments | « cc/resources/resource_provider.h ('k') | cc/test/fake_tile_manager.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 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/resource_provider.h" 5 #include "cc/resources/resource_provider.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 9
10 #include "base/containers/hash_tables.h" 10 #include "base/containers/hash_tables.h"
(...skipping 371 matching lines...) Expand 10 before | Expand all | Expand 10 after
382 ResourceProvider::RasterBuffer::~RasterBuffer() {} 382 ResourceProvider::RasterBuffer::~RasterBuffer() {}
383 383
384 SkCanvas* ResourceProvider::RasterBuffer::LockForWrite() { 384 SkCanvas* ResourceProvider::RasterBuffer::LockForWrite() {
385 DCHECK(!locked_canvas_); 385 DCHECK(!locked_canvas_);
386 386
387 locked_canvas_ = DoLockForWrite(); 387 locked_canvas_ = DoLockForWrite();
388 canvas_save_count_ = locked_canvas_ ? locked_canvas_->save() : 0; 388 canvas_save_count_ = locked_canvas_ ? locked_canvas_->save() : 0;
389 return locked_canvas_; 389 return locked_canvas_;
390 } 390 }
391 391
392 void ResourceProvider::RasterBuffer::UnlockForWrite() { 392 bool ResourceProvider::RasterBuffer::UnlockForWrite() {
393 if (locked_canvas_) { 393 if (locked_canvas_) {
394 locked_canvas_->restoreToCount(canvas_save_count_); 394 locked_canvas_->restoreToCount(canvas_save_count_);
395 locked_canvas_ = NULL; 395 locked_canvas_ = NULL;
396 } 396 }
397 DoUnlockForWrite(); 397 return DoUnlockForWrite();
398 } 398 }
399 399
400 ResourceProvider::DirectRasterBuffer::DirectRasterBuffer( 400 ResourceProvider::DirectRasterBuffer::DirectRasterBuffer(
401 const Resource* resource, 401 const Resource* resource,
402 ResourceProvider* resource_provider) 402 ResourceProvider* resource_provider)
403 : RasterBuffer(resource, resource_provider) {} 403 : RasterBuffer(resource, resource_provider), surface_generation_id_(0u) {}
404 404
405 ResourceProvider::DirectRasterBuffer::~DirectRasterBuffer() {} 405 ResourceProvider::DirectRasterBuffer::~DirectRasterBuffer() {}
406 406
407 SkCanvas* ResourceProvider::DirectRasterBuffer::DoLockForWrite() { 407 SkCanvas* ResourceProvider::DirectRasterBuffer::DoLockForWrite() {
408 if (!surface_) 408 if (!surface_)
409 surface_ = CreateSurface(); 409 surface_ = CreateSurface();
410 surface_generation_id_ = surface_ ? surface_->generationID() : 0u;
410 return surface_ ? surface_->getCanvas() : NULL; 411 return surface_ ? surface_->getCanvas() : NULL;
411 } 412 }
412 413
413 void ResourceProvider::DirectRasterBuffer::DoUnlockForWrite() {} 414 bool ResourceProvider::DirectRasterBuffer::DoUnlockForWrite() {
415 // generationID returns a non-zero, unique value corresponding to the content
416 // of surface. Hence, a change since DoLockForWrite was called means the
417 // surface has changed.
418 return surface_ ? surface_generation_id_ != surface_->generationID() : false;
419 }
414 420
415 skia::RefPtr<SkSurface> ResourceProvider::DirectRasterBuffer::CreateSurface() { 421 skia::RefPtr<SkSurface> ResourceProvider::DirectRasterBuffer::CreateSurface() {
416 skia::RefPtr<SkSurface> surface; 422 skia::RefPtr<SkSurface> surface;
417 switch (resource()->type) { 423 switch (resource()->type) {
418 case GLTexture: { 424 case GLTexture: {
419 DCHECK(resource()->gl_id); 425 DCHECK(resource()->gl_id);
420 class GrContext* gr_context = resource_provider()->GrContext(); 426 class GrContext* gr_context = resource_provider()->GrContext();
421 if (gr_context) { 427 if (gr_context) {
422 GrBackendTextureDesc desc; 428 GrBackendTextureDesc desc;
423 desc.fFlags = kRenderTarget_GrBackendTextureFlag; 429 desc.fFlags = kRenderTarget_GrBackendTextureFlag;
(...skipping 22 matching lines...) Expand all
446 } 452 }
447 default: 453 default:
448 NOTREACHED(); 454 NOTREACHED();
449 } 455 }
450 return surface; 456 return surface;
451 } 457 }
452 458
453 ResourceProvider::BitmapRasterBuffer::BitmapRasterBuffer( 459 ResourceProvider::BitmapRasterBuffer::BitmapRasterBuffer(
454 const Resource* resource, 460 const Resource* resource,
455 ResourceProvider* resource_provider) 461 ResourceProvider* resource_provider)
456 : RasterBuffer(resource, resource_provider), mapped_buffer_(NULL) {} 462 : RasterBuffer(resource, resource_provider),
463 mapped_buffer_(NULL),
464 raster_bitmap_generation_id_(0u) {}
457 465
458 ResourceProvider::BitmapRasterBuffer::~BitmapRasterBuffer() {} 466 ResourceProvider::BitmapRasterBuffer::~BitmapRasterBuffer() {}
459 467
460 SkCanvas* ResourceProvider::BitmapRasterBuffer::DoLockForWrite() { 468 SkCanvas* ResourceProvider::BitmapRasterBuffer::DoLockForWrite() {
461 DCHECK(!mapped_buffer_); 469 DCHECK(!mapped_buffer_);
462 DCHECK(!raster_canvas_); 470 DCHECK(!raster_canvas_);
463 471
464 int stride = 0; 472 int stride = 0;
465 mapped_buffer_ = MapBuffer(&stride); 473 mapped_buffer_ = MapBuffer(&stride);
466 if (!mapped_buffer_) 474 if (!mapped_buffer_)
(...skipping 18 matching lines...) Expand all
485 break; 493 break;
486 case LUMINANCE_8: 494 case LUMINANCE_8:
487 case RGB_565: 495 case RGB_565:
488 case ETC1: 496 case ETC1:
489 NOTREACHED(); 497 NOTREACHED();
490 break; 498 break;
491 } 499 }
492 skia::RefPtr<SkBitmapDevice> device = 500 skia::RefPtr<SkBitmapDevice> device =
493 skia::AdoptRef(new SkBitmapDevice(raster_bitmap_)); 501 skia::AdoptRef(new SkBitmapDevice(raster_bitmap_));
494 raster_canvas_ = skia::AdoptRef(new SkCanvas(device.get())); 502 raster_canvas_ = skia::AdoptRef(new SkCanvas(device.get()));
503 raster_bitmap_generation_id_ = raster_bitmap_.getGenerationID();
495 return raster_canvas_.get(); 504 return raster_canvas_.get();
496 } 505 }
497 506
498 void ResourceProvider::BitmapRasterBuffer::DoUnlockForWrite() { 507 bool ResourceProvider::BitmapRasterBuffer::DoUnlockForWrite() {
499 raster_canvas_.clear(); 508 raster_canvas_.clear();
500 509
501 SkBitmap::Config buffer_config = SkBitmapConfig(resource()->format); 510 // getGenerationID returns a non-zero, unique value corresponding to the
502 if (mapped_buffer_ && (buffer_config != raster_bitmap_.config())) 511 // pixels in bitmap. Hence, a change since DoLockForWrite was called means the
503 CopyBitmap(raster_bitmap_, mapped_buffer_, buffer_config); 512 // bitmap has changed.
513 bool raster_bitmap_changed =
514 raster_bitmap_generation_id_ != raster_bitmap_.getGenerationID();
515
516 if (raster_bitmap_changed) {
517 SkBitmap::Config buffer_config = SkBitmapConfig(resource()->format);
518 if (mapped_buffer_ && (buffer_config != raster_bitmap_.config()))
519 CopyBitmap(raster_bitmap_, mapped_buffer_, buffer_config);
520 }
504 raster_bitmap_.reset(); 521 raster_bitmap_.reset();
505 522
506 UnmapBuffer(); 523 UnmapBuffer();
507 mapped_buffer_ = NULL; 524 mapped_buffer_ = NULL;
525 return raster_bitmap_changed;
508 } 526 }
509 527
510 ResourceProvider::ImageRasterBuffer::ImageRasterBuffer( 528 ResourceProvider::ImageRasterBuffer::ImageRasterBuffer(
511 const Resource* resource, 529 const Resource* resource,
512 ResourceProvider* resource_provider) 530 ResourceProvider* resource_provider)
513 : BitmapRasterBuffer(resource, resource_provider) {} 531 : BitmapRasterBuffer(resource, resource_provider) {}
514 532
515 ResourceProvider::ImageRasterBuffer::~ImageRasterBuffer() {} 533 ResourceProvider::ImageRasterBuffer::~ImageRasterBuffer() {}
516 534
517 uint8_t* ResourceProvider::ImageRasterBuffer::MapBuffer(int* stride) { 535 uint8_t* ResourceProvider::ImageRasterBuffer::MapBuffer(int* stride) {
(...skipping 1215 matching lines...) Expand 10 before | Expand all | Expand 10 after
1733 resource->pixel_raster_buffer.reset(); 1751 resource->pixel_raster_buffer.reset();
1734 ReleasePixelBuffer(resource); 1752 ReleasePixelBuffer(resource);
1735 } 1753 }
1736 1754
1737 SkCanvas* ResourceProvider::MapPixelRasterBuffer(ResourceId id) { 1755 SkCanvas* ResourceProvider::MapPixelRasterBuffer(ResourceId id) {
1738 Resource* resource = GetResource(id); 1756 Resource* resource = GetResource(id);
1739 DCHECK(resource->pixel_raster_buffer.get()); 1757 DCHECK(resource->pixel_raster_buffer.get());
1740 return resource->pixel_raster_buffer->LockForWrite(); 1758 return resource->pixel_raster_buffer->LockForWrite();
1741 } 1759 }
1742 1760
1743 void ResourceProvider::UnmapPixelRasterBuffer(ResourceId id) { 1761 bool ResourceProvider::UnmapPixelRasterBuffer(ResourceId id) {
1744 Resource* resource = GetResource(id); 1762 Resource* resource = GetResource(id);
1745 DCHECK(resource->pixel_raster_buffer.get()); 1763 DCHECK(resource->pixel_raster_buffer.get());
1746 resource->pixel_raster_buffer->UnlockForWrite(); 1764 return resource->pixel_raster_buffer->UnlockForWrite();
1747 } 1765 }
1748 1766
1749 void ResourceProvider::AcquirePixelBuffer(Resource* resource) { 1767 void ResourceProvider::AcquirePixelBuffer(Resource* resource) {
1750 DCHECK(resource->origin == Resource::Internal); 1768 DCHECK(resource->origin == Resource::Internal);
1751 DCHECK_EQ(resource->exported_count, 0); 1769 DCHECK_EQ(resource->exported_count, 0);
1752 DCHECK(!resource->image_id); 1770 DCHECK(!resource->image_id);
1753 DCHECK_NE(ETC1, resource->format); 1771 DCHECK_NE(ETC1, resource->format);
1754 1772
1755 if (resource->type == GLTexture) { 1773 if (resource->type == GLTexture) {
1756 GLES2Interface* gl = ContextGL(); 1774 GLES2Interface* gl = ContextGL();
(...skipping 406 matching lines...) Expand 10 before | Expand all | Expand 10 after
2163 ContextProvider* context_provider = output_surface_->context_provider(); 2181 ContextProvider* context_provider = output_surface_->context_provider();
2164 return context_provider ? context_provider->ContextGL() : NULL; 2182 return context_provider ? context_provider->ContextGL() : NULL;
2165 } 2183 }
2166 2184
2167 class GrContext* ResourceProvider::GrContext() const { 2185 class GrContext* ResourceProvider::GrContext() const {
2168 ContextProvider* context_provider = output_surface_->context_provider(); 2186 ContextProvider* context_provider = output_surface_->context_provider();
2169 return context_provider ? context_provider->GrContext() : NULL; 2187 return context_provider ? context_provider->GrContext() : NULL;
2170 } 2188 }
2171 2189
2172 } // namespace cc 2190 } // namespace cc
OLDNEW
« no previous file with comments | « cc/resources/resource_provider.h ('k') | cc/test/fake_tile_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698