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

Unified Diff: cc/resources/resource_provider.cc

Issue 2212163002: Add some plumbing for the color management of canvases (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix build + feedback Created 4 years, 4 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 side-by-side diff with in-line comments
Download patch
Index: cc/resources/resource_provider.cc
diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc
index ce9b233b6790206c69a9374a594bb0eaa79c9d95..7aae2b21e6ba2673b1e35ccdf5ced973b4acef75 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) {
danakj 2016/08/12 21:03:48 chromium style function names plz. ColorSpaceToSk
Justin Novosad 2016/08/15 18:07:04 Done.
+ // 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);

Powered by Google App Engine
This is Rietveld 408576698