Title: [204197] trunk
Revision
204197
Author
[email protected]
Date
2016-08-05 15:34:12 -0700 (Fri, 05 Aug 2016)

Log Message

marquee with "truespeed" animates at > 60fps, hogging CPU
https://bugs.webkit.org/show_bug.cgi?id=160609

Reviewed by David Hyatt.

Source/WebCore:

A <marquee truespeed="" scrollDelay="0"> would fire a zero-delay timer and also
fail to animate, hogging CPU.

Fix to cap the timer at 16ms intervals. We don't believe it's necessary to
maintain web compatibility here.

Tested by existing tests.

* html/HTMLMarqueeElement.cpp:
(WebCore::HTMLMarqueeElement::minimumDelay):
* html/HTMLMarqueeElement.h:

LayoutTests:

Convert marquee tests into ref tests, removing all the platform expectations.

* fast/html/marquee-scroll-expected.html: Copied from LayoutTests/fast/html/marquee-scroll.html.
* fast/html/marquee-scroll.html:
* fast/html/marquee-scrollamount-expected.html: Added.
* fast/html/marquee-set-truespeed.html:
* platform/efl/fast/html/marquee-scroll-expected.png: Removed.
* platform/efl/fast/html/marquee-scroll-expected.txt: Removed.
* platform/efl/fast/html/marquee-scrollamount-expected.png: Removed.
* platform/efl/fast/html/marquee-scrollamount-expected.txt: Removed.
* platform/gtk/fast/html/marquee-scroll-expected.png: Removed.
* platform/gtk/fast/html/marquee-scroll-expected.txt: Removed.
* platform/gtk/fast/html/marquee-scrollamount-expected.png: Removed.
* platform/gtk/fast/html/marquee-scrollamount-expected.txt: Removed.
* platform/ios-simulator-wk1/TestExpectations:
* platform/ios-simulator-wk2/TestExpectations:
* platform/ios-simulator-wk2/fast/html/marquee-scrollamount-expected.txt: Removed.
* platform/ios-simulator/fast/html/marquee-scroll-expected.txt: Removed.
* platform/ios-simulator/fast/html/marquee-scrollamount-expected.txt: Removed.
* platform/mac-wk1/TestExpectations:
* platform/mac/fast/html/marquee-scroll-expected.png: Removed.
* platform/mac/fast/html/marquee-scroll-expected.txt: Removed.
* platform/mac/fast/html/marquee-scrollamount-expected.png: Removed.
* platform/mac/fast/html/marquee-scrollamount-expected.txt: Removed.
* platform/win/TestExpectations:
* platform/win/fast/html/marquee-scroll-expected.txt: Removed.
* platform/win/fast/html/marquee-scrollamount-expected.txt: Removed.

Modified Paths

Added Paths

Removed Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (204196 => 204197)


--- trunk/LayoutTests/ChangeLog	2016-08-05 22:26:01 UTC (rev 204196)
+++ trunk/LayoutTests/ChangeLog	2016-08-05 22:34:12 UTC (rev 204197)
@@ -1,3 +1,38 @@
+2016-08-05  Simon Fraser  <[email protected]>
+
+        marquee with "truespeed" animates at > 60fps, hogging CPU
+        https://bugs.webkit.org/show_bug.cgi?id=160609
+
+        Reviewed by David Hyatt.
+        
+        Convert marquee tests into ref tests, removing all the platform expectations.
+
+        * fast/html/marquee-scroll-expected.html: Copied from LayoutTests/fast/html/marquee-scroll.html.
+        * fast/html/marquee-scroll.html:
+        * fast/html/marquee-scrollamount-expected.html: Added.
+        * fast/html/marquee-set-truespeed.html:
+        * platform/efl/fast/html/marquee-scroll-expected.png: Removed.
+        * platform/efl/fast/html/marquee-scroll-expected.txt: Removed.
+        * platform/efl/fast/html/marquee-scrollamount-expected.png: Removed.
+        * platform/efl/fast/html/marquee-scrollamount-expected.txt: Removed.
+        * platform/gtk/fast/html/marquee-scroll-expected.png: Removed.
+        * platform/gtk/fast/html/marquee-scroll-expected.txt: Removed.
+        * platform/gtk/fast/html/marquee-scrollamount-expected.png: Removed.
+        * platform/gtk/fast/html/marquee-scrollamount-expected.txt: Removed.
+        * platform/ios-simulator-wk1/TestExpectations:
+        * platform/ios-simulator-wk2/TestExpectations:
+        * platform/ios-simulator-wk2/fast/html/marquee-scrollamount-expected.txt: Removed.
+        * platform/ios-simulator/fast/html/marquee-scroll-expected.txt: Removed.
+        * platform/ios-simulator/fast/html/marquee-scrollamount-expected.txt: Removed.
+        * platform/mac-wk1/TestExpectations:
+        * platform/mac/fast/html/marquee-scroll-expected.png: Removed.
+        * platform/mac/fast/html/marquee-scroll-expected.txt: Removed.
+        * platform/mac/fast/html/marquee-scrollamount-expected.png: Removed.
+        * platform/mac/fast/html/marquee-scrollamount-expected.txt: Removed.
+        * platform/win/TestExpectations:
+        * platform/win/fast/html/marquee-scroll-expected.txt: Removed.
+        * platform/win/fast/html/marquee-scrollamount-expected.txt: Removed.
+
 2016-08-05  Ryan Haddad  <[email protected]>
 
         Unreviewed, rolling out r204181.

Copied: trunk/LayoutTests/fast/html/marquee-scroll-expected.html (from rev 204196, trunk/LayoutTests/fast/html/marquee-scroll.html) (0 => 204197)


--- trunk/LayoutTests/fast/html/marquee-scroll-expected.html	                        (rev 0)
+++ trunk/LayoutTests/fast/html/marquee-scroll-expected.html	2016-08-05 22:34:12 UTC (rev 204197)
@@ -0,0 +1,15 @@
+<html>
+<title>Test for marquee scrolling behavior</title>
+<body>
+
+<p>Test for <a href="" 15263</a>:
+REGRESSION: scrolldelay=0 causes marquee not to display</p>
+
+<p>The marquee below is defined with a scrollDelay value of zero and with the truespeed attribute assigned to an empty string.  It should scroll until the text, &quot;The marquee scroll test passed&quot; is visible and left justified.</p>
+
+<div id="marquee" style="width: 300px; background-color:cyan;">
+The marquee scroll test passed
+</div>
+
+</body>
+</html>

Modified: trunk/LayoutTests/fast/html/marquee-scroll.html (204196 => 204197)


--- trunk/LayoutTests/fast/html/marquee-scroll.html	2016-08-05 22:26:01 UTC (rev 204196)
+++ trunk/LayoutTests/fast/html/marquee-scroll.html	2016-08-05 22:34:12 UTC (rev 204197)
@@ -1,15 +1,35 @@
 <html>
 <title>Test for marquee scrolling behavior</title>
+<script>
+    if (window.testRunner)
+        testRunner.waitUntilDone();
+
+    function waitForMarquee()
+    {
+        var counter = 0;
+        var marqueeWidth = document.getElementById('marquee').offsetWidth;
+        var numSteps = 1 + marqueeWidth / 6; // Default scrollAmount is 6px
+        
+        var interval = window.setInterval(function() {
+            if (++counter >= numSteps) {
+                window.clearInterval(interval);
+                if (window.testRunner)
+                    testRunner.notifyDone();
+            }
+        }, 16);
+    }
+    window.addEventListener('load', waitForMarquee, false);
+</script>
 <body>
 
 <p>Test for <a href="" 15263</a>:
 REGRESSION: scrolldelay=0 causes marquee not to display</p>
 
-<p>The marquee below is defined with a scrollDelay value of zero and with the truespeed attribute assigned to an empty string.  It should scroll until the text, &quot;The marquee scroll test passed&quot is visible and left justified.</p>
+<p>The marquee below is defined with a scrollDelay value of zero and with the truespeed attribute assigned to an empty string.  It should scroll until the text, &quot;The marquee scroll test passed&quot; is visible and left justified.</p>
 
-<marquee width="50%" behavior="slide" bgcolor="cyan" truespeed="" scrollDelay="0">
+<marquee id="marquee" width="300px" behavior="slide" bgcolor="cyan" truespeed="" scrollDelay="0">
 The marquee scroll test passed
 </marquee>
 
 </body>
-</html>
\ No newline at end of file
+</html>

Added: trunk/LayoutTests/fast/html/marquee-scrollamount-expected.html (0 => 204197)


--- trunk/LayoutTests/fast/html/marquee-scrollamount-expected.html	                        (rev 0)
+++ trunk/LayoutTests/fast/html/marquee-scrollamount-expected.html	2016-08-05 22:34:12 UTC (rev 204197)
@@ -0,0 +1,2 @@
+<body>
+<p>This is a regression test for https://bugs.webkit.org/show_bug.cgi?id=50434. It verifies that a marquee does not animate when scrollAmount is set to 0 by script.</p>

Modified: trunk/LayoutTests/fast/html/marquee-set-truespeed.html (204196 => 204197)


--- trunk/LayoutTests/fast/html/marquee-set-truespeed.html	2016-08-05 22:26:01 UTC (rev 204196)
+++ trunk/LayoutTests/fast/html/marquee-set-truespeed.html	2016-08-05 22:34:12 UTC (rev 204197)
@@ -18,6 +18,6 @@
     setTimeout(function() {
         if (window.testRunner)
             testRunner.notifyDone();
-    }, 10);
+    }, 20);
 }
 </script>

Deleted: trunk/LayoutTests/platform/efl/fast/html/marquee-scroll-expected.png


(Binary files differ)

Deleted: trunk/LayoutTests/platform/efl/fast/html/marquee-scroll-expected.txt (204196 => 204197)


--- trunk/LayoutTests/platform/efl/fast/html/marquee-scroll-expected.txt	2016-08-05 22:26:01 UTC (rev 204196)
+++ trunk/LayoutTests/platform/efl/fast/html/marquee-scroll-expected.txt	2016-08-05 22:34:12 UTC (rev 204197)
@@ -1,23 +0,0 @@
-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 784x584
-      RenderBlock {P} at (0,0) size 784x18
-        RenderText {#text} at (0,0) size 53x17
-          text run at (0,0) width 53: "Test for "
-        RenderInline {A} at (0,0) size 68x17 [color=#0000EE]
-          RenderText {#text} at (53,0) size 68x17
-            text run at (53,0) width 68: "bug 15263"
-        RenderText {#text} at (121,0) size 394x17
-          text run at (121,0) width 394: ": REGRESSION: scrolldelay=0 causes marquee not to display"
-      RenderBlock {P} at (0,34) size 784x36
-        RenderText {#text} at (0,0) size 776x35
-          text run at (0,0) width 776: "The marquee below is defined with a scrollDelay value of zero and with the truespeed attribute assigned to an empty string."
-          text run at (0,18) width 557: "It should scroll until the text, \"The marquee scroll test passed\" is visible and left justified."
-      RenderBlock (anonymous) at (0,86) size 784x18
-        RenderText {#text} at (0,0) size 0x0
-layer at (8,94) size 392x18 scrollX -392
-  RenderBlock {MARQUEE} at (0,0) size 392x18 [bgcolor=#00FFFF]
-    RenderText {#text} at (0,0) size 192x17
-      text run at (0,0) width 192: "The marquee scroll test passed"

Deleted: trunk/LayoutTests/platform/efl/fast/html/marquee-scrollamount-expected.png


(Binary files differ)

Deleted: trunk/LayoutTests/platform/efl/fast/html/marquee-scrollamount-expected.txt (204196 => 204197)


--- trunk/LayoutTests/platform/efl/fast/html/marquee-scrollamount-expected.txt	2016-08-05 22:26:01 UTC (rev 204196)
+++ trunk/LayoutTests/platform/efl/fast/html/marquee-scrollamount-expected.txt	2016-08-05 22:34:12 UTC (rev 204197)
@@ -1,14 +0,0 @@
-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 784x584
-      RenderBlock {P} at (0,0) size 784x36
-        RenderText {#text} at (0,0) size 750x35
-          text run at (0,0) width 750: "This is a regression test for https://bugs.webkit.org/show_bug.cgi?id=50434. It verifies that a marquee does not animate"
-          text run at (0,18) width 250: "when scrollAmount is set to 0 by script."
-      RenderBlock (anonymous) at (0,52) size 784x18
-layer at (8,60) size 100x18 scrollX -100
-  RenderBlock {MARQUEE} at (0,0) size 100x18
-    RenderText {#text} at (0,0) size 27x17
-      text run at (0,0) width 27: "Test"

Deleted: trunk/LayoutTests/platform/gtk/fast/html/marquee-scroll-expected.png


(Binary files differ)

Deleted: trunk/LayoutTests/platform/gtk/fast/html/marquee-scroll-expected.txt (204196 => 204197)


--- trunk/LayoutTests/platform/gtk/fast/html/marquee-scroll-expected.txt	2016-08-05 22:26:01 UTC (rev 204196)
+++ trunk/LayoutTests/platform/gtk/fast/html/marquee-scroll-expected.txt	2016-08-05 22:34:12 UTC (rev 204197)
@@ -1,23 +0,0 @@
-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 784x584
-      RenderBlock {P} at (0,0) size 784x17
-        RenderText {#text} at (0,0) size 53x17
-          text run at (0,0) width 53: "Test for "
-        RenderInline {A} at (0,0) size 68x17 [color=#0000EE]
-          RenderText {#text} at (53,0) size 68x17
-            text run at (53,0) width 68: "bug 15263"
-        RenderText {#text} at (121,0) size 394x17
-          text run at (121,0) width 394: ": REGRESSION: scrolldelay=0 causes marquee not to display"
-      RenderBlock {P} at (0,33) size 784x34
-        RenderText {#text} at (0,0) size 776x34
-          text run at (0,0) width 776: "The marquee below is defined with a scrollDelay value of zero and with the truespeed attribute assigned to an empty string."
-          text run at (0,17) width 557: "It should scroll until the text, \"The marquee scroll test passed\" is visible and left justified."
-      RenderBlock (anonymous) at (0,83) size 784x17
-        RenderText {#text} at (0,0) size 0x0
-layer at (8,91) size 392x17 scrollX -392
-  RenderBlock {MARQUEE} at (0,0) size 392x17 [bgcolor=#00FFFF]
-    RenderText {#text} at (0,0) size 192x17
-      text run at (0,0) width 192: "The marquee scroll test passed"

Deleted: trunk/LayoutTests/platform/gtk/fast/html/marquee-scrollamount-expected.png


(Binary files differ)

Deleted: trunk/LayoutTests/platform/gtk/fast/html/marquee-scrollamount-expected.txt (204196 => 204197)


--- trunk/LayoutTests/platform/gtk/fast/html/marquee-scrollamount-expected.txt	2016-08-05 22:26:01 UTC (rev 204196)
+++ trunk/LayoutTests/platform/gtk/fast/html/marquee-scrollamount-expected.txt	2016-08-05 22:34:12 UTC (rev 204197)
@@ -1,14 +0,0 @@
-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 784x584
-      RenderBlock {P} at (0,0) size 784x34
-        RenderText {#text} at (0,0) size 750x34
-          text run at (0,0) width 750: "This is a regression test for https://bugs.webkit.org/show_bug.cgi?id=50434. It verifies that a marquee does not animate"
-          text run at (0,17) width 250: "when scrollAmount is set to 0 by script."
-      RenderBlock (anonymous) at (0,50) size 784x17
-layer at (8,58) size 100x17 scrollX -100
-  RenderBlock {MARQUEE} at (0,0) size 100x17
-    RenderText {#text} at (0,0) size 27x17
-      text run at (0,0) width 27: "Test"

Deleted: trunk/LayoutTests/platform/ios-simulator/fast/html/marquee-scroll-expected.txt (204196 => 204197)


--- trunk/LayoutTests/platform/ios-simulator/fast/html/marquee-scroll-expected.txt	2016-08-05 22:26:01 UTC (rev 204196)
+++ trunk/LayoutTests/platform/ios-simulator/fast/html/marquee-scroll-expected.txt	2016-08-05 22:34:12 UTC (rev 204197)
@@ -1,24 +0,0 @@
-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 784x584
-      RenderBlock {P} at (0,0) size 784x20
-        RenderText {#text} at (0,0) size 54x19
-          text run at (0,0) width 54: "Test for "
-        RenderInline {A} at (0,0) size 69x19 [color=#0000EE]
-          RenderText {#text} at (53,0) size 69x19
-            text run at (53,0) width 69: "bug 15263"
-        RenderText {#text} at (121,0) size 399x19
-          text run at (121,0) width 399: ": REGRESSION: scrolldelay=0 causes marquee not to display"
-      RenderBlock {P} at (0,36) size 784x40
-        RenderText {#text} at (0,0) size 747x39
-          text run at (0,0) width 747: "The marquee below is defined with a scrollDelay value of zero and with the truespeed attribute assigned to an empty"
-          text run at (0,20) width 45: "string. "
-          text run at (44,20) width 573: "It should scroll until the text, \"The marquee scroll test passed\" is visible and left justified."
-      RenderBlock (anonymous) at (0,92) size 784x20
-        RenderText {#text} at (0,0) size 0x0
-layer at (8,100) size 392x20 scrollX -392
-  RenderBlock {MARQUEE} at (0,0) size 392x20 [bgcolor=#00FFFF]
-    RenderText {#text} at (0,0) size 197x19
-      text run at (0,0) width 197: "The marquee scroll test passed"

Deleted: trunk/LayoutTests/platform/ios-simulator/fast/html/marquee-scrollamount-expected.txt (204196 => 204197)


--- trunk/LayoutTests/platform/ios-simulator/fast/html/marquee-scrollamount-expected.txt	2016-08-05 22:26:01 UTC (rev 204196)
+++ trunk/LayoutTests/platform/ios-simulator/fast/html/marquee-scrollamount-expected.txt	2016-08-05 22:34:12 UTC (rev 204197)
@@ -1,15 +0,0 @@
-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 784x584
-      RenderBlock {P} at (0,0) size 784x40
-        RenderText {#text} at (0,0) size 767x39
-          text run at (0,0) width 767: "This is a regression test for https://bugs.webkit.org/show_bug.cgi?id=50434. It verifies that a marquee does not animate"
-          text run at (0,20) width 256: "when scrollAmount is set to 0 by script."
-      RenderBlock (anonymous) at (0,56) size 784x20
-        RenderText {#text} at (0,0) size 0x0
-layer at (8,64) size 100x20 scrollX -100
-  RenderBlock {MARQUEE} at (0,0) size 100x20
-    RenderText {#text} at (0,0) size 27x19
-      text run at (0,0) width 27: "Test"

Modified: trunk/LayoutTests/platform/ios-simulator-wk1/TestExpectations (204196 => 204197)


--- trunk/LayoutTests/platform/ios-simulator-wk1/TestExpectations	2016-08-05 22:26:01 UTC (rev 204196)
+++ trunk/LayoutTests/platform/ios-simulator-wk1/TestExpectations	2016-08-05 22:34:12 UTC (rev 204197)
@@ -419,7 +419,6 @@
 editing/unsupported-content/list-delete-003.html [ Failure ]
 editing/unsupported-content/table-delete-002.html [ Failure ]
 fast/forms/textfield-outline.html [ Failure ]
-fast/html/marquee-scrollamount.html [ Failure ]
 platform/ios-simulator/ios/fast/coordinates/document-elementFromPoint.html [ Failure ]
 platform/ios-simulator/ios/fast/coordinates/element-client-rects.html [ Failure ]
 platform/ios-simulator/ios/fast/coordinates/mouse-event-zoomed.html [ Failure ]

Modified: trunk/LayoutTests/platform/ios-simulator-wk2/TestExpectations (204196 => 204197)


--- trunk/LayoutTests/platform/ios-simulator-wk2/TestExpectations	2016-08-05 22:26:01 UTC (rev 204196)
+++ trunk/LayoutTests/platform/ios-simulator-wk2/TestExpectations	2016-08-05 22:34:12 UTC (rev 204197)
@@ -1464,7 +1464,6 @@
 fast/dom/Geolocation/disconnected-frame-permission-denied.html
 fast/dom/Geolocation/error.html
 fast/events/mouse-cursor-multiframecur.html
-fast/html/marquee-scrollamount.html [ Failure ]
 fast/loader/frames-with-unload-handlers-in-page-cache.html
 http/tests/cache/cache-redirections.html
 js/promises-tests/promises-tests-2-2-6.html

Deleted: trunk/LayoutTests/platform/ios-simulator-wk2/fast/html/marquee-scrollamount-expected.txt (204196 => 204197)


--- trunk/LayoutTests/platform/ios-simulator-wk2/fast/html/marquee-scrollamount-expected.txt	2016-08-05 22:26:01 UTC (rev 204196)
+++ trunk/LayoutTests/platform/ios-simulator-wk2/fast/html/marquee-scrollamount-expected.txt	2016-08-05 22:34:12 UTC (rev 204197)
@@ -1,14 +0,0 @@
-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 784x584
-      RenderBlock {P} at (0,0) size 784x40
-        RenderText {#text} at (0,0) size 767x39
-          text run at (0,0) width 767: "This is a regression test for https://bugs.webkit.org/show_bug.cgi?id=50434. It verifies that a marquee does not animate"
-          text run at (0,20) width 256: "when scrollAmount is set to 0 by script."
-      RenderBlock (anonymous) at (0,56) size 784x20
-layer at (8,64) size 100x20 scrollX -10
-  RenderBlock {MARQUEE} at (0,0) size 100x20
-    RenderText {#text} at (0,0) size 27x19
-      text run at (0,0) width 27: "Test"

Deleted: trunk/LayoutTests/platform/mac/fast/html/marquee-scroll-expected.png


(Binary files differ)

Deleted: trunk/LayoutTests/platform/mac/fast/html/marquee-scroll-expected.txt (204196 => 204197)


--- trunk/LayoutTests/platform/mac/fast/html/marquee-scroll-expected.txt	2016-08-05 22:26:01 UTC (rev 204196)
+++ trunk/LayoutTests/platform/mac/fast/html/marquee-scroll-expected.txt	2016-08-05 22:34:12 UTC (rev 204197)
@@ -1,24 +0,0 @@
-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 784x584
-      RenderBlock {P} at (0,0) size 784x18
-        RenderText {#text} at (0,0) size 54x18
-          text run at (0,0) width 54: "Test for "
-        RenderInline {A} at (0,0) size 69x18 [color=#0000EE]
-          RenderText {#text} at (53,0) size 69x18
-            text run at (53,0) width 69: "bug 15263"
-        RenderText {#text} at (121,0) size 399x18
-          text run at (121,0) width 399: ": REGRESSION: scrolldelay=0 causes marquee not to display"
-      RenderBlock {P} at (0,34) size 784x36
-        RenderText {#text} at (0,0) size 746x36
-          text run at (0,0) width 746: "The marquee below is defined with a scrollDelay value of zero and with the truespeed attribute assigned to an empty"
-          text run at (0,18) width 45: "string. "
-          text run at (44,18) width 573: "It should scroll until the text, \"The marquee scroll test passed\" is visible and left justified."
-      RenderBlock (anonymous) at (0,86) size 784x18
-        RenderText {#text} at (0,0) size 0x0
-layer at (8,94) size 392x18 scrollX -392
-  RenderBlock {MARQUEE} at (0,0) size 392x18 [bgcolor=#00FFFF]
-    RenderText {#text} at (0,0) size 197x18
-      text run at (0,0) width 197: "The marquee scroll test passed"

Deleted: trunk/LayoutTests/platform/mac/fast/html/marquee-scrollamount-expected.png


(Binary files differ)

Deleted: trunk/LayoutTests/platform/mac/fast/html/marquee-scrollamount-expected.txt (204196 => 204197)


--- trunk/LayoutTests/platform/mac/fast/html/marquee-scrollamount-expected.txt	2016-08-05 22:26:01 UTC (rev 204196)
+++ trunk/LayoutTests/platform/mac/fast/html/marquee-scrollamount-expected.txt	2016-08-05 22:34:12 UTC (rev 204197)
@@ -1,14 +0,0 @@
-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 784x584
-      RenderBlock {P} at (0,0) size 784x36
-        RenderText {#text} at (0,0) size 766x36
-          text run at (0,0) width 766: "This is a regression test for https://bugs.webkit.org/show_bug.cgi?id=50434. It verifies that a marquee does not animate"
-          text run at (0,18) width 256: "when scrollAmount is set to 0 by script."
-      RenderBlock (anonymous) at (0,52) size 784x18
-layer at (8,60) size 100x18 scrollX -100
-  RenderBlock {MARQUEE} at (0,0) size 100x18
-    RenderText {#text} at (0,0) size 27x18
-      text run at (0,0) width 27: "Test"

Modified: trunk/LayoutTests/platform/mac-wk1/TestExpectations (204196 => 204197)


--- trunk/LayoutTests/platform/mac-wk1/TestExpectations	2016-08-05 22:26:01 UTC (rev 204196)
+++ trunk/LayoutTests/platform/mac-wk1/TestExpectations	2016-08-05 22:34:12 UTC (rev 204197)
@@ -228,7 +228,6 @@
 [ Sierra+ ] accessibility/parent-delete.html [ Failure ]
 
 # rdar://problem/26422051
-[ Sierra+ ] fast/html/marquee-scroll.html [ Failure ]
 [ Sierra+ ] fast/inline-block/003.html [ Failure ]
 
 # rdar://problem/26478296

Modified: trunk/LayoutTests/platform/win/TestExpectations (204196 => 204197)


--- trunk/LayoutTests/platform/win/TestExpectations	2016-08-05 22:26:01 UTC (rev 204196)
+++ trunk/LayoutTests/platform/win/TestExpectations	2016-08-05 22:34:12 UTC (rev 204197)
@@ -2769,8 +2769,6 @@
 fast/history/location-replace-hash.html [ Skip ]
 fast/history/saves-state-after-fragment-nav.html [ Skip ]
 
-fast/html/marquee-scrollamount.html [ Failure ]
-
 fast/images/image-controls-basic.html [ Failure ]
 fast/images/exif-orientation-composited.html [ Failure ]
 webkit.org/b/140516 [ Debug ] fast/images/large-size-image-crash.html [ Skip ]  # Crashing

Deleted: trunk/LayoutTests/platform/win/fast/html/marquee-scroll-expected.txt (204196 => 204197)


--- trunk/LayoutTests/platform/win/fast/html/marquee-scroll-expected.txt	2016-08-05 22:26:01 UTC (rev 204196)
+++ trunk/LayoutTests/platform/win/fast/html/marquee-scroll-expected.txt	2016-08-05 22:34:12 UTC (rev 204197)
@@ -1,23 +0,0 @@
-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 784x584
-      RenderBlock {P} at (0,0) size 784x18
-        RenderText {#text} at (0,0) size 53x18
-          text run at (0,0) width 53: "Test for "
-        RenderInline {A} at (0,0) size 68x18 [color=#0000EE]
-          RenderText {#text} at (53,0) size 68x18
-            text run at (53,0) width 68: "bug 15263"
-        RenderText {#text} at (121,0) size 394x18
-          text run at (121,0) width 394: ": REGRESSION: scrolldelay=0 causes marquee not to display"
-      RenderBlock {P} at (0,34) size 784x36
-        RenderText {#text} at (0,0) size 776x36
-          text run at (0,0) width 776: "The marquee below is defined with a scrollDelay value of zero and with the truespeed attribute assigned to an empty string."
-          text run at (0,18) width 557: "It should scroll until the text, \"The marquee scroll test passed\" is visible and left justified."
-      RenderBlock (anonymous) at (0,86) size 784x18
-        RenderText {#text} at (0,0) size 0x0
-layer at (8,94) size 392x18 scrollX -392
-  RenderBlock {MARQUEE} at (0,0) size 392x18 [bgcolor=#00FFFF]
-    RenderText {#text} at (0,0) size 192x18
-      text run at (0,0) width 192: "The marquee scroll test passed"

Deleted: trunk/LayoutTests/platform/win/fast/html/marquee-scrollamount-expected.txt (204196 => 204197)


--- trunk/LayoutTests/platform/win/fast/html/marquee-scrollamount-expected.txt	2016-08-05 22:26:01 UTC (rev 204196)
+++ trunk/LayoutTests/platform/win/fast/html/marquee-scrollamount-expected.txt	2016-08-05 22:34:12 UTC (rev 204197)
@@ -1,14 +0,0 @@
-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 784x584
-      RenderBlock {P} at (0,0) size 784x36
-        RenderText {#text} at (0,0) size 750x36
-          text run at (0,0) width 750: "This is a regression test for https://bugs.webkit.org/show_bug.cgi?id=50434. It verifies that a marquee does not animate"
-          text run at (0,18) width 250: "when scrollAmount is set to 0 by script."
-      RenderBlock (anonymous) at (0,52) size 784x18
-layer at (8,60) size 100x18 scrollX -100
-  RenderBlock {MARQUEE} at (0,0) size 100x18
-    RenderText {#text} at (0,0) size 27x18
-      text run at (0,0) width 27: "Test"
\ No newline at end of file

Modified: trunk/Source/WebCore/ChangeLog (204196 => 204197)


--- trunk/Source/WebCore/ChangeLog	2016-08-05 22:26:01 UTC (rev 204196)
+++ trunk/Source/WebCore/ChangeLog	2016-08-05 22:34:12 UTC (rev 204197)
@@ -1,3 +1,22 @@
+2016-08-05  Simon Fraser  <[email protected]>
+
+        marquee with "truespeed" animates at > 60fps, hogging CPU
+        https://bugs.webkit.org/show_bug.cgi?id=160609
+
+        Reviewed by David Hyatt.
+        
+        A <marquee truespeed="" scrollDelay="0"> would fire a zero-delay timer and also
+        fail to animate, hogging CPU.
+        
+        Fix to cap the timer at 16ms intervals. We don't believe it's necessary to
+        maintain web compatibility here.
+
+        Tested by existing tests.
+
+        * html/HTMLMarqueeElement.cpp:
+        (WebCore::HTMLMarqueeElement::minimumDelay):
+        * html/HTMLMarqueeElement.h:
+
 2016-08-05  Ryan Haddad  <[email protected]>
 
         Unreviewed, rolling out r204181.

Modified: trunk/Source/WebCore/html/HTMLMarqueeElement.cpp (204196 => 204197)


--- trunk/Source/WebCore/html/HTMLMarqueeElement.cpp	2016-08-05 22:26:01 UTC (rev 204196)
+++ trunk/Source/WebCore/html/HTMLMarqueeElement.cpp	2016-08-05 22:34:12 UTC (rev 204197)
@@ -56,7 +56,7 @@
         // WinIE uses 60ms as the minimum delay by default.
         return 60;
     }
-    return 0;
+    return 16; // Don't allow timers at < 16ms intervals to avoid CPU hogging: webkit.org/b/160609
 }
 
 bool HTMLMarqueeElement::isPresentationAttribute(const QualifiedName& name) const

Modified: trunk/Source/WebCore/html/HTMLMarqueeElement.h (204196 => 204197)


--- trunk/Source/WebCore/html/HTMLMarqueeElement.h	2016-08-05 22:26:01 UTC (rev 204196)
+++ trunk/Source/WebCore/html/HTMLMarqueeElement.h	2016-08-05 22:34:12 UTC (rev 204197)
@@ -41,12 +41,15 @@
     void start();
     void stop() final;
     
+    // Number of pixels to move on each scroll movement. Defaults to 6.
     unsigned scrollAmount() const;
     void setScrollAmount(unsigned);
     
+    // Interval between each scroll movement, in milliseconds. Defaults to 60.
     unsigned scrollDelay() const;
     void setScrollDelay(unsigned);
     
+    // Loop count. -1 means loop indefinitely.
     int loop() const;
     void setLoop(int, ExceptionCode&);
     
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to