WebKit Bugzilla
New
Browse
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
RESOLVED FIXED
158983
<img> with a wide gamut PDF does not display using a wide gamut color space
https://bugs.webkit.org/show_bug.cgi?id=158983
Summary
<img> with a wide gamut PDF does not display using a wide gamut color space
Antoine Quint
Reported
2016-06-21 04:32:33 PDT
If you have an <img> element pointing to a wide gamut PDF resource, the displayed PDF will not display the full color spectrum of the document.
Attachments
Patch
(11.31 KB, patch)
2016-06-21 05:03 PDT
,
Antoine Quint
no flags
Details
Formatted Diff
Diff
Patch
(11.19 KB, patch)
2016-06-21 05:44 PDT
,
Antoine Quint
no flags
Details
Formatted Diff
Diff
Patch
(11.18 KB, patch)
2016-06-21 06:08 PDT
,
Antoine Quint
no flags
Details
Formatted Diff
Diff
Archive of layout-test-results from ews100 for mac-yosemite
(1.22 MB, application/zip)
2016-06-21 07:04 PDT
,
Build Bot
no flags
Details
Archive of layout-test-results from ews106 for mac-yosemite-wk2
(967.62 KB, application/zip)
2016-06-21 07:09 PDT
,
Build Bot
no flags
Details
Archive of layout-test-results from ews113 for mac-yosemite
(1.71 MB, application/zip)
2016-06-21 07:11 PDT
,
Build Bot
no flags
Details
Patch
(11.46 KB, patch)
2016-06-22 02:40 PDT
,
Antoine Quint
no flags
Details
Formatted Diff
Diff
Patch
(11.42 KB, patch)
2016-06-22 02:52 PDT
,
Antoine Quint
no flags
Details
Formatted Diff
Diff
Patch
(11.42 KB, patch)
2016-06-22 02:56 PDT
,
Antoine Quint
no flags
Details
Formatted Diff
Diff
Patch
(11.52 KB, patch)
2016-06-22 03:39 PDT
,
Antoine Quint
no flags
Details
Formatted Diff
Diff
Patch
(11.52 KB, patch)
2016-06-22 03:43 PDT
,
Antoine Quint
no flags
Details
Formatted Diff
Diff
Patch
(35.27 KB, patch)
2016-06-23 07:10 PDT
,
Antoine Quint
no flags
Details
Formatted Diff
Diff
Patch
(35.29 KB, patch)
2016-06-23 09:35 PDT
,
Antoine Quint
no flags
Details
Formatted Diff
Diff
Patch
(21.41 KB, patch)
2016-07-01 14:13 PDT
,
Antoine Quint
no flags
Details
Formatted Diff
Diff
Patch
(21.76 KB, patch)
2016-07-01 14:30 PDT
,
Antoine Quint
no flags
Details
Formatted Diff
Diff
Archive of layout-test-results from ews103 for mac-yosemite
(910.07 KB, application/zip)
2016-07-01 15:18 PDT
,
Build Bot
no flags
Details
Archive of layout-test-results from ews105 for mac-yosemite-wk2
(931.36 KB, application/zip)
2016-07-01 15:23 PDT
,
Build Bot
no flags
Details
Archive of layout-test-results from ews114 for mac-yosemite
(1.63 MB, application/zip)
2016-07-01 15:29 PDT
,
Build Bot
no flags
Details
Archive of layout-test-results from ews122 for ios-simulator-wk2
(2.65 MB, application/zip)
2016-07-01 15:36 PDT
,
Build Bot
no flags
Details
Patch
(30.95 KB, patch)
2016-07-05 05:22 PDT
,
Antoine Quint
no flags
Details
Formatted Diff
Diff
Archive of layout-test-results from ews103 for mac-yosemite
(974.93 KB, application/zip)
2016-07-05 06:12 PDT
,
Build Bot
no flags
Details
Archive of layout-test-results from ews106 for mac-yosemite-wk2
(782.31 KB, application/zip)
2016-07-05 06:17 PDT
,
Build Bot
no flags
Details
Archive of layout-test-results from ews124 for ios-simulator-wk2
(2.83 MB, application/zip)
2016-07-05 06:25 PDT
,
Build Bot
no flags
Details
Archive of layout-test-results from ews113 for mac-yosemite
(1.44 MB, application/zip)
2016-07-05 06:25 PDT
,
Build Bot
no flags
Details
Patch
(30.91 KB, patch)
2016-07-06 03:11 PDT
,
Antoine Quint
no flags
Details
Formatted Diff
Diff
Archive of layout-test-results from ews102 for mac-yosemite
(814.39 KB, application/zip)
2016-07-06 04:02 PDT
,
Build Bot
no flags
Details
Archive of layout-test-results from ews107 for mac-yosemite-wk2
(827.16 KB, application/zip)
2016-07-06 04:05 PDT
,
Build Bot
no flags
Details
Archive of layout-test-results from ews117 for mac-yosemite
(1.45 MB, application/zip)
2016-07-06 04:13 PDT
,
Build Bot
no flags
Details
Archive of layout-test-results from ews123 for ios-simulator-wk2
(2.60 MB, application/zip)
2016-07-06 04:15 PDT
,
Build Bot
no flags
Details
Patch
(31.91 KB, patch)
2016-07-06 07:00 PDT
,
Antoine Quint
no flags
Details
Formatted Diff
Diff
Patch
(32.85 KB, patch)
2016-07-06 08:11 PDT
,
Antoine Quint
no flags
Details
Formatted Diff
Diff
Patch
(33.64 KB, patch)
2016-07-07 05:26 PDT
,
Antoine Quint
no flags
Details
Formatted Diff
Diff
Show Obsolete
(31)
View All
Add attachment
proposed patch, testcase, etc.
Antoine Quint
Comment 1
2016-06-21 04:32:51 PDT
<
rdar://problem/25720247
>
Antoine Quint
Comment 2
2016-06-21 05:03:50 PDT
Created
attachment 281731
[details]
Patch
WebKit Commit Bot
Comment 3
2016-06-21 05:04:40 PDT
Attachment 281731
[details]
did not pass style-queue: ERROR: Source/WebCore/platform/graphics/ImageBuffer.h:83: The parameter name "colorSpace" adds no information, so it should be removed. [readability/parameter_name] [5] Total errors found: 1 in 11 files If any of these errors are false positives, please file a bug against check-webkit-style.
Antoine Quint
Comment 4
2016-06-21 05:44:15 PDT
Created
attachment 281734
[details]
Patch
WebKit Commit Bot
Comment 5
2016-06-21 05:46:57 PDT
Attachment 281734
[details]
did not pass style-queue: ERROR: Source/WebCore/platform/graphics/ImageBuffer.h:83: The parameter name "colorSpace" adds no information, so it should be removed. [readability/parameter_name] [5] Total errors found: 1 in 11 files If any of these errors are false positives, please file a bug against check-webkit-style.
Antoine Quint
Comment 6
2016-06-21 06:08:12 PDT
Created
attachment 281735
[details]
Patch
Build Bot
Comment 7
2016-06-21 07:04:38 PDT
Comment on
attachment 281735
[details]
Patch
Attachment 281735
[details]
did not pass mac-ews (mac): Output:
http://webkit-queues.webkit.org/results/1541858
New failing tests: fast/css/webkit-mask-crash-td-2.html fast/css/webkit-mask-crash-fieldset-legend.html fast/css/webkit-mask-crash-td.html fast/css/webkit-mask-crash-figure.html fast/css/webkit-mask-crash-table.html
Build Bot
Comment 8
2016-06-21 07:04:41 PDT
Created
attachment 281739
[details]
Archive of layout-test-results from ews100 for mac-yosemite The attached test failures were seen while running run-webkit-tests on the mac-ews. Bot: ews100 Port: mac-yosemite Platform: Mac OS X 10.10.5
Build Bot
Comment 9
2016-06-21 07:09:18 PDT
Comment on
attachment 281735
[details]
Patch
Attachment 281735
[details]
did not pass mac-wk2-ews (mac-wk2): Output:
http://webkit-queues.webkit.org/results/1541861
New failing tests: fast/css/webkit-mask-crash-td-2.html fast/css/webkit-mask-crash-fieldset-legend.html fast/css/webkit-mask-crash-td.html fast/css/webkit-mask-crash-figure.html fast/css/webkit-mask-crash-table.html
Build Bot
Comment 10
2016-06-21 07:09:21 PDT
Created
attachment 281740
[details]
Archive of layout-test-results from ews106 for mac-yosemite-wk2 The attached test failures were seen while running run-webkit-tests on the mac-wk2-ews. Bot: ews106 Port: mac-yosemite-wk2 Platform: Mac OS X 10.10.5
Build Bot
Comment 11
2016-06-21 07:11:04 PDT
Comment on
attachment 281735
[details]
Patch
Attachment 281735
[details]
did not pass mac-debug-ews (mac): Output:
http://webkit-queues.webkit.org/results/1541860
New failing tests: fast/css/webkit-mask-crash-td-2.html fast/css/webkit-mask-crash-fieldset-legend.html fast/css/webkit-mask-crash-td.html fast/css/webkit-mask-crash-figure.html fast/css/webkit-mask-crash-table.html
Build Bot
Comment 12
2016-06-21 07:11:07 PDT
Created
attachment 281741
[details]
Archive of layout-test-results from ews113 for mac-yosemite The attached test failures were seen while running run-webkit-tests on the mac-debug-ews. Bot: ews113 Port: mac-yosemite Platform: Mac OS X 10.10.5
Antoine Quint
Comment 13
2016-06-21 07:21:26 PDT
I don't think these test failures have anything to do with my patch.
Simon Fraser (smfr)
Comment 14
2016-06-21 08:45:19 PDT
Comment on
attachment 281735
[details]
Patch You can't do it this way. You need to get the colorspace from the target context; it's the screen colorspace, and may be something other than sRGB or P3.
Antoine Quint
Comment 15
2016-06-21 08:54:38 PDT
(In reply to
comment #14
)
> Comment on
attachment 281735
[details]
> Patch > > You can't do it this way. You need to get the colorspace from the target > context; it's the screen colorspace, and may be something other than sRGB or > P3.
Which part of the code are you referring to exactly? Are you referring to this line? context.setSupportsExtendedColor(screenSupportsExtendedColor(this)); If so, the call to screenSupportsExtendedColor() does query the screen's color space.
Dean Jackson
Comment 16
2016-06-21 14:30:11 PDT
Comment on
attachment 281735
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=281735&action=review
> Source/WebCore/page/FrameView.cpp:4141 > +#if PLATFORM(MAC) > + context.setSupportsExtendedColor(screenSupportsExtendedColor(this)); > +#endif
I don't think we want to call this every time we paint. screenSupportsExtendedColor on macOS copies the ICC profile from the screen's space, then creates a temporary colorsync profile to query the value. We should have some way to cache the value.
> Source/WebCore/platform/graphics/GraphicsContext.h:321 > + void setSupportsExtendedColor(bool);
You should provide a stub implementation of this too.
> Source/WebCore/platform/graphics/cg/GraphicsContextCG.cpp:105 > +#if PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101200 > + static CGColorSpaceRef displayP3Space = CGColorSpaceCreateWithName(kCGColorSpaceDisplayP3); > + if (!displayP3Space) > + displayP3Space = deviceRGBColorSpaceRef(); > +#else > + static CGColorSpaceRef displayP3Space = deviceRGBColorSpaceRef(); > +#endif > + return displayP3Space; > +}
kCGColorSpaceDisplayP3 is available from 10.10 onwards, so I think you just need #if PLATFORM(MAC) (to exclude Windows). But why are you limiting it to MAC? It's been in iOS since 9.0, so I think you really want #if !PLATFORM(WINDOWS) This would also avoid returning the deviceRGB space in most cases, which I don't like.
> Source/WebCore/platform/graphics/cg/PDFDocumentImage.cpp:174 > + ColorSpace colorSpace = context.supportsExtendedColor() ? ColorSpaceDisplayP3 : ColorSpaceSRGB; > + m_cachedImageBuffer = ImageBuffer::createCompatibleBuffer(FloatRect(enclosingIntRect(dstRect)).size(), context, true, colorSpace);
I think what Simon is getting at here is that we should create an ImageBuffer that matches the Screen, no matter what it is or what we support. You could imagine someone with a display set to AdobeRGB, and a PDF that has content in AdobeRGB (which is very likely to happen, since AdobeRGB is better suited for print workflows than Display P3). We probably don't want to draw into a P3 space and then have is converted to AdobeRGB. What you have might be ok for now though, because (a) it's better than the existing situation, (b) modern Apple displays are P3, (c) we would have to add code to support a bunch of common color profiles into GraphicsContext
Alexey Proskuryakov
Comment 17
2016-06-21 20:28:14 PDT
> I don't think these test failures have anything to do with my patch.
They are certainly caused by the patch. You can tell by looking inside the attached results archives: Thread 0 Crashed:: Dispatch queue: com.apple.main-thread 0 com.apple.WebCore 0x00000001031b0ce7 WebCore::GraphicsContext::setSupportsExtendedColor(bool) + 7 1 com.apple.WebCore 0x000000010317d8b4 WebCore::FrameView::paintContents(WebCore::GraphicsContext&, WebCore::IntRect const&) + 244 2 com.apple.WebCore 0x000000010317d76f WebCore::FrameView::paintControlTints() + 175
Antoine Quint
Comment 18
2016-06-22 02:40:45 PDT
Created
attachment 281829
[details]
Patch
Antoine Quint
Comment 19
2016-06-22 02:52:43 PDT
Created
attachment 281831
[details]
Patch
Antoine Quint
Comment 20
2016-06-22 02:56:05 PDT
Created
attachment 281832
[details]
Patch
Antoine Quint
Comment 21
2016-06-22 03:00:49 PDT
(In reply to
comment #16
)
> Comment on
attachment 281735
[details]
> Patch > > View in context: >
https://bugs.webkit.org/attachment.cgi?id=281735&action=review
> > > Source/WebCore/page/FrameView.cpp:4141 > > +#if PLATFORM(MAC) > > + context.setSupportsExtendedColor(screenSupportsExtendedColor(this)); > > +#endif > > I don't think we want to call this every time we paint. > screenSupportsExtendedColor on macOS copies the ICC profile from the > screen's space, then creates a temporary colorsync profile to query the > value. We should have some way to cache the value.
I'll look into this.
> > Source/WebCore/platform/graphics/GraphicsContext.h:321 > > + void setSupportsExtendedColor(bool); > > You should provide a stub implementation of this too.
There isn't one for GraphicsContext::setIsAcceleratedContext() so I didn't add one for setSupportsExtendedColor(). Is it necessary?
> > Source/WebCore/platform/graphics/cg/GraphicsContextCG.cpp:105 > > +#if PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101200 > > + static CGColorSpaceRef displayP3Space = CGColorSpaceCreateWithName(kCGColorSpaceDisplayP3); > > + if (!displayP3Space) > > + displayP3Space = deviceRGBColorSpaceRef(); > > +#else > > + static CGColorSpaceRef displayP3Space = deviceRGBColorSpaceRef(); > > +#endif > > + return displayP3Space; > > +} > > kCGColorSpaceDisplayP3 is available from 10.10 onwards, so I think you just > need #if PLATFORM(MAC) (to exclude Windows). But why are you limiting it to > MAC? It's been in iOS since 9.0, so I think you really want #if > !PLATFORM(WINDOWS) > > This would also avoid returning the deviceRGB space in most cases, which I > don't like.
I've changed it to #if PLATFORM(COCOA). Same for the call to context.setSupportsExtendedColor() in FrameView::paintContents().
> > Source/WebCore/platform/graphics/cg/PDFDocumentImage.cpp:174 > > + ColorSpace colorSpace = context.supportsExtendedColor() ? ColorSpaceDisplayP3 : ColorSpaceSRGB; > > + m_cachedImageBuffer = ImageBuffer::createCompatibleBuffer(FloatRect(enclosingIntRect(dstRect)).size(), context, true, colorSpace); > > I think what Simon is getting at here is that we should create an > ImageBuffer that matches the Screen, no matter what it is or what we support. > > You could imagine someone with a display set to AdobeRGB, and a PDF that has > content in AdobeRGB (which is very likely to happen, since AdobeRGB is > better suited for print workflows than Display P3). We probably don't want > to draw into a P3 space and then have is converted to AdobeRGB. > > What you have might be ok for now though, because (a) it's better than the > existing situation, (b) modern Apple displays are P3, (c) we would have to > add code to support a bunch of common color profiles into GraphicsContext
Yes, we would indeed have to add a bunch of new color spaces in ColorSpace.h, or fall back to sRGB if we didn't, which would essentially be the same as what this patch does in a simpler way.
Antoine Quint
Comment 22
2016-06-22 03:01:05 PDT
(In reply to
comment #17
)
> > I don't think these test failures have anything to do with my patch. > > They are certainly caused by the patch. You can tell by looking inside the > attached results archives: > > Thread 0 Crashed:: Dispatch queue: com.apple.main-thread > 0 com.apple.WebCore 0x00000001031b0ce7 > WebCore::GraphicsContext::setSupportsExtendedColor(bool) + 7 > 1 com.apple.WebCore 0x000000010317d8b4 > WebCore::FrameView::paintContents(WebCore::GraphicsContext&, > WebCore::IntRect const&) + 244 > 2 com.apple.WebCore 0x000000010317d76f > WebCore::FrameView::paintControlTints() + 175
I fixed this crash.
Antoine Quint
Comment 23
2016-06-22 03:39:29 PDT
Created
attachment 281833
[details]
Patch
Antoine Quint
Comment 24
2016-06-22 03:43:11 PDT
Created
attachment 281834
[details]
Patch
Antoine Quint
Comment 25
2016-06-22 03:45:24 PDT
(In reply to
comment #16
)
> Comment on
attachment 281735
[details]
> Patch > > View in context: >
https://bugs.webkit.org/attachment.cgi?id=281735&action=review
> > kCGColorSpaceDisplayP3 is available from 10.10 onwards, so I think you just > need #if PLATFORM(MAC) (to exclude Windows). But why are you limiting it to > MAC? It's been in iOS since 9.0, so I think you really want #if > !PLATFORM(WINDOWS)
Actually, kCGColorSpaceDisplayP3 is available on macOS 10.11.2 and iOS 9.3 onwards per the CGColorSpace.h header.
Simon Fraser (smfr)
Comment 26
2016-06-22 10:17:46 PDT
Comment on
attachment 281834
[details]
Patch I still think this is the wrong approach. You need to get the destination context's colorSpace.
Dean Jackson
Comment 27
2016-06-22 14:19:08 PDT
(In reply to
comment #26
)
> I still think this is the wrong approach. You need to get the destination > context's colorSpace.
I don't think the destination's colorSpace matters, assuming that ImageBuffer is color managed correctly. What's more important is making sure we tag the ImageBuffer used for the PDF with the most appropriate color space. We really need to know in advance if the PDF goes outside the sRGB gamut. If it doesn't, and we create an 8bpp P3 buffer, then we'll lose color accuracy painting sRGB into it. If it does go outside sRGB, we're probably better off creating a deeper buffer and tagging it with extended sRGB (again assuming that CG + PDF knows how to render into such a buffer). Maybe just an extended sRGB or P3 profile will be enough.
Simon Fraser (smfr)
Comment 28
2016-06-22 14:34:24 PDT
(In reply to
comment #27
)
> (In reply to
comment #26
) > > > I still think this is the wrong approach. You need to get the destination > > context's colorSpace. > > I don't think the destination's colorSpace matters, assuming that > ImageBuffer is color managed correctly. What's more important is making sure > we tag the ImageBuffer used for the PDF with the most appropriate color > space.
But there's no point making a P3 buffer for the PDF if the final destination is sRGB. In general, we want intermediate buffers to match the destination context. It should behave as if those buffers weren't really in the rendering path.
> We really need to know in advance if the PDF goes outside the sRGB gamut. If > it doesn't, and we create an 8bpp P3 buffer, then we'll lose color accuracy > painting sRGB into it. If it does go outside sRGB, we're probably better off > creating a deeper buffer and tagging it with extended sRGB (again assuming > that CG + PDF knows how to render into such a buffer). Maybe just an > extended sRGB or P3 profile will be enough.
If we just match the destination context, we always get it right.
Dean Jackson
Comment 29
2016-06-22 15:43:58 PDT
(In reply to
comment #28
)
> (In reply to
comment #27
) > > (In reply to
comment #26
) > > > > > I still think this is the wrong approach. You need to get the destination > > > context's colorSpace. > > > > I don't think the destination's colorSpace matters, assuming that > > ImageBuffer is color managed correctly. What's more important is making sure > > we tag the ImageBuffer used for the PDF with the most appropriate color > > space. > > But there's no point making a P3 buffer for the PDF if the final destination > is sRGB.
Right, sorry, I wasn't clear. We never need a P3 buffer on an sRGB device. Similarly, we don't need a P3 buffer if the PDF content is just sRGB. Aren't we just better off letting CG do the work in that case? Otherwise we're drawing a narrow image into a wider buffer, but at the same bit depth, ending up with reduced color accuracy. Instead if we passed the sRGB buffer to the window server (or CG), it might have a deeper backing store when it draws. If the PDF content is outside sRGB, then we do want a P3 buffer (although maybe we want extended sRGB, since a color-managed xPDF is likely to be AdobeRGB).
> > In general, we want intermediate buffers to match the destination context. > It should > behave as if those buffers weren't really in the rendering path. > > > We really need to know in advance if the PDF goes outside the sRGB gamut. If > > it doesn't, and we create an 8bpp P3 buffer, then we'll lose color accuracy > > painting sRGB into it. If it does go outside sRGB, we're probably better off > > creating a deeper buffer and tagging it with extended sRGB (again assuming > > that CG + PDF knows how to render into such a buffer). Maybe just an > > extended sRGB or P3 profile will be enough. > > If we just match the destination context, we always get it right.
Do we? But we don't create P3 buffers for all our content on the Web, because it's supposed to be sRGB. If we have 8bpp, then we have 256 steps for each channel. Drawing sRGB content into an sRGB buffer means we keep all 256 steps. Drawing sRGB into a P3 buffer means we can only use 240-ish steps in the red channel, because the extra space covers the stuff outside of sRGB. Even if that P3 buffer goes through intermediate P3 buffers, and is drawn to a P3 display, we've lost data. If we knew in advance it was only sRGB, and used an sRGB buffer, and that buffer made it to the display, it could be color matched there, hopefully without loss. But, honestly, I'm making all this up as I go along, so it could be all wrong.
Dean Jackson
Comment 30
2016-06-22 15:50:34 PDT
My suggestion: - Device is sRGB - all PDF buffers are sRGB, no matter what their content - Device is P3 (supportsExtendedColor) - If PDF contains content outside of sRGB, create a P3 buffer (or an extended sRGB buffer, or whatever the target device is) - Otherwise, create an sRGB buffer At the moment we only detect sRGB and P3 devices right? And we don't have other named ColorProfiles. What should we do if the target device is something else, like AdobeRGB? Also, a followup patch might be to create a deeper buffer if the PDF has out-of-sRGB content.
Dean Jackson
Comment 31
2016-06-22 16:17:55 PDT
Simon and I talked over IRC, and he convinced me to agree with him :) For now, ignore what the PDF is and always create a buffer with the device colorspace. On iOS, that will be sRGB or P3. On Mac, that could be anything :) Ultimately we'll want to create deeper buffers for such content, at which time we might start being smarter about what spaces we use.
Antoine Quint
Comment 32
2016-06-23 00:58:37 PDT
So, should all ImageBuffers be created with a color space matching the target display color space? We could remove the color space arguments at this stage.
Antoine Quint
Comment 33
2016-06-23 07:10:04 PDT
Created
attachment 281907
[details]
Patch
Antoine Quint
Comment 34
2016-06-23 09:35:56 PDT
Created
attachment 281912
[details]
Patch
Dean Jackson
Comment 35
2016-06-23 11:23:52 PDT
Comment on
attachment 281912
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=281912&action=review
> Source/WebCore/platform/graphics/cg/GraphicsContextCG.cpp:97 > +#if (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101200) || (PLATFORM(IOS) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 100000)
Sucks that we need that IPHONE MIN thing, since we'll only ship on iOS 10. It's just that we still have iOS 9 builders.
> Source/WebCore/platform/graphics/cg/GraphicsContextCG.cpp:1682 > + // FIXME
FIXME
> Source/WebCore/platform/graphics/cg/PDFDocumentImage.cpp:206 > + if (CGPDFPageContainsWideGamutContent(page)) > + return true;
Is this SPI? Did you declare it in an SPI.h file for Open Source builders?
Antoine Quint
Comment 36
2016-07-01 14:13:27 PDT
Created
attachment 282577
[details]
Patch
Antoine Quint
Comment 37
2016-07-01 14:30:44 PDT
Created
attachment 282582
[details]
Patch
Build Bot
Comment 38
2016-07-01 15:18:00 PDT
Comment on
attachment 282582
[details]
Patch
Attachment 282582
[details]
did not pass mac-ews (mac): Output:
http://webkit-queues.webkit.org/results/1609259
New failing tests: fast/backgrounds/scaled-gradient-background.html fast/canvas/2d.fillText.gradient.html
Build Bot
Comment 39
2016-07-01 15:18:04 PDT
Created
attachment 282589
[details]
Archive of layout-test-results from ews103 for mac-yosemite The attached test failures were seen while running run-webkit-tests on the mac-ews. Bot: ews103 Port: mac-yosemite Platform: Mac OS X 10.10.5
Build Bot
Comment 40
2016-07-01 15:23:23 PDT
Comment on
attachment 282582
[details]
Patch
Attachment 282582
[details]
did not pass mac-wk2-ews (mac-wk2): Output:
http://webkit-queues.webkit.org/results/1609268
New failing tests: fast/backgrounds/scaled-gradient-background.html fast/canvas/2d.fillText.gradient.html
Build Bot
Comment 41
2016-07-01 15:23:27 PDT
Created
attachment 282592
[details]
Archive of layout-test-results from ews105 for mac-yosemite-wk2 The attached test failures were seen while running run-webkit-tests on the mac-wk2-ews. Bot: ews105 Port: mac-yosemite-wk2 Platform: Mac OS X 10.10.5
Build Bot
Comment 42
2016-07-01 15:29:51 PDT
Comment on
attachment 282582
[details]
Patch
Attachment 282582
[details]
did not pass mac-debug-ews (mac): Output:
http://webkit-queues.webkit.org/results/1609252
New failing tests: fast/backgrounds/scaled-gradient-background.html fast/canvas/2d.fillText.gradient.html
Build Bot
Comment 43
2016-07-01 15:29:55 PDT
Created
attachment 282593
[details]
Archive of layout-test-results from ews114 for mac-yosemite The attached test failures were seen while running run-webkit-tests on the mac-debug-ews. Bot: ews114 Port: mac-yosemite Platform: Mac OS X 10.10.5
Build Bot
Comment 44
2016-07-01 15:36:31 PDT
Comment on
attachment 282582
[details]
Patch
Attachment 282582
[details]
did not pass ios-sim-ews (ios-simulator-wk2): Output:
http://webkit-queues.webkit.org/results/1609262
New failing tests: fast/backgrounds/scaled-gradient-background.html css3/masking/mask-luminance-gradient.html css3/masking/mask-repeat-space-border.html fast/css/cascade/background-clip-and-webkit-background-clip-cascade-order.html fast/gradients/background-image-repeat-space.html svg/repaint/buffered-rendering-static-image.html
Build Bot
Comment 45
2016-07-01 15:36:35 PDT
Created
attachment 282594
[details]
Archive of layout-test-results from ews122 for ios-simulator-wk2 The attached test failures were seen while running run-webkit-tests on the ios-sim-ews. Bot: ews122 Port: ios-simulator-wk2 Platform: Mac OS X 10.11.4
Tim Horton
Comment 46
2016-07-02 11:05:57 PDT
Comment on
attachment 282582
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=282582&action=review
> Source/WebCore/platform/graphics/ImageBuffer.cpp:174 > +#if USE(CG)
This is fairly gross. Also what happened to hasAlpha!
> Source/WebCore/platform/graphics/ImageBuffer.cpp:176 > + auto buffer = ImageBuffer::createCompatibleBufferWithGraphicsContext(scaledSize, context);
Doesn't GraphicsContext already have a createCompatibleBuffer? Shouldn't you be using/fixing that?
> Source/WebCore/platform/graphics/ImageBuffer.h:177 > + ImageBuffer(const FloatSize&, float resolutionScale, CGColorSpaceRef, RenderingMode, bool& success);
Sam was not a fan of this and would like a real ColorSpace wrapper (we've outgrown the enum, I think).
> Source/WebCore/platform/graphics/cg/ImageBufferCG.cpp:78 > + CGColorSpaceRef colorSpace = CGContextCopyDeviceColorSpace(context.platformContext());
This looks like a leak?
> Source/WebCore/platform/graphics/cg/ImageBufferCG.cpp:80 > + std::unique_ptr<ImageBuffer> buffer(new ImageBuffer(size, resolutionScale, colorSpace, renderingMode, success));
No a make_unique? Do we not do that anymore for some reason?
> Source/WebCore/platform/graphics/cocoa/IOSurface.h:111 > + CGColorSpaceRef m_colorSpace;
Doesn't this need to be a RetainPtr now??
Simon Fraser (smfr)
Comment 47
2016-07-02 17:16:40 PDT
Comment on
attachment 282582
[details]
Patch r- based on tim's comments.
Antoine Quint
Comment 48
2016-07-03 03:25:57 PDT
(In reply to
comment #46
)
> Comment on
attachment 282582
[details]
> Patch > > View in context: >
https://bugs.webkit.org/attachment.cgi?id=282582&action=review
> > > Source/WebCore/platform/graphics/ImageBuffer.cpp:174 > > +#if USE(CG) > > This is fairly gross. Also what happened to hasAlpha!
Maybe we should instead move the implementation of ImageBuffer::createCompatibleBuffer(const FloatSize& size, const GraphicsContext& context, bool hasAlpha) outside of ImageBuffer.cpp and make implementations platform-specific so that we didn't have to have a CG-specific code branch here. As to hasAlpha, it's actually never used, if you look at ImageBuffer::createCompatibleBuffer(const FloatSize& size, float resolutionScale, ColorSpace colorSpace, const GraphicsContext& context, bool), hasAlpha is silently dropped too.
> > Source/WebCore/platform/graphics/ImageBuffer.cpp:176 > > + auto buffer = ImageBuffer::createCompatibleBufferWithGraphicsContext(scaledSize, context); > > Doesn't GraphicsContext already have a createCompatibleBuffer? Shouldn't you > be using/fixing that?
Not that I'm aware. Which method are you thinking about?
> > Source/WebCore/platform/graphics/ImageBuffer.h:177 > > + ImageBuffer(const FloatSize&, float resolutionScale, CGColorSpaceRef, RenderingMode, bool& success); > > Sam was not a fan of this and would like a real ColorSpace wrapper (we've > outgrown the enum, I think).
With this patch, we simply match the color space as configured by the user, which can be just about anything. I don't think it makes sense to keep going with named spaces in an enum. I'd like to look at the introduction of a ColorSpace wrapper as a separate task as this would be quite involved. I'll look at the rest of your comments as I rev up the patch, thanks Tim.
Tim Horton
Comment 49
2016-07-04 23:19:49 PDT
(In reply to
comment #48
)
> (In reply to
comment #46
) > > Comment on
attachment 282582
[details]
> > Patch > > > > View in context: > >
https://bugs.webkit.org/attachment.cgi?id=282582&action=review
> > > > > Source/WebCore/platform/graphics/ImageBuffer.cpp:174 > > > +#if USE(CG) > > > > This is fairly gross. Also what happened to hasAlpha! > > Maybe we should instead move the implementation of > ImageBuffer::createCompatibleBuffer(const FloatSize& size, const > GraphicsContext& context, bool hasAlpha) outside of ImageBuffer.cpp and make > implementations platform-specific so that we didn't have to have a > CG-specific code branch here.
Maybe!
> As to hasAlpha, it's actually never used, if you look at > ImageBuffer::createCompatibleBuffer(const FloatSize& size, float > resolutionScale, ColorSpace colorSpace, const GraphicsContext& context, > bool), hasAlpha is silently dropped too.
Heh.
> > > Source/WebCore/platform/graphics/ImageBuffer.cpp:176 > > > + auto buffer = ImageBuffer::createCompatibleBufferWithGraphicsContext(scaledSize, context); > > > > Doesn't GraphicsContext already have a createCompatibleBuffer? Shouldn't you > > be using/fixing that? > > Not that I'm aware. Which method are you thinking about?
It got removed recently! See:
https://trac.webkit.org/changeset/201629/trunk/Source/WebCore/platform/graphics/GraphicsContext.h
> > > Source/WebCore/platform/graphics/ImageBuffer.h:177 > > > + ImageBuffer(const FloatSize&, float resolutionScale, CGColorSpaceRef, RenderingMode, bool& success); > > > > Sam was not a fan of this and would like a real ColorSpace wrapper (we've > > outgrown the enum, I think). > > With this patch, we simply match the color space as configured by the user, > which can be just about anything. I don't think it makes sense to keep going > with named spaces in an enum.
Right, of course.
> I'd like to look at the introduction of a ColorSpace wrapper as a separate > task as this would be quite involved.
Agreed.
> I'll look at the rest of your comments as I rev up the patch, thanks Tim.
Antoine Quint
Comment 50
2016-07-05 05:22:23 PDT
Created
attachment 282772
[details]
Patch
Build Bot
Comment 51
2016-07-05 06:12:33 PDT
Comment on
attachment 282772
[details]
Patch
Attachment 282772
[details]
did not pass mac-ews (mac): Output:
http://webkit-queues.webkit.org/results/1629806
New failing tests: fast/backgrounds/scaled-gradient-background.html fast/canvas/2d.fillText.gradient.html
Build Bot
Comment 52
2016-07-05 06:12:38 PDT
Created
attachment 282777
[details]
Archive of layout-test-results from ews103 for mac-yosemite The attached test failures were seen while running run-webkit-tests on the mac-ews. Bot: ews103 Port: mac-yosemite Platform: Mac OS X 10.10.5
Build Bot
Comment 53
2016-07-05 06:17:04 PDT
Comment on
attachment 282772
[details]
Patch
Attachment 282772
[details]
did not pass mac-wk2-ews (mac-wk2): Output:
http://webkit-queues.webkit.org/results/1629814
New failing tests: fast/backgrounds/scaled-gradient-background.html fast/canvas/2d.fillText.gradient.html
Build Bot
Comment 54
2016-07-05 06:17:08 PDT
Created
attachment 282778
[details]
Archive of layout-test-results from ews106 for mac-yosemite-wk2 The attached test failures were seen while running run-webkit-tests on the mac-wk2-ews. Bot: ews106 Port: mac-yosemite-wk2 Platform: Mac OS X 10.10.5
Build Bot
Comment 55
2016-07-05 06:25:39 PDT
Comment on
attachment 282772
[details]
Patch
Attachment 282772
[details]
did not pass ios-sim-ews (ios-simulator-wk2): Output:
http://webkit-queues.webkit.org/results/1629820
New failing tests: fast/backgrounds/scaled-gradient-background.html css3/masking/mask-luminance-gradient.html css3/masking/mask-repeat-space-border.html fast/css/cascade/background-clip-and-webkit-background-clip-cascade-order.html fast/gradients/background-image-repeat-space.html svg/repaint/buffered-rendering-static-image.html
Build Bot
Comment 56
2016-07-05 06:25:43 PDT
Created
attachment 282780
[details]
Archive of layout-test-results from ews124 for ios-simulator-wk2 The attached test failures were seen while running run-webkit-tests on the ios-sim-ews. Bot: ews124 Port: ios-simulator-wk2 Platform: Mac OS X 10.11.4
Build Bot
Comment 57
2016-07-05 06:25:53 PDT
Comment on
attachment 282772
[details]
Patch
Attachment 282772
[details]
did not pass mac-debug-ews (mac): Output:
http://webkit-queues.webkit.org/results/1629813
New failing tests: fast/backgrounds/scaled-gradient-background.html fast/canvas/2d.fillText.gradient.html
Build Bot
Comment 58
2016-07-05 06:25:57 PDT
Created
attachment 282781
[details]
Archive of layout-test-results from ews113 for mac-yosemite The attached test failures were seen while running run-webkit-tests on the mac-debug-ews. Bot: ews113 Port: mac-yosemite Platform: Mac OS X 10.10.5
Tim Horton
Comment 59
2016-07-05 15:49:04 PDT
Comment on
attachment 282772
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=282772&action=review
> Source/WebCore/platform/graphics/cg/ImageBufferCG.cpp:80 > + RetainPtr<CGColorSpaceRef> colorSpace = CGContextCopyDeviceColorSpace(context.platformContext());
This is still a leak. Needs some adoption.
Brent Fulgham
Comment 60
2016-07-05 21:19:32 PDT
Comment on
attachment 282772
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=282772&action=review
>> Source/WebCore/platform/graphics/cg/ImageBufferCG.cpp:80 >> + RetainPtr<CGColorSpaceRef> colorSpace = CGContextCopyDeviceColorSpace(context.platformContext()); > > This is still a leak. Needs some adoption.
Note: CG on Windows doesn't support this at present. You may just need to create an sRGB color space if building for Windows.
Antoine Quint
Comment 61
2016-07-06 03:11:44 PDT
Created
attachment 282871
[details]
Patch
Build Bot
Comment 62
2016-07-06 04:02:49 PDT
Comment on
attachment 282871
[details]
Patch
Attachment 282871
[details]
did not pass mac-ews (mac): Output:
http://webkit-queues.webkit.org/results/1634988
New failing tests: fast/backgrounds/scaled-gradient-background.html fast/canvas/2d.fillText.gradient.html
Build Bot
Comment 63
2016-07-06 04:02:54 PDT
Created
attachment 282874
[details]
Archive of layout-test-results from ews102 for mac-yosemite The attached test failures were seen while running run-webkit-tests on the mac-ews. Bot: ews102 Port: mac-yosemite Platform: Mac OS X 10.10.5
Build Bot
Comment 64
2016-07-06 04:05:26 PDT
Comment on
attachment 282871
[details]
Patch
Attachment 282871
[details]
did not pass mac-wk2-ews (mac-wk2): Output:
http://webkit-queues.webkit.org/results/1634993
New failing tests: fast/backgrounds/scaled-gradient-background.html fast/canvas/2d.fillText.gradient.html
Build Bot
Comment 65
2016-07-06 04:05:32 PDT
Created
attachment 282875
[details]
Archive of layout-test-results from ews107 for mac-yosemite-wk2 The attached test failures were seen while running run-webkit-tests on the mac-wk2-ews. Bot: ews107 Port: mac-yosemite-wk2 Platform: Mac OS X 10.10.5
Build Bot
Comment 66
2016-07-06 04:13:05 PDT
Comment on
attachment 282871
[details]
Patch
Attachment 282871
[details]
did not pass mac-debug-ews (mac): Output:
http://webkit-queues.webkit.org/results/1635001
New failing tests: fast/backgrounds/scaled-gradient-background.html fast/canvas/2d.fillText.gradient.html
Build Bot
Comment 67
2016-07-06 04:13:10 PDT
Created
attachment 282876
[details]
Archive of layout-test-results from ews117 for mac-yosemite The attached test failures were seen while running run-webkit-tests on the mac-debug-ews. Bot: ews117 Port: mac-yosemite Platform: Mac OS X 10.10.5
Build Bot
Comment 68
2016-07-06 04:15:22 PDT
Comment on
attachment 282871
[details]
Patch
Attachment 282871
[details]
did not pass ios-sim-ews (ios-simulator-wk2): Output:
http://webkit-queues.webkit.org/results/1635005
New failing tests: fast/backgrounds/scaled-gradient-background.html css3/masking/mask-luminance-gradient.html css3/masking/mask-repeat-space-border.html fast/css/cascade/background-clip-and-webkit-background-clip-cascade-order.html fast/gradients/background-image-repeat-space.html svg/repaint/buffered-rendering-static-image.html
Build Bot
Comment 69
2016-07-06 04:15:27 PDT
Created
attachment 282877
[details]
Archive of layout-test-results from ews123 for ios-simulator-wk2 The attached test failures were seen while running run-webkit-tests on the ios-sim-ews. Bot: ews123 Port: ios-simulator-wk2 Platform: Mac OS X 10.11.4
Antoine Quint
Comment 70
2016-07-06 07:00:44 PDT
Created
attachment 282890
[details]
Patch
Antoine Quint
Comment 71
2016-07-06 08:11:41 PDT
Created
attachment 282895
[details]
Patch
WebKit Commit Bot
Comment 72
2016-07-06 11:47:27 PDT
Comment on
attachment 282895
[details]
Patch Clearing flags on attachment: 282895 Committed
r202867
: <
http://trac.webkit.org/changeset/202867
>
WebKit Commit Bot
Comment 73
2016-07-06 11:47:39 PDT
All reviewed patches have been landed. Closing bug.
WebKit Commit Bot
Comment 74
2016-07-06 14:08:36 PDT
Re-opened since this is blocked by
bug 159491
Ryan Haddad
Comment 75
2016-07-06 14:11:58 PDT
***
Bug 159486
has been marked as a duplicate of this bug. ***
Ryan Haddad
Comment 76
2016-07-06 14:17:58 PDT
Rolled out this change in
https://trac.webkit.org/r202877
. Please see
https://bugs.webkit.org/show_bug.cgi?id=159486
for crashlogs and links to test runs exhibiting the issue. It appears that ios-sim EWS caught this crash on one iteration of this patch before it was landed (
https://bugs.webkit.org/show_bug.cgi?id=158983#c690
), but it doesn't repro 100% of the time on release builds.
Alexey Proskuryakov
Comment 77
2016-07-06 19:03:39 PDT
Two threads in vImage, perhaps manipulating the same data?
Tim Horton
Comment 78
2016-07-06 22:32:50 PDT
(In reply to
comment #77
)
> Two threads in vImage, perhaps manipulating the same data?
I'm pretty sure vImage will happily use multiple threads, so I don't think that that is particularly alarming by itself (I see there are actually quite a number in some of the crash logs).
Antoine Quint
Comment 79
2016-07-07 04:35:22 PDT
So the crash reproduces 100% of the time for me when using WebKitTester. However, it never reproduces when running the same debug WebCore with MobileSafari.
Antoine Quint
Comment 80
2016-07-07 04:56:23 PDT
In WKT, we hit this assertion: ASSERT(endx.unsafeGet() <= size.width())
Antoine Quint
Comment 81
2016-07-07 05:26:00 PDT
Created
attachment 283007
[details]
Patch
WebKit Commit Bot
Comment 82
2016-07-07 12:33:11 PDT
Comment on
attachment 283007
[details]
Patch Clearing flags on attachment: 283007 Committed
r202927
: <
http://trac.webkit.org/changeset/202927
>
WebKit Commit Bot
Comment 83
2016-07-07 12:33:21 PDT
All reviewed patches have been landed. Closing bug.
Said Abou-Hallawa
Comment 84
2016-07-19 13:16:23 PDT
Comment on
attachment 283007
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=283007&action=review
> Source/WebCore/platform/graphics/cg/ImageBufferCG.cpp:88 > + std::unique_ptr<ImageBuffer> buffer(new ImageBuffer(scaledSize, resolutionScale, colorSpace.get(), renderingMode, success));
Why are sending scaledSize to the ImageBuffer constructor? In ImageBuffer::ImageBuffer(), it is going to be scaled it with resolutionScale: float scaledWidth = ceilf(resolutionScale * size.width()); float scaledHeight = ceilf(resolutionScale * size.height());
> Source/WebCore/platform/graphics/cg/ImageBufferCG.cpp:94 > + buffer->context().scale(FloatSize(scaledSize.width() / size.width(), scaledSize.height() / size.height()));
Why do we need to do this scaling? The ImageBuffer is created with the scaledSize to avoid lower resolution with zooming. Also there are inconsistencies here: In this function, scaledSize is calculated like this: scaledSize = ImageBuffer::compatibleBufferSize(size, context); which is almost equivalent to: scaledSize = size * context.scaleFactor(); But ImageBuffer::ImageBuffer(), m_size is calculated like this: m_size = IntSize(resolutionScale * size.width(), resolutionScale* size.width()); which can be rewritten like this: m_size = IntSize(context.scaleFactor().width() * size.width(), context.scaleFactor().width() * size.width()); Then In this function when scaling the context we do this buffer->context().scale(FloatSize(scaledSize.width() / size.width(), scaledSize.height() / size.height())); which can be rewritten like this: buffer->context().scale(context.scaleFactor()); I think we should we use "size * context.scaleFactor()" always instead of using "IntSize(context.scaleFactor().width() * size.width(), context.scaleFactor().width() * size.width())" sometimes.
Dean Jackson
Comment 85
2016-07-19 17:58:28 PDT
(In reply to
comment #84
)
> Comment on
attachment 283007
[details]
> Patch > > View in context: >
https://bugs.webkit.org/attachment.cgi?id=283007&action=review
> > > Source/WebCore/platform/graphics/cg/ImageBufferCG.cpp:88 > > + std::unique_ptr<ImageBuffer> buffer(new ImageBuffer(scaledSize, resolutionScale, colorSpace.get(), renderingMode, success)); > > Why are sending scaledSize to the ImageBuffer constructor? In > ImageBuffer::ImageBuffer(), it is going to be scaled it with resolutionScale: > > float scaledWidth = ceilf(resolutionScale * size.width()); > float scaledHeight = ceilf(resolutionScale * size.height());
Yeah, this definitely seems wrong.
> > Source/WebCore/platform/graphics/cg/ImageBufferCG.cpp:94 > > + buffer->context().scale(FloatSize(scaledSize.width() / size.width(), scaledSize.height() / size.height())); > > Why do we need to do this scaling? The ImageBuffer is created with the > scaledSize to avoid lower resolution with zooming. Also there are > inconsistencies here: > > In this function, scaledSize is calculated like this: > scaledSize = ImageBuffer::compatibleBufferSize(size, context); > > which is almost equivalent to: > scaledSize = size * context.scaleFactor(); > > But ImageBuffer::ImageBuffer(), m_size is calculated like this: > m_size = IntSize(resolutionScale * size.width(), resolutionScale* > size.width()); > > which can be rewritten like this: > m_size = IntSize(context.scaleFactor().width() * size.width(), > context.scaleFactor().width() * size.width()); > > Then In this function when scaling the context we do this > buffer->context().scale(FloatSize(scaledSize.width() / size.width(), > scaledSize.height() / size.height())); > > which can be rewritten like this: > buffer->context().scale(context.scaleFactor()); > > I think we should we use "size * context.scaleFactor()" always instead of > using "IntSize(context.scaleFactor().width() * size.width(), > context.scaleFactor().width() * size.width())" sometimes.
I agree.
Dean Jackson
Comment 86
2016-07-19 18:21:43 PDT
(In reply to
comment #85
)
> (In reply to
comment #84
) > > Comment on
attachment 283007
[details]
> > Patch > > > > View in context: > >
https://bugs.webkit.org/attachment.cgi?id=283007&action=review
> > > > > Source/WebCore/platform/graphics/cg/ImageBufferCG.cpp:88 > > > + std::unique_ptr<ImageBuffer> buffer(new ImageBuffer(scaledSize, resolutionScale, colorSpace.get(), renderingMode, success)); > > > > Why are sending scaledSize to the ImageBuffer constructor? In > > ImageBuffer::ImageBuffer(), it is going to be scaled it with resolutionScale: > > > > float scaledWidth = ceilf(resolutionScale * size.width()); > > float scaledHeight = ceilf(resolutionScale * size.height()); > > Yeah, this definitely seems wrong.
Actually, it's not strictly wrong. The default ImageBuffer::createCompatibleBuffer does this as well. The bug is that when you do this scaling, you should not then *also* pass in a resolution scale factor to the ImageBuffer constructor.
Dean Jackson
Comment 87
2016-07-19 18:25:18 PDT
> > But ImageBuffer::ImageBuffer(), m_size is calculated like this: > > m_size = IntSize(resolutionScale * size.width(), resolutionScale* > > size.width()); > > > > which can be rewritten like this: > > m_size = IntSize(context.scaleFactor().width() * size.width(), > > context.scaleFactor().width() * size.width());
Not really, since we don't have the context inside the constructor. We create another context later. We also call applyDeviceScaleFactor(), but this is so that we can have another entry point that creates a highDPI buffer without going through createCompatibleBuffer.
Note
You need to
log in
before you can comment on or make changes to this bug.
Top of Page
Format For Printing
XML
Clone This Bug