Bug 224121

Summary: REGRESSION: [ EWS iOS wk2 ] css2.1/20110323/replaced-intrinsic-ratio-001.htm is a flakey text failure
Product: WebKit Reporter: Robert Jenner <jenner>
Component: Layout and RenderingAssignee: Said Abou-Hallawa <sabouhallawa>
Status: NEW ---    
Severity: Normal CC: ap, bfulgham, sabouhallawa, simon.fraser, webkit-bot-watchers-bugzilla, webkit-bug-importer, zalan
Priority: P2 Keywords: InRadar
Version: WebKit Nightly Build   
Hardware: Unspecified   
OS: Unspecified   
See Also: https://bugs.webkit.org/show_bug.cgi?id=208577
https://bugs.webkit.org/show_bug.cgi?id=206254
Attachments:
Description Flags
Patch
none
Patch sabouhallawa: review?

Description Robert Jenner 2021-04-02 11:59:15 PDT
css2.1/20110323/replaced-intrinsic-ratio-001.htm

is a flakey text failure on wk2 EWS and iOS.

HISTORY URL:
https://results.webkit.org/?suite=layout-tests&test=css2.1%2F20110323%2Freplaced-intrinsic-ratio-001.htm

EWS URL:
https://ews-build.webkit.org/#/builders/51/builds/10475 

TEXT DIFF:
               RenderSVGPath {path} at (26,8) size 124x28 [fill={[type=SOLID] [color=#008000]}] [data="M 500 50 L 150 200 L 850 200 Z"]
       RenderBlock {P} at (1,337) size 240x16
         RenderEmbeddedObject {OBJECT} at (16,0) size 208x76 [bgcolor=#FF0000] [border: (16px solid #0000FF)]
-          layer at (0,0) size 176x44
-            RenderView at (0,0) size 176x44
-          layer at (0,0) size 176x44
-            RenderSVGRoot {svg} at (0,0) size 176x44
-              RenderSVGRect {rect} at (0,0) size 176x44 [stroke={[type=SOLID] [color=#008000] [stroke width=12.00]}] [fill={[type=SOLID] [color=#00FF00]}] [x=0.00] [y=0.00] [width=1000.00] [height=250.00]
-              RenderSVGPath {path} at (26,8) size 124x28 [fill={[type=SOLID] [color=#008000]}] [data="M 500 50 L 150 200 L 850 200 Z"]
+          layer at (0,0) size 300x150
+            RenderView at (0,0) size 300x150
+          layer at (0,0) size 300x150
+            RenderSVGRoot {svg} at (0,0) size 300x77
+              RenderSVGRect {rect} at (0,0) size 300x77 [stroke={[type=SOLID] [color=#008000] [stroke width=12.00]}] [fill={[type=SOLID] [color=#00FF00]}] [x=0.00] [y=0.00] [width=1000.00] [height=250.00]
+              RenderSVGPath {path} at (45,15) size 210x45 [fill={[type=SOLID] [color=#008000]}] [data="M 500 50 L 150 200 L 850 200 Z"]
       RenderTable at (1,449) size 240x79
         RenderTableSection (anonymous) at (0,0) size 240x79
           RenderTableRow (anonymous) at (0,0) size 240x79
             RenderTableCell {P} at (0,0) size 240x79 [r=0 c=0 rs=1 cs=1]
               RenderEmbeddedObject {OBJECT} at (16,0) size 208x76 [bgcolor=#FF0000] [border: (16px solid #0000FF)]
-                layer at (0,0) size 176x44
-                  RenderView at (0,0) size 176x44
-                layer at (0,0) size 176x44
-                  RenderSVGRoot {svg} at (0,0) size 176x44
-                    RenderSVGRect {rect} at (0,0) size 176x44 [stroke={[type=SOLID] [color=#008000] [stroke width=12.00]}] [fill={[type=SOLID] [color=#00FF00]}] [x=0.00] [y=0.00] [width=1000.00] [height=250.00]
-                    RenderSVGPath {path} at (26,8) size 124x28 [fill={[type=SOLID] [color=#008000]}] [data="M 500 50 L 150 200 L 850 200 Z"]
+                layer at (0,0) size 300x150
+                  RenderView at (0,0) size 300x150
+                layer at (0,0) size 300x150
+                  RenderSVGRoot {svg} at (0,0) size 300x77
+                    RenderSVGRect {rect} at (0,0) size 300x77 [stroke={[type=SOLID] [color=#008000] [stroke width=12.00]}] [fill={[type=SOLID] [color=#00FF00]}] [x=0.00] [y=0.00] [width=1000.00] [height=250.00]
+                    RenderSVGPath {path} at (45,15) size 210x45 [fill={[type=SOLID] [color=#008000]}] [data="M 500 50 L 150 200 L 850 200 Z"]
       RenderTable {TABLE} at (1,624) size 240x79
         RenderTableSection {TBODY} at (0,0) size 240x79
           RenderTableRow {TR} at (0,0) size 240x79
             RenderTableCell {TD} at (0,0) size 240x79 [r=0 c=0 rs=1 cs=1]
               RenderEmbeddedObject {OBJECT} at (16,0) size 208x76 [bgcolor=#FF0000] [border: (16px solid #0000FF)]
-                layer at (0,0) size 176x44
-                  RenderView at (0,0) size 176x44
-                layer at (0,0) size 176x44
-                  RenderSVGRoot {svg} at (0,0) size 176x44
-                    RenderSVGRect {rect} at (0,0) size 176x44 [stroke={[type=SOLID] [color=#008000] [stroke width=12.00]}] [fill={[type=SOLID] [color=#00FF00]}] [x=0.00] [y=0.00] [width=1000.00] [height=250.00]
-                    RenderSVGPath {path} at (26,8) size 124x28 [fill={[type=SOLID] [color=#008000]}] [data="M 500 50 L 150 200 L 850 200 Z"]
+                layer at (0,0) size 300x150
+                  RenderView at (0,0) size 300x150
+                layer at (0,0) size 300x150
+                  RenderSVGRoot {svg} at (0,0) size 300x77
+                    RenderSVGRect {rect} at (0,0) size 300x77 [stroke={[type=SOLID] [color=#008000] [stroke width=12.00]}] [fill={[type=SOLID] [color=#00FF00]}] [x=0.00] [y=0.00] [width=1000.00] [height=250.00]
+                    RenderSVGPath {path} at (45,15) size 210x45 [fill={[type=SOLID] [color=#008000]}] [data="M 500 50 L 150 200 L 850 200 Z"]
       RenderBlock (floating) {P} at (1,799) size 240x16
         RenderEmbeddedObject {OBJECT} at (16,0) size 208x76 [bgcolor=#FF0000] [border: (16px solid #0000FF)]
-          layer at (0,0) size 176x44
-            RenderView at (0,0) size 176x44
-          layer at (0,0) size 176x44
-            RenderSVGRoot {svg} at (0,0) size 176x44
-              RenderSVGRect {rect} at (0,0) size 176x44 [stroke={[type=SOLID] [color=#008000] [stroke width=12.00]}] [fill={[type=SOLID] [color=#00FF00]}] [x=0.00] [y=0.00] [width=1000.00] [height=250.00]
-              RenderSVGPath {path} at (26,8) size 124x28 [fill={[type=SOLID] [color=#008000]}] [data="M 500 50 L 150 200 L 850 200 Z"]
+          layer at (0,0) size 300x150
+            RenderView at (0,0) size 300x150
+          layer at (0,0) size 300x150
+            RenderSVGRoot {svg} at (0,0) size 300x77
+              RenderSVGRect {rect} at (0,0) size 300x77 [stroke={[type=SOLID] [color=#008000] [stroke width=12.00]}] [fill={[type=SOLID] [color=#00FF00]}] [x=0.00] [y=0.00] [width=1000.00] [height=250.00]
+              RenderSVGPath {path} at (45,15) size 210x45 [fill={[type=SOLID] [color=#008000]}] [data="M 500 50 L 150 200 L 850 200 Z"]
Comment 1 Radar WebKit Bug Importer 2021-04-02 12:13:26 PDT
<rdar://problem/76158718>
Comment 2 Robert Jenner 2021-04-02 12:28:55 PDT
Was able to reproduce the failure at iOS 14 Simulator Release ToT using the following test:

run-webkit-tests --ios-simulator --iterations 1000 -f css2.1/20110323/replaced-intrinsic-ratio-001.htm

The test is flakey, and I can't bisect to a specific regression point because there are a lot of revisions that did not get built that I would need in order narrow down where it started. The first failure occurred at r275303. The closest available build to that was r275285, and when I tested on that build, I could not reproduce the failure.. 


I suspect a change was introduced somewhere between r275303 and r275285 that caused the test to start flakey failing, but I'm not sure which one.
Comment 3 Robert Jenner 2021-04-02 13:25:14 PDT
Updated test expectations here to Pass Failure:

https://trac.webkit.org/changeset/275435/webkit
Comment 4 Alexey Proskuryakov 2021-04-06 10:33:56 PDT
This test doesn't appear to have any potentially flaky content like timers, so this has to be a layout stability regression.
Comment 5 Said Abou-Hallawa 2021-05-20 12:37:12 PDT
This bug is similar to bug 208577 and bug 206254 where some elements in the page reference an external SVG image. In some case, the layout and the rendering of this SVG image is racy such that it gets laid out and rendered using the inline replaced box default size which is 300x150.
Comment 6 Said Abou-Hallawa 2021-05-20 13:50:12 PDT
Created attachment 429212 [details]
Patch
Comment 7 Said Abou-Hallawa 2021-05-20 13:56:25 PDT
Created attachment 429214 [details]
Patch
Comment 8 Simon Fraser (smfr) 2021-05-20 14:59:11 PDT
Comment on attachment 429214 [details]
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=429214&action=review

> LayoutTests/css2.1/20110323/replaced-intrinsic-ratio-001.htm:49
> +    if (window.testRunner)
> +      testRunner.waitUntilDone();
> +    window.addEventListener('load', () => {
> +      document.body.offsetHeight;
> +      if (window.testRunner)
> +        testRunner.notifyDone();
> +    });

I would expect this to be a no-op, but perhaps there's a reason it isn't. WTR waits for the load event before it finishes the test, and it forces a layout before dumping the results. So what does this trigger that doesn't already happen?
Comment 9 Alexey Proskuryakov 2021-05-21 09:25:27 PDT
Comment on attachment 429214 [details]
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=429214&action=review

> LayoutTests/ChangeLog:9
> +        Sometimes there is a race between the layout and the rendering of the SVG

Is this race correct behavior, or a WebKit bug? As Simon said, it is not super clear why the fix changes the behavior.