WebKit Bugzilla
Attachment 357127 Details for
Bug 192554
: Rendering artifact on subpixel positions
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-192554-20181212164048.patch (text/plain), 15.33 KB, created by
Karl Leplat
on 2018-12-12 07:40:53 PST
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Karl Leplat
Created:
2018-12-12 07:40:53 PST
Size:
15.33 KB
patch
obsolete
>Subversion Revision: 239026 >diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog >index 202893917e53d9aaa0af273fc573667ad8a8ea56..bd1042186dc4a7526f47201feaaf6bd7e1942308 100644 >--- a/LayoutTests/ChangeLog >+++ b/LayoutTests/ChangeLog >@@ -1,3 +1,87 @@ >+2018-12-10 Karl Leplat <karl.leplat_ext@softathome.com> >+ >+ [GTK][WPE] Rendering artifact on subpixel positions >+ https://bugs.webkit.org/show_bug.cgi?id=192554 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ 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 ****************************************************** >+ >+ * compositing/repaint-element-on-subpixel-position-expected.png: Added. >+ * compositing/repaint-element-on-subpixel-position-expected.txt: Added. >+ * compositing/repaint-element-on-subpixel-position.html: Added. >+ > 2018-12-09 Commit Queue <commit-queue@webkit.org> > > Unreviewed, rolling out r239010. >diff --git a/LayoutTests/compositing/repaint-element-on-subpixel-position-expected.png b/LayoutTests/compositing/repaint-element-on-subpixel-position-expected.png >new file mode 100644 >index 0000000000000000000000000000000000000000..80c1c8171c32f8489f9ea5c93061e7cf21eec89d >GIT binary patch >literal 7490 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 > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/compositing/repaint-element-on-subpixel-position-expected.txt b/LayoutTests/compositing/repaint-element-on-subpixel-position-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..37166199987504fb7ac9edd66d66ae336aa3964b >--- /dev/null >+++ b/LayoutTests/compositing/repaint-element-on-subpixel-position-expected.txt >@@ -0,0 +1,32 @@ >+layer at (0,0) size 800x600 >+ RenderView at (0,0) size 800x600 >+layer at (0,0) size 800x600 >+ RenderBlock {HTML} at (0,0) size 800x600 >+ RenderBody {BODY} at (8,8) size 784x576 >+ RenderBlock {UL} at (0,0) size 640x147 >+layer at (0,0) size 800x600 >+ RenderBlock (positioned) {DIV} at (0,0) size 800x600 >+layer at (48,8) size 600x24 >+ RenderListItem {LI} at (40,0) size 600x25 [bgcolor=#FFA500] >+ RenderText {#text} at (0,0) size 51x17 >+ text run at (0,0) width 51: "TEST 1" >+layer at (48,32) size 600x25 >+ RenderListItem {LI} at (40,24) size 600x25 [bgcolor=#FFA500] >+ RenderText {#text} at (0,0) size 51x17 >+ text run at (0,0) width 51: "TEST 2" >+layer at (48,57) size 600x24 >+ RenderListItem {LI} at (40,48) size 600x26 [bgcolor=#FFA500] >+ RenderText {#text} at (0,0) size 51x17 >+ text run at (0,0) width 51: "TEST 3" >+layer at (48,81) size 600x24 >+ RenderListItem {LI} at (40,73) size 600x25 [bgcolor=#FFA500] >+ RenderText {#text} at (0,0) size 51x17 >+ text run at (0,0) width 51: "TEST 3" >+layer at (48,105) size 600x25 >+ RenderListItem {LI} at (40,97) size 600x25 [bgcolor=#FFA500] >+ RenderText {#text} at (0,0) size 51x17 >+ text run at (0,0) width 51: "TEST 3" >+layer at (48,130) size 600x24 >+ RenderListItem {LI} at (40,121) size 600x26 [bgcolor=#FFA500] >+ RenderText {#text} at (0,0) size 51x17 >+ text run at (0,0) width 51: "TEST 1" >diff --git a/LayoutTests/compositing/repaint-element-on-subpixel-position.html b/LayoutTests/compositing/repaint-element-on-subpixel-position.html >new file mode 100644 >index 0000000000000000000000000000000000000000..9e4481ccf5e03200863c7884f4839345a0602cf8 >--- /dev/null >+++ b/LayoutTests/compositing/repaint-element-on-subpixel-position.html >@@ -0,0 +1,41 @@ >+<html> >+<head> >+<style> >+ul { >+ width: 600px; >+ list-style: none; >+} >+ >+li { >+ position: relative; >+ height: 24.36px; >+ background-color: white; >+} >+ >+li.selected { >+ background-color: orange; >+} >+</style> >+<script src="../fast/repaint/resources/repaint.js"></script> >+<script> >+ function repaintTest() { >+ document.getElementById("opt2").className = "selected"; >+ document.getElementById("opt3").className = "selected"; >+ document.getElementById("opt4").className = "selected"; >+ document.getElementById("opt5").className = "selected"; >+ } >+</script> >+</head> >+ >+<body onload="runRepaintTest()"> >+<div id="forceAcceleratedCompositing" style="position:absolute;left:0;right:0;top:0;bottom:0;-webkit-transform: translate3d(0, 0, 0);"></div> >+<ul> >+ <li class="selected">TEST 1</li> >+ <li class="" id="opt2">TEST 2</li> >+ <li class="" id="opt3">TEST 3</li> >+ <li class="" id="opt4">TEST 3</li> >+ <li class="" id="opt5">TEST 3</li> >+ <li class="selected">TEST 1</li> >+</ul> >+</body> >+</html>
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 192554
:
356955
|
356956
|
356957
|
356958
|
356959
|
357048
|
357050
|
357051
|
357056
|
357057
|
357121
|
357124
|
357127
|
357132
|
357134
|
357138
|
357180
|
357566
|
358887
|
358888
|
358914
|
358918
|
358947
|
359367
|
359370
|
359371
|
359372
|
359373
|
359377
|
359378
|
359456
|
359458
|
359488
|
359552
|
363081