⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 286352 in webkit


Ignore:
Timestamp:
Nov 30, 2021, 11:18:46 PM (5 years ago)
Author:
Simon Fraser
Message:

Pass the timestamp for scrolling thread animations through all the serviceScrollAnimation() calls
https://bugs.webkit.org/show_bug.cgi?id=233678

Reviewed by Tim Horton.

Source/WebCore:

All scroll animations serviced at the same time should use a common timestamp, and
avoid multiple calls to MonotonicTime::now() by passing the time down through from
ThreadedScrollingTree::displayDidRefreshOnScrollingThread().

Also minor refactoring in ThreadedScrollingTree to prepare for a future patch.

  • page/scrolling/ScrollingTree.cpp:

(WebCore::ScrollingTree::nominalFramesPerSecond):

  • page/scrolling/ScrollingTreeScrollingNode.h:
  • page/scrolling/ScrollingTreeScrollingNodeDelegate.h:
  • page/scrolling/ThreadedScrollingTree.cpp:

(WebCore::ThreadedScrollingTree::frameDuration):
(WebCore::ThreadedScrollingTree::maxAllowableRenderingUpdateDurationForSynchronization):
(WebCore::ThreadedScrollingTree::serviceScrollAnimations):
(WebCore::ThreadedScrollingTree::displayDidRefreshOnScrollingThread):

  • page/scrolling/ThreadedScrollingTree.h:
  • page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h:
  • page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:

(WebCore::ScrollingTreeFrameScrollingNodeMac::serviceScrollAnimation):

  • page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.h:
  • page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.mm:

(WebCore::ScrollingTreeOverflowScrollingNodeMac::serviceScrollAnimation):

  • page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.h:
  • page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm:

(WebCore::ScrollingTreeScrollingNodeDelegateMac::serviceScrollAnimation):

  • page/scrolling/nicosia/ScrollingTreeFrameScrollingNodeNicosia.cpp:

(WebCore::ScrollingTreeFrameScrollingNodeNicosia::serviceScrollAnimation):

  • page/scrolling/nicosia/ScrollingTreeFrameScrollingNodeNicosia.h:
  • page/scrolling/nicosia/ScrollingTreeOverflowScrollingNodeNicosia.cpp:

(WebCore::ScrollingTreeOverflowScrollingNodeNicosia::serviceScrollAnimation):

  • page/scrolling/nicosia/ScrollingTreeOverflowScrollingNodeNicosia.h:
  • page/scrolling/nicosia/ScrollingTreeScrollingNodeDelegateNicosia.cpp:

(WebCore::ScrollingTreeScrollingNodeDelegateNicosia::serviceScrollAnimation):

  • page/scrolling/nicosia/ScrollingTreeScrollingNodeDelegateNicosia.h:

Source/WebKit:

  • UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.h:
Location:
trunk/Source
Files:
20 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r286351 r286352  
     12021-11-30  Simon Fraser  <simon.fraser@apple.com>
     2
     3        Pass the timestamp for scrolling thread animations through all the serviceScrollAnimation() calls
     4        https://bugs.webkit.org/show_bug.cgi?id=233678
     5
     6        Reviewed by Tim Horton.
     7
     8        All scroll animations serviced at the same time should use a common timestamp, and
     9        avoid multiple calls to MonotonicTime::now() by passing the time down through from
     10        ThreadedScrollingTree::displayDidRefreshOnScrollingThread().
     11
     12        Also minor refactoring in ThreadedScrollingTree to prepare for a future patch.
     13
     14        * page/scrolling/ScrollingTree.cpp:
     15        (WebCore::ScrollingTree::nominalFramesPerSecond):
     16        * page/scrolling/ScrollingTreeScrollingNode.h:
     17        * page/scrolling/ScrollingTreeScrollingNodeDelegate.h:
     18        * page/scrolling/ThreadedScrollingTree.cpp:
     19        (WebCore::ThreadedScrollingTree::frameDuration):
     20        (WebCore::ThreadedScrollingTree::maxAllowableRenderingUpdateDurationForSynchronization):
     21        (WebCore::ThreadedScrollingTree::serviceScrollAnimations):
     22        (WebCore::ThreadedScrollingTree::displayDidRefreshOnScrollingThread):
     23        * page/scrolling/ThreadedScrollingTree.h:
     24        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h:
     25        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
     26        (WebCore::ScrollingTreeFrameScrollingNodeMac::serviceScrollAnimation):
     27        * page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.h:
     28        * page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.mm:
     29        (WebCore::ScrollingTreeOverflowScrollingNodeMac::serviceScrollAnimation):
     30        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.h:
     31        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm:
     32        (WebCore::ScrollingTreeScrollingNodeDelegateMac::serviceScrollAnimation):
     33        * page/scrolling/nicosia/ScrollingTreeFrameScrollingNodeNicosia.cpp:
     34        (WebCore::ScrollingTreeFrameScrollingNodeNicosia::serviceScrollAnimation):
     35        * page/scrolling/nicosia/ScrollingTreeFrameScrollingNodeNicosia.h:
     36        * page/scrolling/nicosia/ScrollingTreeOverflowScrollingNodeNicosia.cpp:
     37        (WebCore::ScrollingTreeOverflowScrollingNodeNicosia::serviceScrollAnimation):
     38        * page/scrolling/nicosia/ScrollingTreeOverflowScrollingNodeNicosia.h:
     39        * page/scrolling/nicosia/ScrollingTreeScrollingNodeDelegateNicosia.cpp:
     40        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::serviceScrollAnimation):
     41        * page/scrolling/nicosia/ScrollingTreeScrollingNodeDelegateNicosia.h:
     42
    1432021-11-30  Simon Fraser  <simon.fraser@apple.com>
    244
  • trunk/Source/WebCore/page/scrolling/ScrollingTree.cpp

    r286351 r286352  
    754754}
    755755
    756 std::optional<unsigned> ScrollingTree::nominalFramesPerSecond()
     756std::optional<FramesPerSecond> ScrollingTree::nominalFramesPerSecond()
    757757{
    758758    Locker locker { m_treeStateLock };
  • trunk/Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.h

    r286351 r286352  
    7676    void setScrollSnapInProgress(bool);
    7777
    78     virtual void serviceScrollAnimation() { }
     78    virtual void serviceScrollAnimation(MonotonicTime) { }
    7979
    8080    // These are imperative; they adjust the scrolling layers.
  • trunk/Source/WebCore/page/scrolling/ScrollingTreeScrollingNodeDelegate.h

    r285094 r286352  
    4343    virtual void stopAnimatedScroll() = 0;
    4444
    45     virtual void serviceScrollAnimation() = 0;
     45    virtual void serviceScrollAnimation(MonotonicTime) = 0;
    4646
    4747protected:
  • trunk/Source/WebCore/page/scrolling/ThreadedScrollingTree.cpp

    r285883 r286352  
    2929#if ENABLE(ASYNC_SCROLLING) && ENABLE(SCROLLING_THREAD)
    3030
     31#include "AnimationFrameRate.h"
    3132#include "AsyncScrollingCoordinator.h"
    3233#include "Logging.h"
     
    356357}
    357358
     359Seconds ThreadedScrollingTree::frameDuration()
     360{
     361    auto displayFPS = nominalFramesPerSecond().value_or(FullSpeedFramesPerSecond);
     362    return 1_s / (double)displayFPS;
     363}
     364
    358365Seconds ThreadedScrollingTree::maxAllowableRenderingUpdateDurationForSynchronization()
    359366{
    360367    constexpr double allowableFrameFraction = 0.5;
    361     auto displayFPS = nominalFramesPerSecond().value_or(60);
    362     Seconds frameDuration = 1_s / (double)displayFPS;
    363     return allowableFrameFraction * frameDuration;
     368    return allowableFrameFraction * frameDuration();
    364369}
    365370
     
    371376}
    372377
    373 void ThreadedScrollingTree::serviceScrollAnimations()
     378void ThreadedScrollingTree::serviceScrollAnimations(MonotonicTime currentTime)
    374379{
    375380    ASSERT(ScrollingThread::isCurrentThread());
     
    380385            continue;
    381386
    382         downcast<ScrollingTreeScrollingNode>(*targetNode).serviceScrollAnimation();
     387        downcast<ScrollingTreeScrollingNode>(*targetNode).serviceScrollAnimation(currentTime);
    383388    }
    384389}
     
    458463    Locker locker { m_treeLock };
    459464   
    460     serviceScrollAnimations();
     465    serviceScrollAnimations(MonotonicTime::now());
    461466
    462467    if (m_state != SynchronizationState::Idle && canUpdateLayersOnScrollingThread())
  • trunk/Source/WebCore/page/scrolling/ThreadedScrollingTree.h

    r285669 r286352  
    105105    void hasNodeWithAnimatedScrollChanged(bool) final;
    106106   
    107     void serviceScrollAnimations() WTF_REQUIRES_LOCK(m_treeLock);
     107    void serviceScrollAnimations(MonotonicTime) WTF_REQUIRES_LOCK(m_treeLock);
    108108
     109    Seconds frameDuration();
    109110    Seconds maxAllowableRenderingUpdateDurationForSynchronization();
    110111   
  • trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h

    r285094 r286352  
    6969    bool startAnimatedScrollToPosition(FloatPoint) final;
    7070    void stopAnimatedScroll() final;
    71     void serviceScrollAnimation() final;
     71    void serviceScrollAnimation(MonotonicTime) final;
    7272
    7373    FloatPoint adjustedScrollPosition(const FloatPoint&, ScrollClamping) const final;
  • trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm

    r285094 r286352  
    136136}
    137137
    138 void ScrollingTreeFrameScrollingNodeMac::serviceScrollAnimation()
    139 {
    140     m_delegate.serviceScrollAnimation();
     138void ScrollingTreeFrameScrollingNodeMac::serviceScrollAnimation(MonotonicTime currentTime)
     139{
     140    m_delegate.serviceScrollAnimation(currentTime);
    141141}
    142142
  • trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.h

    r285094 r286352  
    5555    void repositionScrollingLayers() override;
    5656    void repositionRelatedLayers() override;
    57     void serviceScrollAnimation() override;
     57    void serviceScrollAnimation(MonotonicTime) override;
    5858
    5959    WheelEventHandlingResult handleWheelEvent(const PlatformWheelEvent&, EventTargeting) override;
  • trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.mm

    r285094 r286352  
    8888}
    8989
    90 void ScrollingTreeOverflowScrollingNodeMac::serviceScrollAnimation()
     90void ScrollingTreeOverflowScrollingNodeMac::serviceScrollAnimation(MonotonicTime currentTime)
    9191{
    92     m_delegate.serviceScrollAnimation();
     92    m_delegate.serviceScrollAnimation(currentTime);
    9393}
    9494
  • trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.h

    r286351 r286352  
    5656    void stopAnimatedScroll() final;
    5757
    58     void serviceScrollAnimation() final;
     58    void serviceScrollAnimation(MonotonicTime) final;
    5959
    6060    void willDoProgrammaticScroll(const FloatPoint&);
  • trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm

    r286351 r286352  
    206206}
    207207
    208 void ScrollingTreeScrollingNodeDelegateMac::serviceScrollAnimation()
    209 {
    210     m_scrollController.animationCallback(MonotonicTime::now());
     208void ScrollingTreeScrollingNodeDelegateMac::serviceScrollAnimation(MonotonicTime currentTime)
     209{
     210    m_scrollController.animationCallback(currentTime);
    211211}
    212212
  • trunk/Source/WebCore/page/scrolling/nicosia/ScrollingTreeFrameScrollingNodeNicosia.cpp

    r285161 r286352  
    117117}
    118118
    119 void ScrollingTreeFrameScrollingNodeNicosia::serviceScrollAnimation()
    120 {
    121     m_delegate.serviceScrollAnimation();
     119void ScrollingTreeFrameScrollingNodeNicosia::serviceScrollAnimation(MonotonicTime currentTime)
     120{
     121    m_delegate.serviceScrollAnimation(currentTime);
    122122}
    123123
  • trunk/Source/WebCore/page/scrolling/nicosia/ScrollingTreeFrameScrollingNodeNicosia.h

    r285161 r286352  
    5858    bool startAnimatedScrollToPosition(FloatPoint) override;
    5959    void stopAnimatedScroll() override;
    60     void serviceScrollAnimation() final;
     60    void serviceScrollAnimation(MonotonicTime) final;
    6161
    6262    WheelEventHandlingResult handleWheelEvent(const PlatformWheelEvent&, EventTargeting) override;
  • trunk/Source/WebCore/page/scrolling/nicosia/ScrollingTreeOverflowScrollingNodeNicosia.cpp

    r285161 r286352  
    100100}
    101101
    102 void ScrollingTreeOverflowScrollingNodeNicosia::serviceScrollAnimation()
     102void ScrollingTreeOverflowScrollingNodeNicosia::serviceScrollAnimation(MonotonicTime currentTime)
    103103{
    104     m_delegate.serviceScrollAnimation();
     104    m_delegate.serviceScrollAnimation(currentTime);
    105105}
    106106
  • trunk/Source/WebCore/page/scrolling/nicosia/ScrollingTreeOverflowScrollingNodeNicosia.h

    r285161 r286352  
    5353    bool startAnimatedScrollToPosition(FloatPoint) override;
    5454    void stopAnimatedScroll() override;
    55     void serviceScrollAnimation() final;
     55    void serviceScrollAnimation(MonotonicTime) final;
    5656
    5757    ScrollingTreeScrollingNodeDelegateNicosia m_delegate;
  • trunk/Source/WebCore/page/scrolling/nicosia/ScrollingTreeScrollingNodeDelegateNicosia.cpp

    r285992 r286352  
    109109}
    110110
    111 void ScrollingTreeScrollingNodeDelegateNicosia::serviceScrollAnimation()
     111void ScrollingTreeScrollingNodeDelegateNicosia::serviceScrollAnimation(MonotonicTime currentTime)
    112112{
    113     m_scrollController.animationCallback(MonotonicTime::now());
     113    m_scrollController.animationCallback(currentTime);
    114114}
    115115
  • trunk/Source/WebCore/page/scrolling/nicosia/ScrollingTreeScrollingNodeDelegateNicosia.h

    r285161 r286352  
    5353    void stopAnimatedScroll() final;
    5454
    55     void serviceScrollAnimation() final;
     55    void serviceScrollAnimation(MonotonicTime) final;
    5656
    5757private:
  • trunk/Source/WebKit/ChangeLog

    r286351 r286352  
     12021-11-30  Simon Fraser  <simon.fraser@apple.com>
     2
     3        Pass the timestamp for scrolling thread animations through all the serviceScrollAnimation() calls
     4        https://bugs.webkit.org/show_bug.cgi?id=233678
     5
     6        Reviewed by Tim Horton.
     7
     8        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.h:
     9
    1102021-11-30  Simon Fraser  <simon.fraser@apple.com>
    211
  • trunk/Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.h

    r285094 r286352  
    8282    void stopAnimatedScroll() final;
    8383
    84     void serviceScrollAnimation() final { }
     84    void serviceScrollAnimation(MonotonicTime) final { }
    8585
    8686private:
Note: See TracChangeset for help on using the changeset viewer.