Changeset 286352 in webkit
- Timestamp:
- Nov 30, 2021, 11:18:46 PM (5 years ago)
- Location:
- trunk/Source
- Files:
-
- 20 edited
-
WebCore/ChangeLog (modified) (1 diff)
-
WebCore/page/scrolling/ScrollingTree.cpp (modified) (1 diff)
-
WebCore/page/scrolling/ScrollingTreeScrollingNode.h (modified) (1 diff)
-
WebCore/page/scrolling/ScrollingTreeScrollingNodeDelegate.h (modified) (1 diff)
-
WebCore/page/scrolling/ThreadedScrollingTree.cpp (modified) (5 diffs)
-
WebCore/page/scrolling/ThreadedScrollingTree.h (modified) (1 diff)
-
WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h (modified) (1 diff)
-
WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm (modified) (1 diff)
-
WebCore/page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.h (modified) (1 diff)
-
WebCore/page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.mm (modified) (1 diff)
-
WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.h (modified) (1 diff)
-
WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm (modified) (1 diff)
-
WebCore/page/scrolling/nicosia/ScrollingTreeFrameScrollingNodeNicosia.cpp (modified) (1 diff)
-
WebCore/page/scrolling/nicosia/ScrollingTreeFrameScrollingNodeNicosia.h (modified) (1 diff)
-
WebCore/page/scrolling/nicosia/ScrollingTreeOverflowScrollingNodeNicosia.cpp (modified) (1 diff)
-
WebCore/page/scrolling/nicosia/ScrollingTreeOverflowScrollingNodeNicosia.h (modified) (1 diff)
-
WebCore/page/scrolling/nicosia/ScrollingTreeScrollingNodeDelegateNicosia.cpp (modified) (1 diff)
-
WebCore/page/scrolling/nicosia/ScrollingTreeScrollingNodeDelegateNicosia.h (modified) (1 diff)
-
WebKit/ChangeLog (modified) (1 diff)
-
WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r286351 r286352 1 2021-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 1 43 2021-11-30 Simon Fraser <simon.fraser@apple.com> 2 44 -
trunk/Source/WebCore/page/scrolling/ScrollingTree.cpp
r286351 r286352 754 754 } 755 755 756 std::optional< unsigned> ScrollingTree::nominalFramesPerSecond()756 std::optional<FramesPerSecond> ScrollingTree::nominalFramesPerSecond() 757 757 { 758 758 Locker locker { m_treeStateLock }; -
trunk/Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.h
r286351 r286352 76 76 void setScrollSnapInProgress(bool); 77 77 78 virtual void serviceScrollAnimation( ) { }78 virtual void serviceScrollAnimation(MonotonicTime) { } 79 79 80 80 // These are imperative; they adjust the scrolling layers. -
trunk/Source/WebCore/page/scrolling/ScrollingTreeScrollingNodeDelegate.h
r285094 r286352 43 43 virtual void stopAnimatedScroll() = 0; 44 44 45 virtual void serviceScrollAnimation( ) = 0;45 virtual void serviceScrollAnimation(MonotonicTime) = 0; 46 46 47 47 protected: -
trunk/Source/WebCore/page/scrolling/ThreadedScrollingTree.cpp
r285883 r286352 29 29 #if ENABLE(ASYNC_SCROLLING) && ENABLE(SCROLLING_THREAD) 30 30 31 #include "AnimationFrameRate.h" 31 32 #include "AsyncScrollingCoordinator.h" 32 33 #include "Logging.h" … … 356 357 } 357 358 359 Seconds ThreadedScrollingTree::frameDuration() 360 { 361 auto displayFPS = nominalFramesPerSecond().value_or(FullSpeedFramesPerSecond); 362 return 1_s / (double)displayFPS; 363 } 364 358 365 Seconds ThreadedScrollingTree::maxAllowableRenderingUpdateDurationForSynchronization() 359 366 { 360 367 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(); 364 369 } 365 370 … … 371 376 } 372 377 373 void ThreadedScrollingTree::serviceScrollAnimations( )378 void ThreadedScrollingTree::serviceScrollAnimations(MonotonicTime currentTime) 374 379 { 375 380 ASSERT(ScrollingThread::isCurrentThread()); … … 380 385 continue; 381 386 382 downcast<ScrollingTreeScrollingNode>(*targetNode).serviceScrollAnimation( );387 downcast<ScrollingTreeScrollingNode>(*targetNode).serviceScrollAnimation(currentTime); 383 388 } 384 389 } … … 458 463 Locker locker { m_treeLock }; 459 464 460 serviceScrollAnimations( );465 serviceScrollAnimations(MonotonicTime::now()); 461 466 462 467 if (m_state != SynchronizationState::Idle && canUpdateLayersOnScrollingThread()) -
trunk/Source/WebCore/page/scrolling/ThreadedScrollingTree.h
r285669 r286352 105 105 void hasNodeWithAnimatedScrollChanged(bool) final; 106 106 107 void serviceScrollAnimations( ) WTF_REQUIRES_LOCK(m_treeLock);107 void serviceScrollAnimations(MonotonicTime) WTF_REQUIRES_LOCK(m_treeLock); 108 108 109 Seconds frameDuration(); 109 110 Seconds maxAllowableRenderingUpdateDurationForSynchronization(); 110 111 -
trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h
r285094 r286352 69 69 bool startAnimatedScrollToPosition(FloatPoint) final; 70 70 void stopAnimatedScroll() final; 71 void serviceScrollAnimation( ) final;71 void serviceScrollAnimation(MonotonicTime) final; 72 72 73 73 FloatPoint adjustedScrollPosition(const FloatPoint&, ScrollClamping) const final; -
trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm
r285094 r286352 136 136 } 137 137 138 void ScrollingTreeFrameScrollingNodeMac::serviceScrollAnimation( )139 { 140 m_delegate.serviceScrollAnimation( );138 void ScrollingTreeFrameScrollingNodeMac::serviceScrollAnimation(MonotonicTime currentTime) 139 { 140 m_delegate.serviceScrollAnimation(currentTime); 141 141 } 142 142 -
trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.h
r285094 r286352 55 55 void repositionScrollingLayers() override; 56 56 void repositionRelatedLayers() override; 57 void serviceScrollAnimation( ) override;57 void serviceScrollAnimation(MonotonicTime) override; 58 58 59 59 WheelEventHandlingResult handleWheelEvent(const PlatformWheelEvent&, EventTargeting) override; -
trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.mm
r285094 r286352 88 88 } 89 89 90 void ScrollingTreeOverflowScrollingNodeMac::serviceScrollAnimation( )90 void ScrollingTreeOverflowScrollingNodeMac::serviceScrollAnimation(MonotonicTime currentTime) 91 91 { 92 m_delegate.serviceScrollAnimation( );92 m_delegate.serviceScrollAnimation(currentTime); 93 93 } 94 94 -
trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.h
r286351 r286352 56 56 void stopAnimatedScroll() final; 57 57 58 void serviceScrollAnimation( ) final;58 void serviceScrollAnimation(MonotonicTime) final; 59 59 60 60 void willDoProgrammaticScroll(const FloatPoint&); -
trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm
r286351 r286352 206 206 } 207 207 208 void ScrollingTreeScrollingNodeDelegateMac::serviceScrollAnimation( )209 { 210 m_scrollController.animationCallback( MonotonicTime::now());208 void ScrollingTreeScrollingNodeDelegateMac::serviceScrollAnimation(MonotonicTime currentTime) 209 { 210 m_scrollController.animationCallback(currentTime); 211 211 } 212 212 -
trunk/Source/WebCore/page/scrolling/nicosia/ScrollingTreeFrameScrollingNodeNicosia.cpp
r285161 r286352 117 117 } 118 118 119 void ScrollingTreeFrameScrollingNodeNicosia::serviceScrollAnimation( )120 { 121 m_delegate.serviceScrollAnimation( );119 void ScrollingTreeFrameScrollingNodeNicosia::serviceScrollAnimation(MonotonicTime currentTime) 120 { 121 m_delegate.serviceScrollAnimation(currentTime); 122 122 } 123 123 -
trunk/Source/WebCore/page/scrolling/nicosia/ScrollingTreeFrameScrollingNodeNicosia.h
r285161 r286352 58 58 bool startAnimatedScrollToPosition(FloatPoint) override; 59 59 void stopAnimatedScroll() override; 60 void serviceScrollAnimation( ) final;60 void serviceScrollAnimation(MonotonicTime) final; 61 61 62 62 WheelEventHandlingResult handleWheelEvent(const PlatformWheelEvent&, EventTargeting) override; -
trunk/Source/WebCore/page/scrolling/nicosia/ScrollingTreeOverflowScrollingNodeNicosia.cpp
r285161 r286352 100 100 } 101 101 102 void ScrollingTreeOverflowScrollingNodeNicosia::serviceScrollAnimation( )102 void ScrollingTreeOverflowScrollingNodeNicosia::serviceScrollAnimation(MonotonicTime currentTime) 103 103 { 104 m_delegate.serviceScrollAnimation( );104 m_delegate.serviceScrollAnimation(currentTime); 105 105 } 106 106 -
trunk/Source/WebCore/page/scrolling/nicosia/ScrollingTreeOverflowScrollingNodeNicosia.h
r285161 r286352 53 53 bool startAnimatedScrollToPosition(FloatPoint) override; 54 54 void stopAnimatedScroll() override; 55 void serviceScrollAnimation( ) final;55 void serviceScrollAnimation(MonotonicTime) final; 56 56 57 57 ScrollingTreeScrollingNodeDelegateNicosia m_delegate; -
trunk/Source/WebCore/page/scrolling/nicosia/ScrollingTreeScrollingNodeDelegateNicosia.cpp
r285992 r286352 109 109 } 110 110 111 void ScrollingTreeScrollingNodeDelegateNicosia::serviceScrollAnimation( )111 void ScrollingTreeScrollingNodeDelegateNicosia::serviceScrollAnimation(MonotonicTime currentTime) 112 112 { 113 m_scrollController.animationCallback( MonotonicTime::now());113 m_scrollController.animationCallback(currentTime); 114 114 } 115 115 -
trunk/Source/WebCore/page/scrolling/nicosia/ScrollingTreeScrollingNodeDelegateNicosia.h
r285161 r286352 53 53 void stopAnimatedScroll() final; 54 54 55 void serviceScrollAnimation( ) final;55 void serviceScrollAnimation(MonotonicTime) final; 56 56 57 57 private: -
trunk/Source/WebKit/ChangeLog
r286351 r286352 1 2021-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 1 10 2021-11-30 Simon Fraser <simon.fraser@apple.com> 2 11 -
trunk/Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.h
r285094 r286352 82 82 void stopAnimatedScroll() final; 83 83 84 void serviceScrollAnimation( ) final { }84 void serviceScrollAnimation(MonotonicTime) final { } 85 85 86 86 private:
Note:
See TracChangeset
for help on using the changeset viewer.