Re: [webkit-dev] border-radius lost when applying -webkit-filter
I'm testing on the Mac OS X port, which uses GraphicsLayerCA. Sounds like a bug with whichever compositor the win-cairo port is using, which I am not familiar with. --Myles On Jul 29, 2015, at 10:24 AM, Vienneau, Christopher cvienn...@ea.com wrote: Thanks Myles, Before I go through the effort of re-integrating, a few questions about your test: Which port are you testing on? I had been able to repro in our demo and the win-cairo demo (both using the 179714 build). Are you are using the GraphicsLayerCA as I mentioned below? If so regardless that your version is newer than mine, it *might* be why it’s working. Chris From: Myles C. Maxfield [mailto:mmaxfi...@apple.com] Sent: Tuesday, July 28, 2015 5:36 PM To: Vienneau, Christopher Cc: Webkit Development List Subject: Re: [webkit-dev] border-radius lost when applying -webkit-filter This works for me using the latest ToT build. I would recommend updating your source tree. --Myles On Jul 28, 2015, at 4:52 PM, Vienneau, Christopher cvienn...@ea.com mailto:cvienn...@ea.com wrote: Hi, I’m on a slightly older pull from WebKit trunk (179714) and I’m seeing this issue where border radius is lost if a css filter is also applied. My sample page looks like this: !DOCTYPE html html titleBasic CSS Filters/title headBasic CSS Filters/head style #pic { border-radius: 10px; -webkit-filter: sepia(0.8); } /style body div img id=pic src=testImage.jpg /div /body /html When I run with the above code the image is rendered with the Sepi filter, but the border radius is not applied. If I comment out the filter the image is properly rendered with the border radius applied. By debugging I can see that a different code path is followed in the two cases. Without the filter: WebKitd.dll!WebCore::GraphicsContext::clip(const WebCore::Path path, WebCore::WindRule windRule) Line 951C++ WebKitd.dll!WebCore::GraphicsContext::clipRoundedRect(const WebCore::FloatRoundedRect rect) Line 586 C++ WebKitd.dll!WebCore::RenderBoxModelObject::clipRoundedInnerRect(WebCore::GraphicsContext * context, const WebCore::FloatRect rect, const WebCore::FloatRoundedRect clipRect) Line 540 C++ WebKitd.dll!WebCore::RenderReplaced::paint(WebCore::PaintInfo paintInfo, const WebCore::LayoutPoint paintOffset) Line 180 C++ … we get into clipRoundedInnerRect which goes into the code which can perform the clipping operation, and all works as expected. With the Filter (3 callstacks below): WebKitd.dll!WebCore::GraphicsLayer::setContentsClippingRect(const WebCore::FloatRoundedRect roundedRect) Line 377 C++ WebKitd.dll!WebCore::RenderLayerBacking::updateImageContents() Line 1960C++ WebKitd.dll!WebCore::RenderLayerBacking::updateConfiguration() Line 595 C++ WebKitd.dll!WebCore::RenderLayerCompositor::rebuildCompositingLayerTree(WebCore::RenderLayer layer, WTF::VectorWebCore::GraphicsLayer *,0,WTF::CrashOnOverflow childLayersOfEnclosingLayer, int depth) Line 1522 C++ … WebKitd.dll!WebCore::GraphicsLayer::setContentsClippingRect(const WebCore::FloatRoundedRect roundedRect) Line 377 C++ WebKitd.dll!WebCore::RenderLayerBacking::resetContentsRect() Line 1124 C++ WebKitd.dll!WebCore::RenderLayerBacking::updateAfterDescendants() Line 1003 C++ WebKitd.dll!WebCore::RenderLayerCompositor::rebuildCompositingLayerTree(WebCore::RenderLayer layer, WTF::VectorWebCore::GraphicsLayer *,0,WTF::CrashOnOverflow childLayersOfEnclosingLayer, int depth) Line 1609 C++ … WebKitd.dll!WebCore::GraphicsLayer::setContentsClippingRect(const WebCore::FloatRoundedRect roundedRect) Line 377 C++ WebKitd.dll!WebCore::RenderLayerBacking::resetContentsRect() Line 1124 C++ WebKitd.dll!WebCore::RenderLayerBacking::updateAfterDescendants() Line 1003 C++ WebKitd.dll!WebCore::RenderLayerCompositor::updateCompositingDescendantGeometry(WebCore::RenderLayer compositingAncestor, WebCore::RenderLayer layer, bool compositedChildrenOnly) Line 1862 C++ … In this path we never call clipRoundedInnerRect, we do however call setContentsClippingRect with what looks like appropriate parameters to do what we would want. However upon investigation it appears that this data is not used by anything. Looking at other ports it seems that GraphicsLayerCA.cpp may be making use of this data in its clipping technique. Looking for fixes that might already be available I found the two below interesting, however note that I already have these in the change that we last took. They just sounds extremely similar
Re: [webkit-dev] border-radius lost when applying -webkit-filter
I'll see if I can reproduce this using our Apple Windows port, which also uses GraphicsLayerCA, though one based on Windows graphics primitives. The WinCairo compositor is based on the OpenGL ES backend, via the ANGLE library. Alex Christensen knows more about how that works. Thanks, -Brent Sent from my iPad On Jul 30, 2015, at 2:26 PM, Myles C. Maxfield mmaxfi...@apple.com wrote: I'm testing on the Mac OS X port, which uses GraphicsLayerCA. Sounds like a bug with whichever compositor the win-cairo port is using, which I am not familiar with. --Myles On Jul 29, 2015, at 10:24 AM, Vienneau, Christopher cvienn...@ea.com wrote: Thanks Myles, Before I go through the effort of re-integrating, a few questions about your test: Which port are you testing on? I had been able to repro in our demo and the win-cairo demo (both using the 179714 build). Are you are using the GraphicsLayerCA as I mentioned below? If so regardless that your version is newer than mine, it *might* be why it’s working. Chris From: Myles C. Maxfield [mailto:mmaxfi...@apple.com] Sent: Tuesday, July 28, 2015 5:36 PM To: Vienneau, Christopher Cc: Webkit Development List Subject: Re: [webkit-dev] border-radius lost when applying -webkit-filter This works for me using the latest ToT build. I would recommend updating your source tree. --Myles On Jul 28, 2015, at 4:52 PM, Vienneau, Christopher cvienn...@ea.com wrote: Hi, I’m on a slightly older pull from WebKit trunk (179714) and I’m seeing this issue where border radius is lost if a css filter is also applied. My sample page looks like this: !DOCTYPE html html titleBasic CSS Filters/title headBasic CSS Filters/head style #pic { border-radius: 10px; -webkit-filter: sepia(0.8); } /style body div img id=pic src=testImage.jpg /div /body /html When I run with the above code the image is rendered with the Sepi filter, but the border radius is not applied. If I comment out the filter the image is properly rendered with the border radius applied. By debugging I can see that a different code path is followed in the two cases. Without the filter: WebKitd.dll!WebCore::GraphicsContext::clip(const WebCore::Path path, WebCore::WindRule windRule) Line 951C++ WebKitd.dll!WebCore::GraphicsContext::clipRoundedRect(const WebCore::FloatRoundedRect rect) Line 586 C++ WebKitd.dll!WebCore::RenderBoxModelObject::clipRoundedInnerRect(WebCore::GraphicsContext * context, const WebCore::FloatRect rect, const WebCore::FloatRoundedRect clipRect) Line 540 C++ WebKitd.dll!WebCore::RenderReplaced::paint(WebCore::PaintInfo paintInfo, const WebCore::LayoutPoint paintOffset) Line 180 C++ … we get into clipRoundedInnerRect which goes into the code which can perform the clipping operation, and all works as expected. With the Filter (3 callstacks below): WebKitd.dll!WebCore::GraphicsLayer::setContentsClippingRect(const WebCore::FloatRoundedRect roundedRect) Line 377 C++ WebKitd.dll!WebCore::RenderLayerBacking::updateImageContents() Line 1960 C++ WebKitd.dll!WebCore::RenderLayerBacking::updateConfiguration() Line 595 C++ WebKitd.dll!WebCore::RenderLayerCompositor::rebuildCompositingLayerTree(WebCore::RenderLayer layer, WTF::VectorWebCore::GraphicsLayer *,0,WTF::CrashOnOverflow childLayersOfEnclosingLayer, int depth) Line 1522 C++ … WebKitd.dll!WebCore::GraphicsLayer::setContentsClippingRect(const WebCore::FloatRoundedRect roundedRect) Line 377 C++ WebKitd.dll!WebCore::RenderLayerBacking::resetContentsRect() Line 1124 C++ WebKitd.dll!WebCore::RenderLayerBacking::updateAfterDescendants() Line 1003 C++ WebKitd.dll!WebCore::RenderLayerCompositor::rebuildCompositingLayerTree(WebCore::RenderLayer layer, WTF::VectorWebCore::GraphicsLayer *,0,WTF::CrashOnOverflow childLayersOfEnclosingLayer, int depth) Line 1609 C++ … WebKitd.dll!WebCore::GraphicsLayer::setContentsClippingRect(const WebCore::FloatRoundedRect roundedRect) Line 377 C++ WebKitd.dll!WebCore::RenderLayerBacking::resetContentsRect() Line 1124 C++ WebKitd.dll!WebCore::RenderLayerBacking::updateAfterDescendants() Line 1003 C++ WebKitd.dll!WebCore::RenderLayerCompositor::updateCompositingDescendantGeometry(WebCore::RenderLayer compositingAncestor, WebCore::RenderLayer layer, bool compositedChildrenOnly) Line 1862 C++ … In this path we never call clipRoundedInnerRect, we do however call setContentsClippingRect with what looks like appropriate parameters to do what we would want. However upon
Re: [webkit-dev] border-radius lost when applying -webkit-filter
Thanks for the info, I’m going to have to pause investigation on this for a bit. When I pick up the investigation again, I think I’ll also see if the latest wincairo exhibits the same issue just to rule out any missing fixes (unless one of you have a recent build handy you can quickly validate?) If wincairo is still reproducing the issue then I’m confident that we have some missing implementation to fill in on our end. Thanks Chris From: Brent Fulgham [mailto:bfulg...@gmail.com] Sent: Thursday, July 30, 2015 2:38 PM To: Myles C. Maxfield; achristen...@apple.com Cc: Vienneau, Christopher; Webkit Development List Subject: Re: [webkit-dev] border-radius lost when applying -webkit-filter I'll see if I can reproduce this using our Apple Windows port, which also uses GraphicsLayerCA, though one based on Windows graphics primitives. The WinCairo compositor is based on the OpenGL ES backend, via the ANGLE library. Alex Christensen knows more about how that works. Thanks, -Brent Sent from my iPad On Jul 30, 2015, at 2:26 PM, Myles C. Maxfield mmaxfi...@apple.commailto:mmaxfi...@apple.com wrote: I'm testing on the Mac OS X port, which uses GraphicsLayerCA. Sounds like a bug with whichever compositor the win-cairo port is using, which I am not familiar with. --Myles On Jul 29, 2015, at 10:24 AM, Vienneau, Christopher cvienn...@ea.commailto:cvienn...@ea.com wrote: Thanks Myles, Before I go through the effort of re-integrating, a few questions about your test: Which port are you testing on? I had been able to repro in our demo and the win-cairo demo (both using the 179714 build). Are you are using the GraphicsLayerCA as I mentioned below? If so regardless that your version is newer than mine, it *might* be why it’s working. Chris From: Myles C. Maxfield [mailto:mmaxfi...@apple.com] Sent: Tuesday, July 28, 2015 5:36 PM To: Vienneau, Christopher Cc: Webkit Development List Subject: Re: [webkit-dev] border-radius lost when applying -webkit-filter This works for me using the latest ToT build. I would recommend updating your source tree. --Myles On Jul 28, 2015, at 4:52 PM, Vienneau, Christopher cvienn...@ea.commailto:cvienn...@ea.com wrote: Hi, I’m on a slightly older pull from WebKit trunk (179714) and I’m seeing this issue where border radius is lost if a css filter is also applied. My sample page looks like this: !DOCTYPE html html titleBasic CSS Filters/title headBasic CSS Filters/head style #pic { border-radius: 10px; -webkit-filter: sepia(0.8); } /style body div img id=pic src=testImage.jpg /div /body /html When I run with the above code the image is rendered with the Sepi filter, but the border radius is not applied. If I comment out the filter the image is properly rendered with the border radius applied. By debugging I can see that a different code path is followed in the two cases. Without the filter: WebKitd.dll!WebCore::GraphicsContext::clip(const WebCore::Path path, WebCore::WindRule windRule) Line 951C++ WebKitd.dll!WebCore::GraphicsContext::clipRoundedRect(const WebCore::FloatRoundedRect rect) Line 586 C++ WebKitd.dll!WebCore::RenderBoxModelObject::clipRoundedInnerRect(WebCore::GraphicsContext * context, const WebCore::FloatRect rect, const WebCore::FloatRoundedRect clipRect) Line 540 C++ WebKitd.dll!WebCore::RenderReplaced::paint(WebCore::PaintInfo paintInfo, const WebCore::LayoutPoint paintOffset) Line 180 C++ … we get into clipRoundedInnerRect which goes into the code which can perform the clipping operation, and all works as expected. With the Filter (3 callstacks below): WebKitd.dll!WebCore::GraphicsLayer::setContentsClippingRect(const WebCore::FloatRoundedRect roundedRect) Line 377 C++ WebKitd.dll!WebCore::RenderLayerBacking::updateImageContents() Line 1960C++ WebKitd.dll!WebCore::RenderLayerBacking::updateConfiguration() Line 595 C++ WebKitd.dll!WebCore::RenderLayerCompositor::rebuildCompositingLayerTree(WebCore::RenderLayer layer, WTF::VectorWebCore::GraphicsLayer *,0,WTF::CrashOnOverflow childLayersOfEnclosingLayer, int depth) Line 1522 C++ … WebKitd.dll!WebCore::GraphicsLayer::setContentsClippingRect(const WebCore::FloatRoundedRect roundedRect) Line 377 C++ WebKitd.dll!WebCore::RenderLayerBacking::resetContentsRect() Line 1124 C++ WebKitd.dll!WebCore::RenderLayerBacking::updateAfterDescendants() Line 1003 C++ WebKitd.dll!WebCore::RenderLayerCompositor::rebuildCompositingLayerTree(WebCore::RenderLayer layer, WTF::VectorWebCore::GraphicsLayer *,0,WTF::CrashOnOverflow childLayersOfEnclosingLayer, int depth) Line 1609 C++ … WebKitd.dll!WebCore::GraphicsLayer::setContentsClippingRect(const WebCore::FloatRoundedRect roundedRect
Re: [webkit-dev] border-radius lost when applying -webkit-filter
This works for me using the latest ToT build. I would recommend updating your source tree. --Myles On Jul 28, 2015, at 4:52 PM, Vienneau, Christopher cvienn...@ea.com wrote: Hi, I’m on a slightly older pull from WebKit trunk (179714) and I’m seeing this issue where border radius is lost if a css filter is also applied. My sample page looks like this: !DOCTYPE html html titleBasic CSS Filters/title headBasic CSS Filters/head style #pic { border-radius: 10px; -webkit-filter: sepia(0.8); } /style body div img id=pic src=testImage.jpg /div /body /html When I run with the above code the image is rendered with the Sepi filter, but the border radius is not applied. If I comment out the filter the image is properly rendered with the border radius applied. By debugging I can see that a different code path is followed in the two cases. Without the filter: WebKitd.dll!WebCore::GraphicsContext::clip(const WebCore::Path path, WebCore::WindRule windRule) Line 951C++ WebKitd.dll!WebCore::GraphicsContext::clipRoundedRect(const WebCore::FloatRoundedRect rect) Line 586 C++ WebKitd.dll!WebCore::RenderBoxModelObject::clipRoundedInnerRect(WebCore::GraphicsContext * context, const WebCore::FloatRect rect, const WebCore::FloatRoundedRect clipRect) Line 540 C++ WebKitd.dll!WebCore::RenderReplaced::paint(WebCore::PaintInfo paintInfo, const WebCore::LayoutPoint paintOffset) Line 180 C++ … we get into clipRoundedInnerRect which goes into the code which can perform the clipping operation, and all works as expected. With the Filter (3 callstacks below): WebKitd.dll!WebCore::GraphicsLayer::setContentsClippingRect(const WebCore::FloatRoundedRect roundedRect) Line 377 C++ WebKitd.dll!WebCore::RenderLayerBacking::updateImageContents() Line 1960C++ WebKitd.dll!WebCore::RenderLayerBacking::updateConfiguration() Line 595 C++ WebKitd.dll!WebCore::RenderLayerCompositor::rebuildCompositingLayerTree(WebCore::RenderLayer layer, WTF::VectorWebCore::GraphicsLayer *,0,WTF::CrashOnOverflow childLayersOfEnclosingLayer, int depth) Line 1522 C++ … WebKitd.dll!WebCore::GraphicsLayer::setContentsClippingRect(const WebCore::FloatRoundedRect roundedRect) Line 377 C++ WebKitd.dll!WebCore::RenderLayerBacking::resetContentsRect() Line 1124 C++ WebKitd.dll!WebCore::RenderLayerBacking::updateAfterDescendants() Line 1003 C++ WebKitd.dll!WebCore::RenderLayerCompositor::rebuildCompositingLayerTree(WebCore::RenderLayer layer, WTF::VectorWebCore::GraphicsLayer *,0,WTF::CrashOnOverflow childLayersOfEnclosingLayer, int depth) Line 1609 C++ … WebKitd.dll!WebCore::GraphicsLayer::setContentsClippingRect(const WebCore::FloatRoundedRect roundedRect) Line 377 C++ WebKitd.dll!WebCore::RenderLayerBacking::resetContentsRect() Line 1124 C++ WebKitd.dll!WebCore::RenderLayerBacking::updateAfterDescendants() Line 1003 C++ WebKitd.dll!WebCore::RenderLayerCompositor::updateCompositingDescendantGeometry(WebCore::RenderLayer compositingAncestor, WebCore::RenderLayer layer, bool compositedChildrenOnly) Line 1862 C++ … In this path we never call clipRoundedInnerRect, we do however call setContentsClippingRect with what looks like appropriate parameters to do what we would want. However upon investigation it appears that this data is not used by anything. Looking at other ports it seems that GraphicsLayerCA.cpp may be making use of this data in its clipping technique. Looking for fixes that might already be available I found the two below interesting, however note that I already have these in the change that we last took. They just sounds extremely similar to what I’m describing. http://trac.webkit.org/changeset/179147 http://trac.webkit.org/changeset/179147 http://trac.webkit.org/changeset/175794 http://trac.webkit.org/changeset/175794 I’m wondering if it can be confirmed that this issue has been a problem for other ports as well? Are there any fixes that address my problem that I may have overlooked? What if anything needs to be done to support this (is something like what is done in the CA port a requirement?) Any advice on implementing the minimal changes, CA’s changes appear extensive. Thanks for any advice Chris Vienneau ___ webkit-dev mailing list webkit-dev@lists.webkit.org mailto:webkit-dev@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-dev https://lists.webkit.org/mailman/listinfo/webkit-dev ___