| Index: cc/resources/resource_provider.cc
|
| diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc
|
| index 55dafbd47d20e36196a8924b800c97cbbc9191db..a8e0e9ffa07b7e798c5240055040d0320e2ee47b 100644
|
| --- a/cc/resources/resource_provider.cc
|
| +++ b/cc/resources/resource_provider.cc
|
| @@ -449,10 +449,8 @@ skia::RefPtr<SkSurface> ResourceProvider::DirectRasterBuffer::CreateSurface() {
|
| DCHECK_EQ(RGBA_8888, resource()->format);
|
| SkImageInfo image_info = SkImageInfo::MakeN32Premul(
|
| resource()->size.width(), resource()->size.height());
|
| - size_t row_bytes = SkBitmap::ComputeRowBytes(SkBitmap::kARGB_8888_Config,
|
| - resource()->size.width());
|
| surface = skia::AdoptRef(SkSurface::NewRasterDirect(
|
| - image_info, resource()->pixels, row_bytes));
|
| + image_info, resource()->pixels, image_info.minRowBytes()));
|
| break;
|
| }
|
| default:
|
| @@ -483,19 +481,18 @@ SkCanvas* ResourceProvider::BitmapRasterBuffer::DoLockForWrite() {
|
| case RGBA_4444:
|
| // Use the default stride if we will eventually convert this
|
| // bitmap to 4444.
|
| - raster_bitmap_.setConfig(SkBitmap::kARGB_8888_Config,
|
| - resource()->size.width(),
|
| - resource()->size.height());
|
| - raster_bitmap_.allocPixels();
|
| + raster_bitmap_.allocN32Pixels(resource()->size.width(),
|
| + resource()->size.height());
|
| break;
|
| case RGBA_8888:
|
| - case BGRA_8888:
|
| - raster_bitmap_.setConfig(SkBitmap::kARGB_8888_Config,
|
| - resource()->size.width(),
|
| - resource()->size.height(),
|
| - stride);
|
| - raster_bitmap_.setPixels(mapped_buffer_);
|
| + case BGRA_8888: {
|
| + SkImageInfo info = SkImageInfo::MakeN32Premul(resource()->size.width(),
|
| + resource()->size.height());
|
| + if (0 == stride)
|
| + stride = info.minRowBytes();
|
| + raster_bitmap_.installPixels(info, mapped_buffer_, stride);
|
| break;
|
| + }
|
| case LUMINANCE_8:
|
| case RGB_565:
|
| case ETC1:
|
| @@ -933,21 +930,20 @@ void ResourceProvider::SetPixels(ResourceId id,
|
| DCHECK_EQ(Bitmap, resource->type);
|
| DCHECK(resource->allocated);
|
| DCHECK_EQ(RGBA_8888, resource->format);
|
| - SkBitmap src_full;
|
| - src_full.setConfig(
|
| - SkBitmap::kARGB_8888_Config, image_rect.width(), image_rect.height());
|
| - src_full.setPixels(const_cast<uint8_t*>(image));
|
| - SkBitmap src_subset;
|
| - SkIRect sk_source_rect = SkIRect::MakeXYWH(source_rect.x(),
|
| - source_rect.y(),
|
| - source_rect.width(),
|
| - source_rect.height());
|
| - sk_source_rect.offset(-image_rect.x(), -image_rect.y());
|
| - src_full.extractSubset(&src_subset, sk_source_rect);
|
| + DCHECK(source_rect.x() >= image_rect.x());
|
| + DCHECK(source_rect.y() >= image_rect.y());
|
| + DCHECK(source_rect.right() <= image_rect.right());
|
| + DCHECK(source_rect.bottom() <= image_rect.bottom());
|
| + SkImageInfo source_info =
|
| + SkImageInfo::MakeN32Premul(source_rect.width(), source_rect.height());
|
| + size_t image_row_bytes = image_rect.width() * 4;
|
| + gfx::Vector2d source_offset = source_rect.origin() - image_rect.origin();
|
| + image += source_offset.y() * image_row_bytes + source_offset.x() * 4;
|
|
|
| ScopedWriteLockSoftware lock(this, id);
|
| SkCanvas* dest = lock.sk_canvas();
|
| - dest->writePixels(src_subset, dest_offset.x(), dest_offset.y());
|
| + dest->writePixels(
|
| + source_info, image, image_row_bytes, dest_offset.x(), dest_offset.y());
|
| }
|
| }
|
|
|
| @@ -1175,10 +1171,9 @@ ResourceProvider::ScopedWriteLockGL::~ScopedWriteLockGL() {
|
| void ResourceProvider::PopulateSkBitmapWithResource(
|
| SkBitmap* sk_bitmap, const Resource* resource) {
|
| DCHECK_EQ(RGBA_8888, resource->format);
|
| - sk_bitmap->setConfig(SkBitmap::kARGB_8888_Config,
|
| - resource->size.width(),
|
| - resource->size.height());
|
| - sk_bitmap->setPixels(resource->pixels);
|
| + SkImageInfo info = SkImageInfo::MakeN32Premul(resource->size.width(),
|
| + resource->size.height());
|
| + sk_bitmap->installPixels(info, resource->pixels, info.minRowBytes());
|
| }
|
|
|
| ResourceProvider::ScopedReadLockSoftware::ScopedReadLockSoftware(
|
|
|