Index: cc/raster/image_hijack_canvas.cc |
diff --git a/cc/raster/image_hijack_canvas.cc b/cc/raster/image_hijack_canvas.cc |
index 5d4c9e432e70d176ed8a6903be3a27d322ce461a..150be23fa5d98fba9636920d54a09ccc19e44188 100644 |
--- a/cc/raster/image_hijack_canvas.cc |
+++ b/cc/raster/image_hijack_canvas.cc |
@@ -25,12 +25,14 @@ class ScopedDecodedImageLock { |
sk_sp<const SkImage> image, |
const SkRect& src_rect, |
const SkMatrix& matrix, |
- const SkPaint* paint) |
+ const SkPaint* paint, |
+ const gfx::ColorSpace& target_color_space) |
: image_decode_cache_(image_decode_cache), |
draw_image_(std::move(image), |
RoundOutRect(src_rect), |
paint ? paint->getFilterQuality() : kNone_SkFilterQuality, |
- matrix), |
+ matrix, |
+ target_color_space), |
decoded_draw_image_( |
image_decode_cache_->GetDecodedImageForDraw(draw_image_)) { |
DCHECK(draw_image_.image()->isLazyGenerated()); |
@@ -76,7 +78,8 @@ class ScopedImagePaint { |
static base::Optional<ScopedImagePaint> TryCreate( |
ImageDecodeCache* image_decode_cache, |
const SkMatrix& ctm, |
- const SkPaint& paint) { |
+ const SkPaint& paint, |
+ const gfx::ColorSpace& target_color_space) { |
SkShader* shader = paint.getShader(); |
if (!shader) |
return base::Optional<ScopedImagePaint>(); |
@@ -93,7 +96,7 @@ class ScopedImagePaint { |
ScopedDecodedImageLock scoped_lock( |
image_decode_cache, sk_ref_sp(image), |
SkRect::MakeIWH(image->width(), image->height()), total_image_matrix, |
- &paint); |
+ &paint, target_color_space); |
const DecodedDrawImage& decoded_image = scoped_lock.decoded_image(); |
if (!decoded_image.image()) |
return base::Optional<ScopedImagePaint>(); |
@@ -130,10 +133,12 @@ const SkImage* GetImageInPaint(const SkPaint& paint) { |
ImageHijackCanvas::ImageHijackCanvas(int width, |
int height, |
ImageDecodeCache* image_decode_cache, |
- const ImageIdFlatSet* images_to_skip) |
+ const ImageIdFlatSet* images_to_skip, |
+ const gfx::ColorSpace& target_color_space) |
: SkNWayCanvas(width, height), |
image_decode_cache_(image_decode_cache), |
- images_to_skip_(images_to_skip) {} |
+ images_to_skip_(images_to_skip), |
+ target_color_space_(target_color_space) {} |
void ImageHijackCanvas::onDrawPicture(const SkPicture* picture, |
const SkMatrix* matrix, |
@@ -164,7 +169,8 @@ void ImageHijackCanvas::onDrawImage(const SkImage* image, |
ScopedDecodedImageLock scoped_lock( |
image_decode_cache_, sk_ref_sp(image), |
- SkRect::MakeIWH(image->width(), image->height()), ctm, paint); |
+ SkRect::MakeIWH(image->width(), image->height()), ctm, paint, |
+ target_color_space_); |
const DecodedDrawImage& decoded_image = scoped_lock.decoded_image(); |
if (!decoded_image.image()) |
return; |
@@ -210,7 +216,7 @@ void ImageHijackCanvas::onDrawImageRect(const SkImage* image, |
matrix.postConcat(getTotalMatrix()); |
ScopedDecodedImageLock scoped_lock(image_decode_cache_, sk_ref_sp(image), |
- *src, matrix, paint); |
+ *src, matrix, paint, target_color_space_); |
const DecodedDrawImage& decoded_image = scoped_lock.decoded_image(); |
if (!decoded_image.image()) |
return; |
@@ -237,8 +243,8 @@ void ImageHijackCanvas::onDrawRect(const SkRect& r, const SkPaint& paint) { |
if (ShouldSkipImageInPaint(paint)) |
return; |
- base::Optional<ScopedImagePaint> image_paint = |
- ScopedImagePaint::TryCreate(image_decode_cache_, getTotalMatrix(), paint); |
+ base::Optional<ScopedImagePaint> image_paint = ScopedImagePaint::TryCreate( |
+ image_decode_cache_, getTotalMatrix(), paint, target_color_space_); |
if (!image_paint.has_value()) { |
SkNWayCanvas::onDrawRect(r, paint); |
return; |
@@ -252,8 +258,8 @@ void ImageHijackCanvas::onDrawPath(const SkPath& path, const SkPaint& paint) { |
if (ShouldSkipImageInPaint(paint)) |
return; |
- base::Optional<ScopedImagePaint> image_paint = |
- ScopedImagePaint::TryCreate(image_decode_cache_, getTotalMatrix(), paint); |
+ base::Optional<ScopedImagePaint> image_paint = ScopedImagePaint::TryCreate( |
+ image_decode_cache_, getTotalMatrix(), paint, target_color_space_); |
if (!image_paint.has_value()) { |
SkNWayCanvas::onDrawPath(path, paint); |
return; |
@@ -267,8 +273,8 @@ void ImageHijackCanvas::onDrawOval(const SkRect& r, const SkPaint& paint) { |
if (ShouldSkipImageInPaint(paint)) |
return; |
- base::Optional<ScopedImagePaint> image_paint = |
- ScopedImagePaint::TryCreate(image_decode_cache_, getTotalMatrix(), paint); |
+ base::Optional<ScopedImagePaint> image_paint = ScopedImagePaint::TryCreate( |
+ image_decode_cache_, getTotalMatrix(), paint, target_color_space_); |
if (!image_paint.has_value()) { |
SkNWayCanvas::onDrawOval(r, paint); |
return; |
@@ -286,8 +292,8 @@ void ImageHijackCanvas::onDrawArc(const SkRect& r, |
if (ShouldSkipImageInPaint(paint)) |
return; |
- base::Optional<ScopedImagePaint> image_paint = |
- ScopedImagePaint::TryCreate(image_decode_cache_, getTotalMatrix(), paint); |
+ base::Optional<ScopedImagePaint> image_paint = ScopedImagePaint::TryCreate( |
+ image_decode_cache_, getTotalMatrix(), paint, target_color_space_); |
if (!image_paint.has_value()) { |
SkNWayCanvas::onDrawArc(r, start_angle, sweep_angle, use_center, paint); |
return; |
@@ -302,8 +308,8 @@ void ImageHijackCanvas::onDrawRRect(const SkRRect& rr, const SkPaint& paint) { |
if (ShouldSkipImageInPaint(paint)) |
return; |
- base::Optional<ScopedImagePaint> image_paint = |
- ScopedImagePaint::TryCreate(image_decode_cache_, getTotalMatrix(), paint); |
+ base::Optional<ScopedImagePaint> image_paint = ScopedImagePaint::TryCreate( |
+ image_decode_cache_, getTotalMatrix(), paint, target_color_space_); |
if (!image_paint.has_value()) { |
SkNWayCanvas::onDrawRRect(rr, paint); |
return; |