Chromium Code Reviews| Index: cc/resources/resource_provider.cc |
| diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc |
| index ce9b233b6790206c69a9374a594bb0eaa79c9d95..df56d964628c164d841f0a615309d5724a6383d4 100644 |
| --- a/cc/resources/resource_provider.cc |
| +++ b/cc/resources/resource_provider.cc |
| @@ -663,6 +663,7 @@ ResourceId ResourceProvider::CreateResourceFromTextureMailbox( |
| } |
| resource->allocated = true; |
| resource->set_mailbox(mailbox); |
| + resource->color_space = mailbox.color_space(); |
| resource->release_callback_impl = |
| base::Bind(&SingleReleaseCallbackImpl::Run, |
| base::Owned(release_callback_impl.release())); |
| @@ -810,6 +811,12 @@ ResourceProvider::TextureHint ResourceProvider::GetTextureHint(ResourceId id) { |
| return GetResource(id)->hint; |
| } |
| +static sk_sp<SkColorSpace> toSkColorSpace(const gfx::ColorSpace& color_space) { |
| + // TODO(crbug.com/634102): Implement conversion for skia-based compositing to |
| + // be color-managed |
| + return nullptr; |
| +} |
| + |
| void ResourceProvider::CopyToResource(ResourceId id, |
| const uint8_t* image, |
| const gfx::Size& image_size) { |
| @@ -831,7 +838,8 @@ void ResourceProvider::CopyToResource(ResourceId id, |
| DCHECK(resource->allocated); |
| DCHECK_EQ(RGBA_8888, resource->format); |
| SkImageInfo source_info = |
| - SkImageInfo::MakeN32Premul(image_size.width(), image_size.height()); |
| + SkImageInfo::MakeN32Premul(image_size.width(), image_size.height(), |
| + toSkColorSpace(resource->color_space)); |
| size_t image_stride = image_size.width() * 4; |
| ScopedWriteLockSoftware lock(this, id); |
| @@ -1156,8 +1164,9 @@ ResourceProvider::ScopedSkSurfaceProvider::~ScopedSkSurfaceProvider() { |
| void ResourceProvider::PopulateSkBitmapWithResource(SkBitmap* sk_bitmap, |
| const Resource* resource) { |
| DCHECK_EQ(RGBA_8888, resource->format); |
| - SkImageInfo info = SkImageInfo::MakeN32Premul(resource->size.width(), |
| - resource->size.height()); |
| + SkImageInfo info = SkImageInfo::MakeN32Premul( |
| + resource->size.width(), resource->size.height(), |
| + toSkColorSpace(resource->color_space)); |
| sk_bitmap->installPixels(info, resource->pixels, info.minRowBytes()); |
| } |
| @@ -1190,7 +1199,9 @@ ResourceProvider::ScopedReadLockSkImage::ScopedReadLockSkImage( |
| desc.fOrigin = kTopLeft_GrSurfaceOrigin; |
| desc.fTextureHandle = skia::GrGLTextureInfoToGrBackendObject(texture_info); |
| sk_image_ = SkImage::MakeFromTexture( |
| - resource_provider->compositor_context_provider_->GrContext(), desc); |
| + resource_provider->compositor_context_provider_->GrContext(), desc, |
| + kPremul_SkAlphaType, toSkColorSpace(resource->color_space), nullptr, |
| + nullptr); |
| } else if (resource->pixels) { |
| SkBitmap sk_bitmap; |
| ResourceProvider::PopulateSkBitmapWithResource(&sk_bitmap, resource); |
| @@ -1487,6 +1498,7 @@ void ResourceProvider::ReceiveFromChild( |
| resource->is_overlay_candidate = it->is_overlay_candidate; |
| resource->color_space = it->color_space; |
| } |
| + |
|
Stephen White
2016/08/11 20:41:27
Nit: remove whitespace change, unless intentional.
Justin Novosad
2016/08/12 17:40:18
Done.
|
| resource->child_id = child; |
| // Don't allocate a texture for a child. |
| resource->allocated = true; |