[Webkit-unassigned] [Bug 192554] New: [GTK][WPE] Rendering artifact on subpixel positions
bugzilla-daemon at webkit.org
bugzilla-daemon at webkit.org
Mon Dec 10 05:09:15 PST 2018
https://bugs.webkit.org/show_bug.cgi?id=192554
Bug ID: 192554
Summary: [GTK][WPE] Rendering artifact on subpixel positions
Product: WebKit
Version: WebKit Local Build
Hardware: Unspecified
OS: Unspecified
Status: NEW
Severity: Normal
Priority: P2
Component: Layout and Rendering
Assignee: webkit-unassigned at lists.webkit.org
Reporter: karl.leplat_ext at softathome.com
CC: achristensen at apple.com, bfulgham at webkit.org,
fred.wang at free.fr, hyatt at apple.com,
loic.yhuel at softathome.com, magomez at igalia.com,
olivier.blin at softathome.com, simon.fraser at apple.com,
zalan at apple.com, zan at falconsigh.net
In compositing mode, rendering artifacts have been detected on the repaint of elements on subpixel position.
We suspect a problem on rounding computing sequences, this bug is reproducible on WebKit GTK and WPE.
This bug is not reproducible with compositing mode disabled.
AncestorGraphicsLayer 1st frame DirtyRect 2nd frame
--------------- 24px --------------- 24px --------------
- 24.359375px - - 24px - - no painted
--------------- 48.359375px --------------- 48px (Force compositing mode) ------------- 48px -------------- 48px
- 24.359375px - - 25px - --> Need display this rect - 24px - --> - 25px -
--------------- 72.7187 --------------- 73px ------------- -------------- BUG: one pixels line no repainted
- 24.359375px - - 24px - - no painted -
--------------- --------------- --------------
Source files for logs:
<WebCore/platform/graphics/LayoutRect.h::snapRectToDevicePixels()>
<WebCore/rendering/RenderLayerBacking.cpp::setContentsNeedDisplayInRect()>
<WebCore/platform/graphics/nicosia/NicosiaPaintingEngineBasic.cpp::paint()>
<WebCore/platform/graphics/cairo/CairoOperations.cpp::fillRectWithColor()>
Dump logs with the previous HTML test:
***************************** 1st frame processing ************************************
************** Update tiles in backingStore for GraphicsLayer ******************
setContentsNeedDisplayInRect LayoutRect before: x(48.000000) y(24.000000) w(59.000000) h(24.359375)
snapRectToDevicePixels result after: x(48.000000) y(24.000000) width(59.000000) height(24.000000)
outlineBoundsForRepaint container before: x(0.000000) y(0.000000) w(59.000000) h(24.359375)
snapRectToDevicePixels result after: x(0.000000) y(0.000000) w(59.000000) h(24.000000)
setContentsNeedDisplayInRect LayoutRect before: x(48.000000) y(48.359375) w(59.000000) h(24.359375)
snapRectToDevicePixels result after: x(48.000000) y(48.000000) width(59.000000) height(25.000000)
outlineBoundsForRepaint container before: x(0.000000) y(0.000000) w(59.000000) h(24.359375)
snapRectToDevicePixels result after: x(0.000000) y(0.000000) w(59.000000) h(24) ??????
setContentsNeedDisplayInRect LayoutRecti before: x(48.000000) y(72.718750) w(59.000000) h(24.359375)
snapRectToDevicePixels result after: x(48.000000) y(73.000000) width(59.000000) height(24.000000)
outlineBoundsForRepaint container before: x(0.000000) y(0.000000) w(59.000000) h(24.359375)
snapRectToDevicePixels result after: x(0.000000) y(0.000000) w(59.000000) h(24.000000)
********************************************************************************
************ Paint Web contents ******************************************
********* paint() --> fillRectWithColor() **************
cairo paint fill (Color::transparent) x(0.000000) y(0.000000) width(59.000000) height(25.000000)
cairo paint fill contents x(0.000000) y(0.000000) width(58.000000) height(24.000000)
********* paint() --> fillRectWithColor() **************
new targetRect with size : width(59px) height(25px)
cairo paint fill (Color::transparent) x(0.000000) y(0.000000) width(59.000000) height(25.000000)
------------> TO BE NOTED: this rect that should be updated in the second frame is filled with 25px of height <------------
cairo paint fill contents x(0.000000) y(0.000000) width(58.000000) height(25.000000)
********* paint() --> fillRectWithColor() **************
cairo paint fill (Color::transparent) x(0.000000) y(0.000000) width(59.000000) height(26.000000)
cairo paint fill contents x(0.000000) y(1.000000) width(58.000000) height(24.000000)
************************************* end of frame ********************************************
********************* 2nd frame processing in compositing mode *******************
************** Update tile in backingStore for GraphicsLayer ******************
setContentsNeedDisplayInRect LayoutRect x(0.000000) y(0.000000) w(59.000000) h(24.359375)
snapRectToDevicePixels result: x(0.000000) y(0.000000) width(59.000000) height(24.000000) ?????
The layout position (0.0 , 0.0) is not the same with the previous frame(48.0 , 48.359375)
Results with the two origins and a layout height of 24.359375px :
for position(0.0 , 0.0) we get 0.0 + 24.359375 = int(24)px of height
for position(48.0 , 48.359375) we get 48.359375 ==> 0.359375 + 24.359375 = 24,71875 = int(25)px of height
We can see that for the same dirtyRect we get differents height.
The calculation is done before moving by subpixels offset, perhaps we should take this for the rounding ?
*******************************************************************************
************ Paint Web contents ******************************************
********* paint() --> fillRectWithColor() **************
cairo paint fill (Color::transparent) x(0.000000) y(0.000000) width(59.000000) height(24.000000) ?????
-------> TO BE NOTED: this rect is now filled with only 24px of height why ??
cairo paint fill contents x(0.000000) y(0.000000) width(58.000000) height(25.000000)
********************* end of frame ******************************************************
--
You are receiving this mail because:
You are the assignee for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.webkit.org/pipermail/webkit-unassigned/attachments/20181210/1d8452f4/attachment.html>
More information about the webkit-unassigned
mailing list