Hello Guru, Alexander Z, Murali,
Please review the following fix.
JIRA: https://bugs.openjdk.java.net/browse/JDK-8160769
Webrev: http://cr.openjdk.java.net/~arajkumar/8160769/webrev.00
Issue: Unable to tile SVG image using css background property
Analysis: For tiled SVG image drawing, WebCore creates a temporary
Graphics buffer(ImageBufferJava)[1] and renders SVG contents into it.
Once the SVG is rendered in the temporary graphics buffer, WebCore will
call Image::drawPattern to tile it on the WebPage's back buffer. As soon
as drawing is completed, temporary graphics buffer will be destroyed.
FX WebView's GraphicsContext APIs are asynchronous in nature(rendered in
FX render thread using RenderQueue), so temporary graphics buffer would
have been destroyed even before rendering the SVG content into it. At
later point of time, when Image::drawPattern is executed in render
thread, it will be accessing a GraphicsContext of an destroyed object.
Solution: Before destroying an Native ImageBuffer, flush all its render
queue commands synchronously, So that it's content will be rendered as
expected.
[1]
http://trac.webkit.org/browser/trunk/Source/WebCore/svg/graphics/SVGImage.cpp?rev=187486#L202
Regards,
Arun