Diff
Modified: trunk/LayoutTests/ChangeLog (183989 => 183990)
--- trunk/LayoutTests/ChangeLog 2015-05-08 09:37:56 UTC (rev 183989)
+++ trunk/LayoutTests/ChangeLog 2015-05-08 09:44:28 UTC (rev 183990)
@@ -1,3 +1,18 @@
+2015-05-08 Commit Queue <[email protected]>
+
+ 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 <[email protected]>
REGRESSION(r183072): dfg-put-by-id-prototype-check.js.layout-dfg-eager-no-cjit fails on AArch64 Linux
Deleted: trunk/LayoutTests/fast/animation/request-animation-frame-throttle-subframe-display-none-expected.txt (183989 => 183990)
--- trunk/LayoutTests/fast/animation/request-animation-frame-throttle-subframe-display-none-expected.txt 2015-05-08 09:37:56 UTC (rev 183989)
+++ trunk/LayoutTests/fast/animation/request-animation-frame-throttle-subframe-display-none-expected.txt 2015-05-08 09:44:28 UTC (rev 183990)
@@ -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
-
Deleted: trunk/LayoutTests/fast/animation/request-animation-frame-throttle-subframe-display-none.html (183989 => 183990)
--- trunk/LayoutTests/fast/animation/request-animation-frame-throttle-subframe-display-none.html 2015-05-08 09:37:56 UTC (rev 183989)
+++ trunk/LayoutTests/fast/animation/request-animation-frame-throttle-subframe-display-none.html 2015-05-08 09:44:28 UTC (rev 183990)
@@ -1,44 +0,0 @@
-<!DOCTYPE html>
-<html>
-<body>
-<script src=""
-<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="" _onload_="runTest()"></iframe>
-<script src=""
-</body>
-</html>
Deleted: trunk/LayoutTests/fast/animation/request-animation-frame-throttle-subframe-expected.txt (183989 => 183990)
--- trunk/LayoutTests/fast/animation/request-animation-frame-throttle-subframe-expected.txt 2015-05-08 09:37:56 UTC (rev 183989)
+++ trunk/LayoutTests/fast/animation/request-animation-frame-throttle-subframe-expected.txt 2015-05-08 09:44:28 UTC (rev 183990)
@@ -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
-
Deleted: trunk/LayoutTests/fast/animation/request-animation-frame-throttle-subframe.html (183989 => 183990)
--- trunk/LayoutTests/fast/animation/request-animation-frame-throttle-subframe.html 2015-05-08 09:37:56 UTC (rev 183989)
+++ trunk/LayoutTests/fast/animation/request-animation-frame-throttle-subframe.html 2015-05-08 09:44:28 UTC (rev 183990)
@@ -1,61 +0,0 @@
-<!DOCTYPE html>
-<html>
-<body>
-<script src=""
-<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="" style="position:absolute; left: 600px; top: 800px;" _onload_="runTest()"></iframe>
-</div>
-<script src=""
-</body>
-</html>
Modified: trunk/Source/WebCore/ChangeLog (183989 => 183990)
--- trunk/Source/WebCore/ChangeLog 2015-05-08 09:37:56 UTC (rev 183989)
+++ trunk/Source/WebCore/ChangeLog 2015-05-08 09:44:28 UTC (rev 183990)
@@ -1,3 +1,18 @@
+2015-05-08 Commit Queue <[email protected]>
+
+ 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 <[email protected]>
SharedBuffer::m_size should be initialized to 0 when defining it
Modified: trunk/Source/WebCore/dom/Document.h (183989 => 183990)
--- trunk/Source/WebCore/dom/Document.h 2015-05-08 09:37:56 UTC (rev 183989)
+++ trunk/Source/WebCore/dom/Document.h 2015-05-08 09:44:28 UTC (rev 183990)
@@ -948,9 +948,6 @@
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);
Modified: trunk/Source/WebCore/dom/ScriptedAnimationController.cpp (183989 => 183990)
--- trunk/Source/WebCore/dom/ScriptedAnimationController.cpp 2015-05-08 09:37:56 UTC (rev 183989)
+++ trunk/Source/WebCore/dom/ScriptedAnimationController.cpp 2015-05-08 09:44:28 UTC (rev 183990)
@@ -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 @@
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 @@
#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;
Modified: trunk/Source/WebCore/dom/ScriptedAnimationController.h (183989 => 183990)
--- trunk/Source/WebCore/dom/ScriptedAnimationController.h 2015-05-08 09:37:56 UTC (rev 183989)
+++ trunk/Source/WebCore/dom/ScriptedAnimationController.h 2015-05-08 09:44:28 UTC (rev 183990)
@@ -68,7 +68,6 @@
void suspend();
void resume();
void setThrottled(bool);
- WEBCORE_EXPORT bool isThrottled() const;
void windowScreenDidChange(PlatformDisplayID);
Modified: trunk/Source/WebCore/page/FrameView.cpp (183989 => 183990)
--- trunk/Source/WebCore/page/FrameView.cpp 2015-05-08 09:37:56 UTC (rev 183989)
+++ trunk/Source/WebCore/page/FrameView.cpp 2015-05-08 09:44:28 UTC (rev 183990)
@@ -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::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 @@
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 @@
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;
Modified: trunk/Source/WebCore/page/FrameView.h (183989 => 183990)
--- trunk/Source/WebCore/page/FrameView.h 2015-05-08 09:37:56 UTC (rev 183989)
+++ trunk/Source/WebCore/page/FrameView.h 2015-05-08 09:44:28 UTC (rev 183990)
@@ -596,12 +596,8 @@
void forceLayoutParentViewIfNeeded();
void performPostLayoutTasks();
void autoSizeIfEnabled();
+ void updateThrottledDOMTimersState();
- 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 updateLayerFlushThrottling();
WEBCORE_EXPORT void adjustTiledBackingCoverage();
Modified: trunk/Source/WebCore/testing/Internals.cpp (183989 => 183990)
--- trunk/Source/WebCore/testing/Internals.cpp 2015-05-08 09:37:56 UTC (rev 183989)
+++ trunk/Source/WebCore/testing/Internals.cpp 2015-05-08 09:44:28 UTC (rev 183990)
@@ -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 @@
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)) {
Modified: trunk/Source/WebCore/testing/Internals.h (183989 => 183990)
--- trunk/Source/WebCore/testing/Internals.h 2015-05-08 09:37:56 UTC (rev 183989)
+++ trunk/Source/WebCore/testing/Internals.h 2015-05-08 09:44:28 UTC (rev 183990)
@@ -113,7 +113,6 @@
// DOMTimers throttling testing.
bool isTimerThrottled(int timeoutId, ExceptionCode&);
- bool isRequestAnimationFrameThrottled() const;
// Spatial Navigation testing.
unsigned lastSpatialNavigationCandidateCount(ExceptionCode&) const;
Modified: trunk/Source/WebCore/testing/Internals.idl (183989 => 183990)
--- trunk/Source/WebCore/testing/Internals.idl 2015-05-08 09:37:56 UTC (rev 183989)
+++ trunk/Source/WebCore/testing/Internals.idl 2015-05-08 09:44:28 UTC (rev 183990)
@@ -279,8 +279,6 @@
// 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();