Changeset 240663 in webkit


Ignore:
Timestamp:
Jan 29, 2019 10:18:52 AM (5 years ago)
Author:
Antti Koivisto
Message:

REGRESSION (PSON): Flash on link navigation on Mac
https://bugs.webkit.org/show_bug.cgi?id=193961
<rdar://problem/47482507>

Reviewed by Chris Dumez.

The target page sends EnterAcceleratedCompositingMode message too early, before we have a valid layer tree.

  • WebProcess/WebPage/DrawingArea.h:

(WebKit::DrawingArea::attach): Deleted.

Not needed anymore.

  • WebProcess/WebPage/WebPage.cpp:

(WebKit::WebPage::reinitializeWebPage):
(WebKit::WebPage::didCompletePageTransition):
(WebKit::m_shouldAttachDrawingAreaOnPageTransition): Deleted.

Move message sending logic fully to TiledCoreAnimationDrawingArea.
Unfreezing the layer tree is sufficient to trigger the message.

  • WebProcess/WebPage/WebPage.h:
  • WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
  • WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:

(WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea):

There is no need to treat process swap case differently.

(WebKit::TiledCoreAnimationDrawingArea::sendEnterAcceleratedCompositingModeIfNeeded):

Send this after the first successful layer flush with the root layer set.

(WebKit::TiledCoreAnimationDrawingArea::flushLayers):
(WebKit::TiledCoreAnimationDrawingArea::attach): Deleted.

Location:
trunk/Source/WebKit
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r240662 r240663  
     12019-01-29  Antti Koivisto  <antti@apple.com>
     2
     3        REGRESSION (PSON): Flash on link navigation on Mac
     4        https://bugs.webkit.org/show_bug.cgi?id=193961
     5        <rdar://problem/47482507>
     6
     7        Reviewed by Chris Dumez.
     8
     9        The target page sends EnterAcceleratedCompositingMode message too early, before we have a valid layer tree.
     10
     11        * WebProcess/WebPage/DrawingArea.h:
     12        (WebKit::DrawingArea::attach): Deleted.
     13
     14        Not needed anymore.
     15
     16        * WebProcess/WebPage/WebPage.cpp:
     17        (WebKit::WebPage::reinitializeWebPage):
     18        (WebKit::WebPage::didCompletePageTransition):
     19        (WebKit::m_shouldAttachDrawingAreaOnPageTransition): Deleted.
     20
     21        Move message sending logic fully to TiledCoreAnimationDrawingArea.
     22        Unfreezing the layer tree is sufficient to trigger the message.
     23
     24        * WebProcess/WebPage/WebPage.h:
     25        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
     26        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
     27        (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea):
     28
     29        There is no need to treat process swap case differently.
     30
     31        (WebKit::TiledCoreAnimationDrawingArea::sendEnterAcceleratedCompositingModeIfNeeded):
     32
     33        Send this after the first successful layer flush with the root layer set.
     34
     35        (WebKit::TiledCoreAnimationDrawingArea::flushLayers):
     36        (WebKit::TiledCoreAnimationDrawingArea::attach): Deleted.
     37
    1382019-01-29  Timothy Hatcher  <timothy@apple.com>
    239
  • trunk/Source/WebKit/WebProcess/WebPage/DrawingArea.h

    r239427 r240663  
    150150#endif
    151151
    152     virtual void attach() { };
    153 
    154152protected:
    155153    DrawingArea(DrawingAreaType, WebPage&);
  • trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp

    r240628 r240663  
    402402    , m_overrideContentSecurityPolicy { parameters.overrideContentSecurityPolicy }
    403403    , m_cpuLimit(parameters.cpuLimit)
    404 #if PLATFORM(MAC)
    405     , m_shouldAttachDrawingAreaOnPageTransition(parameters.isProcessSwap)
    406 #endif
    407404{
    408405    ASSERT(m_pageID);
     
    701698        m_drawingArea->updatePreferences(parameters.store);
    702699        m_drawingArea->setPaintingEnabled(true);
    703 #if PLATFORM(MAC)
    704         m_shouldAttachDrawingAreaOnPageTransition = parameters.isProcessSwap;
    705 #endif
    706700        unfreezeLayerTree(LayerTreeFreezeReason::PageSuspended);
    707701    }
     
    31003094    if (!isInitialEmptyDocument)
    31013095        unfreezeLayerTree(LayerTreeFreezeReason::ProcessSwap);
    3102 
    3103 #if PLATFORM(MAC)
    3104     if (m_shouldAttachDrawingAreaOnPageTransition && !isInitialEmptyDocument) {
    3105         m_shouldAttachDrawingAreaOnPageTransition = false;
    3106         // Unfreezing the layer tree above schedules a layer flush so we delay attaching the drawing area
    3107         // after the next event loop iteration.
    3108         RunLoop::main().dispatch([this, weakThis = makeWeakPtr(*this)] {
    3109             if (weakThis && m_drawingArea)
    3110                 m_drawingArea->attach();
    3111         });
    3112     }
    3113 #endif
    31143096}
    31153097
  • trunk/Source/WebKit/WebProcess/WebPage/WebPage.h

    r240628 r240663  
    18061806    bool m_isSuspended { false };
    18071807    bool m_needsFontAttributes { false };
    1808 #if PLATFORM(MAC)
    1809     bool m_shouldAttachDrawingAreaOnPageTransition { false };
    1810 #endif
    18111808};
    18121809
  • trunk/Source/WebKit/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h

    r239427 r240663  
    5050class LayerHostingContext;
    5151
    52 class TiledCoreAnimationDrawingArea : public DrawingArea {
     52class TiledCoreAnimationDrawingArea : public DrawingArea, public CanMakeWeakPtr<TiledCoreAnimationDrawingArea> {
    5353public:
    5454    TiledCoreAnimationDrawingArea(WebPage&, const WebPageCreationParameters&);
     
    103103    void setShouldScaleViewToFitDocument(bool) override;
    104104
    105     void attach() override;
     105    void sendEnterAcceleratedCompositingModeIfNeeded();
    106106
    107107    void adjustTransientZoom(double scale, WebCore::FloatPoint origin) override;
     
    178178    bool m_isThrottlingLayerFlushes { false };
    179179    bool m_isLayerFlushThrottlingTemporarilyDisabledForInteraction { false };
     180    bool m_needsSendEnterAcceleratedCompositingMode { true };
    180181
    181182    WebCore::Timer m_layerFlushThrottlingTimer;
  • trunk/Source/WebKit/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm

    r240046 r240663  
    9797    updateLayerHostingContext();
    9898    setColorSpace(parameters.colorSpace);
    99 
    100     if (!parameters.isProcessSwap)
    101         attach();
    10299}
    103100
     
    107104}
    108105
    109 void TiledCoreAnimationDrawingArea::attach()
    110 {
    111     LayerTreeContext layerTreeContext;
    112     layerTreeContext.contextID = m_layerHostingContext->contextID();
    113     m_webPage.send(Messages::DrawingAreaProxy::EnterAcceleratedCompositingMode(0, layerTreeContext));
     106void TiledCoreAnimationDrawingArea::sendEnterAcceleratedCompositingModeIfNeeded()
     107{
     108    if (!m_rootLayer)
     109        return;
     110
     111    if (!m_needsSendEnterAcceleratedCompositingMode)
     112        return;
     113    m_needsSendEnterAcceleratedCompositingMode = false;
     114
     115    // Let the first commit complete before sending.
     116    RunLoop::main().dispatch([this, weakThis = makeWeakPtr(*this)] {
     117        if (!weakThis)
     118            return;
     119        LayerTreeContext layerTreeContext;
     120        layerTreeContext.contextID = m_layerHostingContext->contextID();
     121        m_webPage.send(Messages::DrawingAreaProxy::EnterAcceleratedCompositingMode(0, layerTreeContext));
     122    });
    114123}
    115124
     
    503512        }
    504513
    505         if (didFlushAllFrames)
     514        if (didFlushAllFrames) {
     515            sendEnterAcceleratedCompositingModeIfNeeded();
    506516            invalidateLayerFlushRunLoopObserver();
     517        }
    507518
    508519        if (m_isThrottlingLayerFlushes)
Note: See TracChangeset for help on using the changeset viewer.