Changeset 172854 in webkit


Ignore:
Timestamp:
Aug 21, 2014, 10:38:50 PM (11 years ago)
Author:
Antti Koivisto
Message:

Animated GIFs scrolled out of view still cause titlebar blur to update, on tumblr.com page
https://bugs.webkit.org/show_bug.cgi?id=136139

Reviewed by Simon Fraser.

Source/WebCore:

The mechanism for pausing GIF images outside the viewport did not work for subframes.

Test: fast/repaint/no-animation-outside-viewport-subframe.html

  • WebCore.exp.in:
  • page/FrameView.cpp:

(WebCore::FrameView::scrollPositionChanged):
(WebCore::FrameView::resumeVisibleImageAnimationsIncludingSubframes):

Add a function for resuming animations as needed in all subframes.
This is used after scrolling instead of calling the RenderView function directly.

  • page/FrameView.h:
  • page/Page.cpp:

(WebCore::Page::resumeAnimatingImages):

  • rendering/RenderElement.cpp:

(WebCore::RenderElement::newImageAnimationFrameAvailable):

Determine the overall visible rect so that it is correct in subframes too.

  • rendering/RenderLayer.cpp:

(WebCore::RenderLayer::scrollTo):

  • rendering/RenderView.cpp:

(WebCore::RenderView::resumePausedImageAnimationsIfNeeded):

LayoutTests:

  • fast/repaint/no-animation-outside-viewport-subframe-expected.txt: Added.
  • fast/repaint/no-animation-outside-viewport-subframe.html: Added.
Location:
trunk
Files:
2 added
10 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified trunk/LayoutTests/ChangeLog

    r172847 r172854  
     12014-08-21  Antti Koivisto  <antti@apple.com>
     2
     3        Animated GIFs scrolled out of view still cause titlebar blur to update, on tumblr.com page
     4        https://bugs.webkit.org/show_bug.cgi?id=136139
     5
     6        Reviewed by Simon Fraser.
     7
     8        * fast/repaint/no-animation-outside-viewport-subframe-expected.txt: Added.
     9        * fast/repaint/no-animation-outside-viewport-subframe.html: Added.
     10
    1112014-08-21  Zalan Bujtas  <zalan@apple.com>
    212
  • TabularUnified trunk/Source/WebCore/ChangeLog

    r172849 r172854  
     12014-08-21  Antti Koivisto  <antti@apple.com>
     2
     3        Animated GIFs scrolled out of view still cause titlebar blur to update, on tumblr.com page
     4        https://bugs.webkit.org/show_bug.cgi?id=136139
     5
     6        Reviewed by Simon Fraser.
     7
     8        The mechanism for pausing GIF images outside the viewport did not work for subframes.
     9
     10        Test: fast/repaint/no-animation-outside-viewport-subframe.html
     11
     12        * WebCore.exp.in:
     13        * page/FrameView.cpp:
     14        (WebCore::FrameView::scrollPositionChanged):
     15        (WebCore::FrameView::resumeVisibleImageAnimationsIncludingSubframes):
     16
     17            Add a function for resuming animations as needed in all subframes.
     18            This is used after scrolling instead of calling the RenderView function directly.
     19
     20        * page/FrameView.h:
     21        * page/Page.cpp:
     22        (WebCore::Page::resumeAnimatingImages):
     23        * rendering/RenderElement.cpp:
     24        (WebCore::RenderElement::newImageAnimationFrameAvailable):
     25
     26            Determine the overall visible rect so that it is correct in subframes too.
     27
     28        * rendering/RenderLayer.cpp:
     29        (WebCore::RenderLayer::scrollTo):
     30        * rendering/RenderView.cpp:
     31        (WebCore::RenderView::resumePausedImageAnimationsIfNeeded):
     32
    1332014-08-21  Alex Christensen  <achristensen@webkit.org>
    234
  • TabularUnified trunk/Source/WebCore/WebCore.exp.in

    r172837 r172854  
    25282528_WebUIApplicationWillEnterForegroundNotification
    25292529_WebUIApplicationWillResignActiveNotification
    2530 __ZN7WebCore10RenderView35resumePausedImageAnimationsIfNeededEv
    25312530__ZN7WebCore10ScrollView15setScrollOffsetERKNS_8IntPointE
    25322531__ZN7WebCore10ScrollView21setExposedContentRectERKNS_9FloatRectE
     
    27532752__ZN7WebCore9FrameView33rectForViewportConstrainedObjectsERKNS_10LayoutRectERKNS_10LayoutSizeEfbNS_30ScrollBehaviorForFixedElementsE
    27542753__ZN7WebCore9FrameView36scheduleLayerFlushAllowingThrottlingEv
     2754__ZN7WebCore9FrameView46resumeVisibleImageAnimationsIncludingSubframesEv
    27552755__ZN7WebCore9PageGroup17removeVisitedLinkERKNS_3URLE
    27562756__ZNK7WebCore10FloatPointcv7CGPointEv
  • TabularUnified trunk/Source/WebCore/page/FrameView.cpp

    r172543 r172854  
    20852085
    20862086    if (RenderView* renderView = this->renderView()) {
    2087         renderView->resumePausedImageAnimationsIfNeeded();
    20882087        if (renderView->usesCompositing())
    20892088            renderView->compositor().frameViewDidScroll();
     2089    }
     2090
     2091    resumeVisibleImageAnimationsIncludingSubframes();
     2092}
     2093
     2094void FrameView::resumeVisibleImageAnimationsIncludingSubframes()
     2095{
     2096    // A change in scroll position may affect image visibility in subframes.
     2097    for (auto* frame = m_frame.get(); frame; frame = frame->tree().traverseNext(m_frame.get())) {
     2098        if (auto* renderView = frame->contentRenderer())
     2099            renderView->resumePausedImageAnimationsIfNeeded();
    20902100    }
    20912101}
  • TabularUnified trunk/Source/WebCore/page/FrameView.h

    r172844 r172854  
    244244    void delayedScrollEventTimerFired(Timer<FrameView>&);
    245245
     246    void resumeVisibleImageAnimationsIncludingSubframes();
     247
    246248    // This is different than visibleContentRect() in that it ignores negative (or overly positive)
    247249    // offsets from rubber-banding, and it takes zooming into account.
  • TabularUnified trunk/Source/WebCore/page/Page.cpp

    r172235 r172854  
    12041204    // Drawing models which cache painted content while out-of-window (WebKit2's composited drawing areas, etc.)
    12051205    // require that we repaint animated images to kickstart the animation loop.
    1206 
    1207     for (Frame* frame = m_mainFrame.get(); frame; frame = frame->tree().traverseNext()) {
    1208         if (auto* renderView = frame->contentRenderer())
    1209             renderView->resumePausedImageAnimationsIfNeeded();
    1210     }
     1206    if (FrameView* view = mainFrame().view())
     1207        view->resumeVisibleImageAnimationsIncludingSubframes();
    12111208}
    12121209
  • TabularUnified trunk/Source/WebCore/rendering/RenderElement.cpp

    r172730 r172854  
    13111311void RenderElement::newImageAnimationFrameAvailable(CachedImage& image)
    13121312{
    1313     auto visibleRect = view().frameView().visibleContentRect();
     1313    auto& frameView = view().frameView();
     1314    auto visibleRect = frameView.windowToContents(frameView.windowClipRect());
    13141315    if (!shouldRepaintForImageAnimation(*this, visibleRect)) {
    13151316        view().addRendererWithPausedImageAnimations(*this);
  • TabularUnified trunk/Source/WebCore/rendering/RenderLayer.cpp

    r172842 r172854  
    23222322        frame.loader().client().didChangeScrollOffset();
    23232323
    2324     renderer().view().resumePausedImageAnimationsIfNeeded();
     2324    view.frameView().resumeVisibleImageAnimationsIncludingSubframes();
    23252325}
    23262326
  • TabularUnified trunk/Source/WebCore/rendering/RenderView.cpp

    r172301 r172854  
    13621362void RenderView::resumePausedImageAnimationsIfNeeded()
    13631363{
    1364     auto visibleRect = frameView().visibleContentRect();
     1364    auto visibleRect = frameView().windowToContents(frameView().windowClipRect());
    13651365    Vector<RenderElement*, 10> toRemove;
    13661366    for (auto* renderer : m_renderersWithPausedImageAnimation) {
  • TabularUnified trunk/Source/WebKit/mac/WebView/WebView.mm

    r172832 r172854  
    15741574    [self setDefersCallbacks:NO];
    15751575    [[self mainFrame] setTimeoutsPaused:NO];
    1576     FrameView* view = [self _mainCoreFrame]->view();
    1577     if (view && view->renderView())
    1578         view->renderView()->resumePausedImageAnimationsIfNeeded();
     1576    if (FrameView* view = [self _mainCoreFrame]->view())
     1577        view->resumeVisibleImageAnimationsIncludingSubframes();
    15791578}
    15801579
Note: See TracChangeset for help on using the changeset viewer.