Unreviewed, rolling out r183985.
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 8 May 2015 09:44:28 +0000 (09:44 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 8 May 2015 09:44:28 +0000 (09:44 +0000)
https://bugs.webkit.org/show_bug.cgi?id=144796

broke loader/go-back-to-different-window-size.html (Requested
by kling on #webkit).

Reverted changeset:

"Throttle RequestAnimationFrame in subframes that are outside
the viewport"
https://bugs.webkit.org/show_bug.cgi?id=144718
http://trac.webkit.org/changeset/183985

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@183990 268f45cc-cd09-0410-ab3c-d52691b4dbfc

16 files changed:
LayoutTests/ChangeLog
LayoutTests/fast/animation/request-animation-frame-throttle-subframe-display-none-expected.txt [deleted file]
LayoutTests/fast/animation/request-animation-frame-throttle-subframe-display-none.html [deleted file]
LayoutTests/fast/animation/request-animation-frame-throttle-subframe-expected.txt [deleted file]
LayoutTests/fast/animation/request-animation-frame-throttle-subframe.html [deleted file]
LayoutTests/fast/animation/resources/requestAnimationFrame-frame-2.html [deleted file]
LayoutTests/fast/animation/resources/requestAnimationFrame-frame.html [deleted file]
Source/WebCore/ChangeLog
Source/WebCore/dom/Document.h
Source/WebCore/dom/ScriptedAnimationController.cpp
Source/WebCore/dom/ScriptedAnimationController.h
Source/WebCore/page/FrameView.cpp
Source/WebCore/page/FrameView.h
Source/WebCore/testing/Internals.cpp
Source/WebCore/testing/Internals.h
Source/WebCore/testing/Internals.idl

index 3a103f4..d0ee359 100644 (file)
@@ -1,3 +1,18 @@
+2015-05-08  Commit Queue  <commit-queue@webkit.org>
+
+        Unreviewed, rolling out r183985.
+        https://bugs.webkit.org/show_bug.cgi?id=144796
+
+        broke loader/go-back-to-different-window-size.html (Requested
+        by kling on #webkit).
+
+        Reverted changeset:
+
+        "Throttle RequestAnimationFrame in subframes that are outside
+        the viewport"
+        https://bugs.webkit.org/show_bug.cgi?id=144718
+        http://trac.webkit.org/changeset/183985
+
 2015-05-08  Csaba Osztrogon√°c  <ossy@webkit.org>
 
         REGRESSION(r183072): dfg-put-by-id-prototype-check.js.layout-dfg-eager-no-cjit fails on AArch64 Linux
diff --git a/LayoutTests/fast/animation/request-animation-frame-throttle-subframe-display-none-expected.txt b/LayoutTests/fast/animation/request-animation-frame-throttle-subframe-display-none-expected.txt
deleted file mode 100644 (file)
index 02d0f50..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-Tests that requestAnimationFrame is throttled in subframes that are display:none
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-
-Frame is initially visibile so requestAnimationFrame should not be throttled
-PASS testFrame.contentWindow.internals.isRequestAnimationFrameThrottled() became false
-PASS testFrame.contentWindow.internals.isRequestAnimationFrameThrottled() is false
-Hiding subframe.
-testFrame.style.display = 'none';
-PASS testFrame.contentWindow.internals.isRequestAnimationFrameThrottled() became true
-PASS testFrame.contentWindow.internals.isRequestAnimationFrameThrottled() is true
-Show subframe again
-testFrame.style.display = 'block';
-PASS testFrame.contentWindow.internals.isRequestAnimationFrameThrottled() became false
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/LayoutTests/fast/animation/request-animation-frame-throttle-subframe-display-none.html b/LayoutTests/fast/animation/request-animation-frame-throttle-subframe-display-none.html
deleted file mode 100644 (file)
index e8d11cf..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-<!DOCTYPE html>
-<html>
-<body>
-<script src="../../resources/js-test-pre.js"></script>
-<script>
-description("Tests that requestAnimationFrame is throttled in subframes that are display:none");
-window.jsTestIsAsync = true;
-
-function checkSubframeThrottled()
-{
-    shouldBeTrue("testFrame.contentWindow.internals.isRequestAnimationFrameThrottled()");
-
-    debug("Show subframe again");
-    evalAndLog("testFrame.style.display = 'block';");
-
-    shouldBecomeEqual("testFrame.contentWindow.internals.isRequestAnimationFrameThrottled()", "false", finishJSTest);
-}
-
-function hideFrame()
-{
-    shouldBeFalse("testFrame.contentWindow.internals.isRequestAnimationFrameThrottled()");
-
-    debug("Hiding subframe.");
-    evalAndLog("testFrame.style.display = 'none';");
-
-    shouldBecomeEqual("testFrame.contentWindow.internals.isRequestAnimationFrameThrottled()", "true", checkSubframeThrottled);
-}
-
-function runTest()
-{
-    testFrame = document.getElementById("testFrame");
-    debug("Frame is initially visibile so requestAnimationFrame should not be throttled");
-    shouldBecomeEqual("testFrame.contentWindow.internals.isRequestAnimationFrameThrottled()", "false", hideFrame);
-}
-
-var i = 0;
-requestAnimationFrame(function() {
-    i++;
-});
-</script>
-<iframe id="testFrame" src="resources/requestAnimationFrame-frame.html" onload="runTest()"></iframe>
-<script src="../../resources/js-test-post.js"></script>
-</body>
-</html>
diff --git a/LayoutTests/fast/animation/request-animation-frame-throttle-subframe-expected.txt b/LayoutTests/fast/animation/request-animation-frame-throttle-subframe-expected.txt
deleted file mode 100644 (file)
index 05983b3..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-Tests that requestAnimationFrame is throttled in subframes that are outside the viewport
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-
-Frame is initially outside the viewport so requestAnimationFrame should be throttled
-PASS testFrame.contentWindow.internals.isRequestAnimationFrameThrottled() became true
-PASS internals.isRequestAnimationFrameThrottled() is false
-PASS testFrame.contentWindow.internals.isRequestAnimationFrameThrottled() is true
-PASS grandChildFrame.contentWindow.internals.isRequestAnimationFrameThrottled() is true
-Scrolling frame into view.
-RequestAnimationFrame should no longer be throttled
-PASS internals.isRequestAnimationFrameThrottled() is false
-PASS grandChildFrame.contentWindow.internals.isRequestAnimationFrameThrottled() is false
-PASS testFrame.contentWindow.internals.isRequestAnimationFrameThrottled() is false
-Scrolling frame out of view again.
-PASS internals.isRequestAnimationFrameThrottled() is false
-PASS testFrame.contentWindow.internals.isRequestAnimationFrameThrottled() became true
-PASS testFrame.contentWindow.internals.isRequestAnimationFrameThrottled() is true
-PASS grandChildFrame.contentWindow.internals.isRequestAnimationFrameThrottled() is true
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/LayoutTests/fast/animation/request-animation-frame-throttle-subframe.html b/LayoutTests/fast/animation/request-animation-frame-throttle-subframe.html
deleted file mode 100644 (file)
index f8940f3..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-<!DOCTYPE html>
-<html>
-<body>
-<script src="../../resources/js-test-pre.js"></script>
-<script>
-description("Tests that requestAnimationFrame is throttled in subframes that are outside the viewport");
-window.jsTestIsAsync = true;
-
-function checkSubframesThrottled()
-{
-    shouldBeTrue("testFrame.contentWindow.internals.isRequestAnimationFrameThrottled()");
-    shouldBeTrue("grandChildFrame.contentWindow.internals.isRequestAnimationFrameThrottled()");
-
-    finishJSTest();
-}
-
-function scrollFrameOutOfView()
-{
-    debug("Scrolling frame out of view again.");
-    window.scroll(0, 0);
-
-    shouldBeFalse("internals.isRequestAnimationFrameThrottled()");
-    shouldBecomeEqual("testFrame.contentWindow.internals.isRequestAnimationFrameThrottled()", "true", checkSubframesThrottled);
-}
-
-function scrollFrameIntoView()
-{
-    shouldBeFalse("internals.isRequestAnimationFrameThrottled()");
-    shouldBeTrue("testFrame.contentWindow.internals.isRequestAnimationFrameThrottled()");
-    shouldBeTrue("grandChildFrame.contentWindow.internals.isRequestAnimationFrameThrottled()");
-
-    debug("Scrolling frame into view.");
-    window.internals.scrollElementToRect(testFrame, 0, 0, 300, 300);
-
-    debug("RequestAnimationFrame should no longer be throttled");
-    shouldBeFalse("internals.isRequestAnimationFrameThrottled()");
-    shouldBeFalse("grandChildFrame.contentWindow.internals.isRequestAnimationFrameThrottled()");
-    shouldBeFalse("testFrame.contentWindow.internals.isRequestAnimationFrameThrottled()");
-
-    scrollFrameOutOfView();
-}
-
-function runTest()
-{
-    testFrame = document.getElementById("testFrame");
-    grandChildFrame = testFrame.contentDocument.getElementById("grandChildFrame");
-    debug("Frame is initially outside the viewport so requestAnimationFrame should be throttled");
-    shouldBecomeEqual("testFrame.contentWindow.internals.isRequestAnimationFrameThrottled()", "true", scrollFrameIntoView);
-}
-
-var i = 0;
-requestAnimationFrame(function() {
-    i++;
-});
-</script>
-<div style="position: relative; width: 1600px; height: 2400px; background-color: green;">
-    <iframe id="testFrame" src="resources/requestAnimationFrame-frame.html" style="position:absolute; left: 600px; top: 800px;" onload="runTest()"></iframe>
-</div>
-<script src="../../resources/js-test-post.js"></script>
-</body>
-</html>
diff --git a/LayoutTests/fast/animation/resources/requestAnimationFrame-frame-2.html b/LayoutTests/fast/animation/resources/requestAnimationFrame-frame-2.html
deleted file mode 100644 (file)
index 51125d9..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-<!DOCTYPE html>
-<html>
-<body>
-<script>
-var i = 0;
-requestAnimationFrame(function() {
-  i++;
-});
-</script>
-</body>
-</html>
diff --git a/LayoutTests/fast/animation/resources/requestAnimationFrame-frame.html b/LayoutTests/fast/animation/resources/requestAnimationFrame-frame.html
deleted file mode 100644 (file)
index c0d7636..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<!DOCTYPE html>
-<html>
-<body>
-<iframe id="grandChildFrame" src="requestAnimationFrame-frame-2.html"></iframe>
-<script>
-var i = 0;
-requestAnimationFrame(function() {
-  i++;
-});
-</script>
-</body>
-</html>
index 292d6a6..c0c6a92 100644 (file)
@@ -1,3 +1,18 @@
+2015-05-08  Commit Queue  <commit-queue@webkit.org>
+
+        Unreviewed, rolling out r183985.
+        https://bugs.webkit.org/show_bug.cgi?id=144796
+
+        broke loader/go-back-to-different-window-size.html (Requested
+        by kling on #webkit).
+
+        Reverted changeset:
+
+        "Throttle RequestAnimationFrame in subframes that are outside
+        the viewport"
+        https://bugs.webkit.org/show_bug.cgi?id=144718
+        http://trac.webkit.org/changeset/183985
+
 2015-05-08  Youenn Fablet  <youenn.fablet@crf.canon.fr>
 
         SharedBuffer::m_size should be initialized to 0 when defining it
index cc1c038..befb5a5 100644 (file)
@@ -948,9 +948,6 @@ public:
 
     virtual void postTask(Task) override final; // Executes the task on context's thread asynchronously.
 
-#if ENABLE(REQUEST_ANIMATION_FRAME)
-    ScriptedAnimationController* scriptedAnimationController() { return m_scriptedAnimationController.get(); }
-#endif
     void suspendScriptedAnimationControllerCallbacks();
     void resumeScriptedAnimationControllerCallbacks();
     void scriptedAnimationControllerSetThrottled(bool);
index 1b39bf1..7edebd4 100644 (file)
@@ -34,8 +34,6 @@
 #include "DocumentLoader.h"
 #include "FrameView.h"
 #include "InspectorInstrumentation.h"
-#include "Logging.h"
-#include "MainFrame.h"
 #include "RequestAnimationFrameCallback.h"
 #include "Settings.h"
 #include <wtf/Ref.h>
@@ -86,8 +84,6 @@ void ScriptedAnimationController::setThrottled(bool isThrottled)
     if (m_isThrottled == isThrottled)
         return;
 
-    LOG(Animations, "%p - Setting RequestAnimationFrame throttling state to %d in frame %p (isMainFrame: %d)", this, isThrottled, m_document->frame(), m_document->frame() ? m_document->frame()->isMainFrame() : 0);
-
     m_isThrottled = isThrottled;
     if (m_animationTimer.isActive()) {
         m_animationTimer.stop();
@@ -98,15 +94,6 @@ void ScriptedAnimationController::setThrottled(bool isThrottled)
 #endif
 }
 
-bool ScriptedAnimationController::isThrottled() const
-{
-#if USE(REQUEST_ANIMATION_FRAME_TIMER) && USE(REQUEST_ANIMATION_FRAME_DISPLAY_MONITOR)
-    return m_isThrottled;
-#else
-    return false;
-#endif
-}
-
 ScriptedAnimationController::CallbackId ScriptedAnimationController::registerCallback(PassRefPtr<RequestAnimationFrameCallback> callback)
 {
     ScriptedAnimationController::CallbackId id = ++m_nextCallbackId;
index 89ab019..7b28e79 100644 (file)
@@ -68,7 +68,6 @@ public:
     void suspend();
     void resume();
     void setThrottled(bool);
-    WEBCORE_EXPORT bool isThrottled() const;
 
     void windowScreenDidChange(PlatformDisplayID);
 
index 8955c19..a722a19 100644 (file)
@@ -80,7 +80,6 @@
 #include "RenderWidget.h"
 #include "SVGDocument.h"
 #include "SVGSVGElement.h"
-#include "ScriptedAnimationController.h"
 #include "ScrollAnimator.h"
 #include "ScrollingCoordinator.h"
 #include "Settings.h"
@@ -1756,18 +1755,10 @@ void FrameView::delayedScrollEventTimerFired()
 
 void FrameView::viewportContentsChanged()
 {
-    if (!frame().view()) {
-        // The frame is being destroyed.
-        return;
-    }
-
     // When the viewport contents changes (scroll, resize, style recalc, layout, ...),
     // check if we should resume animated images or unthrottle DOM timers.
-    applyRecursivelyWithVisibleRect([] (FrameView& frameView, const IntRect& visibleRect) {
-        frameView.resumeVisibleImageAnimations(visibleRect);
-        frameView.updateThrottledDOMTimersState(visibleRect);
-        frameView.updateScriptedAnimationsThrottlingState(visibleRect);
-    });
+    resumeVisibleImageAnimationsIncludingSubframes();
+    updateThrottledDOMTimersState();
 }
 
 bool FrameView::fixedElementsLayoutRelativeToFrame() const
@@ -2104,60 +2095,28 @@ void FrameView::scrollPositionChanged(const IntPoint& oldPosition, const IntPoin
     viewportContentsChanged();
 }
 
-void FrameView::applyRecursivelyWithVisibleRect(const std::function<void (FrameView& frameView, const IntRect& visibleRect)>& apply)
+void FrameView::resumeVisibleImageAnimationsIncludingSubframes()
 {
+    auto* renderView = frame().contentRenderer();
+    if (!renderView)
+        return;
+
     IntRect windowClipRect = this->windowClipRect();
     auto visibleRect = windowToContents(windowClipRect);
-    apply(*this, visibleRect);
+    if (visibleRect.isEmpty())
+        return;
+
+    // Resume paused image animations in this frame.
+    renderView->resumePausedImageAnimationsIfNeeded(visibleRect);
 
     // Recursive call for subframes. We cache the current FrameView's windowClipRect to avoid recomputing it for every subframe.
     TemporaryChange<IntRect*> windowClipRectCache(m_cachedWindowClipRect, &windowClipRect);
     for (Frame* childFrame = frame().tree().firstChild(); childFrame; childFrame = childFrame->tree().nextSibling()) {
         if (auto* childView = childFrame->view())
-            childView->applyRecursivelyWithVisibleRect(apply);
+            childView->resumeVisibleImageAnimationsIncludingSubframes();
     }
 }
 
-void FrameView::resumeVisibleImageAnimations(const IntRect& visibleRect)
-{
-    if (visibleRect.isEmpty())
-        return;
-
-    if (auto* renderView = frame().contentRenderer())
-        renderView->resumePausedImageAnimationsIfNeeded(visibleRect);
-}
-
-void FrameView::updateScriptedAnimationsThrottlingState(const IntRect& visibleRect)
-{
-#if ENABLE(REQUEST_ANIMATION_FRAME)
-    if (frame().isMainFrame())
-        return;
-
-    auto* document = frame().document();
-    if (!document)
-        return;
-
-    auto* scriptedAnimationController = document->scriptedAnimationController();
-    if (!scriptedAnimationController)
-        return;
-
-    // FIXME: This doesn't work for subframes of a "display: none" frame because
-    // they have a non-null ownerRenderer.
-    bool shouldThrottle = !frame().ownerRenderer() || visibleRect.isEmpty();
-    scriptedAnimationController->setThrottled(shouldThrottle);
-#else
-    UNUSED_PARAM(visibleRect);
-#endif
-}
-
-
-void FrameView::resumeVisibleImageAnimationsIncludingSubframes()
-{
-    applyRecursivelyWithVisibleRect([] (FrameView& frameView, const IntRect& visibleRect) {
-        frameView.resumeVisibleImageAnimations(visibleRect);
-    });
-}
-
 void FrameView::updateLayerPositionsAfterScrolling()
 {
     // If we're scrolling as a result of updating the view size after layout, we'll update widgets and layer positions soon anyway.
@@ -3100,11 +3059,13 @@ void FrameView::unregisterThrottledDOMTimer(DOMTimer* timer)
     m_throttledTimers.remove(timer);
 }
 
-void FrameView::updateThrottledDOMTimersState(const IntRect& visibleRect)
+void FrameView::updateThrottledDOMTimersState()
 {
     if (m_throttledTimers.isEmpty())
         return;
 
+    IntRect visibleRect = windowToContents(windowClipRect());
+
     // Do not iterate over the HashSet because calling DOMTimer::updateThrottlingStateAfterViewportChange()
     // may cause timers to remove themselves from it while we are iterating.
     Vector<DOMTimer*> timers;
index 52f4e6b..b2d7cef 100644 (file)
@@ -596,11 +596,7 @@ private:
     void forceLayoutParentViewIfNeeded();
     void performPostLayoutTasks();
     void autoSizeIfEnabled();
-
-    void applyRecursivelyWithVisibleRect(const std::function<void (FrameView& frameView, const IntRect& visibleRect)>&);
-    void updateThrottledDOMTimersState(const IntRect& visibleRect);
-    void resumeVisibleImageAnimations(const IntRect& visibleRect);
-    void updateScriptedAnimationsThrottlingState(const IntRect& visibleRect);
+    void updateThrottledDOMTimersState();
 
     void updateLayerFlushThrottling();
     WEBCORE_EXPORT void adjustTiledBackingCoverage();
index 05ae21d..8829ee0 100644 (file)
@@ -98,7 +98,6 @@
 #include "RenderedDocumentMarker.h"
 #include "RuntimeEnabledFeatures.h"
 #include "SchemeRegistry.h"
-#include "ScriptedAnimationController.h"
 #include "ScrollingCoordinator.h"
 #include "SerializedScriptValue.h"
 #include "Settings.h"
@@ -767,18 +766,6 @@ bool Internals::isTimerThrottled(int timeoutId, ExceptionCode& ec)
     return timer->m_throttleState == DOMTimer::ShouldThrottle;
 }
 
-bool Internals::isRequestAnimationFrameThrottled() const
-{
-#if ENABLE(REQUEST_ANIMATION_FRAME)
-    auto* scriptedAnimationController = contextDocument()->scriptedAnimationController();
-    if (!scriptedAnimationController)
-        return false;
-    return scriptedAnimationController->isThrottled();
-#else
-    return false;
-#endif
-}
-
 String Internals::visiblePlaceholder(Element* element)
 {
     if (is<HTMLTextFormControlElement>(element)) {
index 12d6f87..0941229 100644 (file)
@@ -113,7 +113,6 @@ public:
 
     // DOMTimers throttling testing.
     bool isTimerThrottled(int timeoutId, ExceptionCode&);
-    bool isRequestAnimationFrameThrottled() const;
 
     // Spatial Navigation testing.
     unsigned lastSpatialNavigationCandidateCount(ExceptionCode&) const;
index 6d23299..1b00980 100644 (file)
@@ -279,8 +279,6 @@ enum ResourceLoadPriority {
     // Query if a timer is currently throttled, to debug timer throttling.
     [RaisesException] boolean isTimerThrottled(long timerHandle);
 
-    boolean isRequestAnimationFrameThrottled();
-
     [RaisesException] void startTrackingStyleRecalcs();
     [RaisesException] unsigned long styleRecalcCount();