Diff
Modified: trunk/Source/WebCore/ChangeLog (286351 => 286352)
--- trunk/Source/WebCore/ChangeLog 2021-12-01 07:18:03 UTC (rev 286351)
+++ trunk/Source/WebCore/ChangeLog 2021-12-01 07:18:46 UTC (rev 286352)
@@ -1,5 +1,47 @@
2021-11-30 Simon Fraser <simon.fra...@apple.com>
+ 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.
+
+ 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:
+
+2021-11-30 Simon Fraser <simon.fra...@apple.com>
+
Remove the scrolling tree plumbing of the momentumScrollingAnimatorEnabled() setting, which is no longer needed
https://bugs.webkit.org/show_bug.cgi?id=233680
Modified: trunk/Source/WebCore/page/scrolling/ScrollingTree.cpp (286351 => 286352)
--- trunk/Source/WebCore/page/scrolling/ScrollingTree.cpp 2021-12-01 07:18:03 UTC (rev 286351)
+++ trunk/Source/WebCore/page/scrolling/ScrollingTree.cpp 2021-12-01 07:18:46 UTC (rev 286352)
@@ -753,7 +753,7 @@
m_lastWheelEventTime = MonotonicTime::now();
}
-std::optional<unsigned> ScrollingTree::nominalFramesPerSecond()
+std::optional<FramesPerSecond> ScrollingTree::nominalFramesPerSecond()
{
Locker locker { m_treeStateLock };
return m_treeState.nominalFramesPerSecond;
Modified: trunk/Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.h (286351 => 286352)
--- trunk/Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.h 2021-12-01 07:18:03 UTC (rev 286351)
+++ trunk/Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.h 2021-12-01 07:18:46 UTC (rev 286352)
@@ -75,7 +75,7 @@
bool isScrollSnapInProgress() const;
void setScrollSnapInProgress(bool);
- virtual void serviceScrollAnimation() { }
+ virtual void serviceScrollAnimation(MonotonicTime) { }
// These are imperative; they adjust the scrolling layers.
void scrollTo(const FloatPoint&, ScrollType = ScrollType::User, ScrollClamping = ScrollClamping::Clamped);
Modified: trunk/Source/WebCore/page/scrolling/ScrollingTreeScrollingNodeDelegate.h (286351 => 286352)
--- trunk/Source/WebCore/page/scrolling/ScrollingTreeScrollingNodeDelegate.h 2021-12-01 07:18:03 UTC (rev 286351)
+++ trunk/Source/WebCore/page/scrolling/ScrollingTreeScrollingNodeDelegate.h 2021-12-01 07:18:46 UTC (rev 286352)
@@ -42,7 +42,7 @@
virtual bool startAnimatedScrollToPosition(FloatPoint) = 0;
virtual void stopAnimatedScroll() = 0;
- virtual void serviceScrollAnimation() = 0;
+ virtual void serviceScrollAnimation(MonotonicTime) = 0;
protected:
WEBCORE_EXPORT ScrollingTree& scrollingTree() const;
Modified: trunk/Source/WebCore/page/scrolling/ThreadedScrollingTree.cpp (286351 => 286352)
--- trunk/Source/WebCore/page/scrolling/ThreadedScrollingTree.cpp 2021-12-01 07:18:03 UTC (rev 286351)
+++ trunk/Source/WebCore/page/scrolling/ThreadedScrollingTree.cpp 2021-12-01 07:18:46 UTC (rev 286352)
@@ -28,6 +28,7 @@
#if ENABLE(ASYNC_SCROLLING) && ENABLE(SCROLLING_THREAD)
+#include "AnimationFrameRate.h"
#include "AsyncScrollingCoordinator.h"
#include "Logging.h"
#include "PlatformWheelEvent.h"
@@ -355,12 +356,16 @@
m_state = SynchronizationState::InRenderingUpdate;
}
+Seconds ThreadedScrollingTree::frameDuration()
+{
+ auto displayFPS = nominalFramesPerSecond().value_or(FullSpeedFramesPerSecond);
+ return 1_s / (double)displayFPS;
+}
+
Seconds ThreadedScrollingTree::maxAllowableRenderingUpdateDurationForSynchronization()
{
constexpr double allowableFrameFraction = 0.5;
- auto displayFPS = nominalFramesPerSecond().value_or(60);
- Seconds frameDuration = 1_s / (double)displayFPS;
- return allowableFrameFraction * frameDuration;
+ return allowableFrameFraction * frameDuration();
}
void ThreadedScrollingTree::hasNodeWithAnimatedScrollChanged(bool hasNodeWithAnimatedScroll)
@@ -370,7 +375,7 @@
});
}
-void ThreadedScrollingTree::serviceScrollAnimations()
+void ThreadedScrollingTree::serviceScrollAnimations(MonotonicTime currentTime)
{
ASSERT(ScrollingThread::isCurrentThread());
@@ -379,7 +384,7 @@
if (!is<ScrollingTreeScrollingNode>(targetNode))
continue;
- downcast<ScrollingTreeScrollingNode>(*targetNode).serviceScrollAnimation();
+ downcast<ScrollingTreeScrollingNode>(*targetNode).serviceScrollAnimation(currentTime);
}
}
@@ -457,7 +462,7 @@
Locker locker { m_treeLock };
- serviceScrollAnimations();
+ serviceScrollAnimations(MonotonicTime::now());
if (m_state != SynchronizationState::Idle && canUpdateLayersOnScrollingThread())
applyLayerPositionsInternal();
Modified: trunk/Source/WebCore/page/scrolling/ThreadedScrollingTree.h (286351 => 286352)
--- trunk/Source/WebCore/page/scrolling/ThreadedScrollingTree.h 2021-12-01 07:18:03 UTC (rev 286351)
+++ trunk/Source/WebCore/page/scrolling/ThreadedScrollingTree.h 2021-12-01 07:18:46 UTC (rev 286352)
@@ -104,8 +104,9 @@
void hasNodeWithAnimatedScrollChanged(bool) final;
- void serviceScrollAnimations() WTF_REQUIRES_LOCK(m_treeLock);
+ void serviceScrollAnimations(MonotonicTime) WTF_REQUIRES_LOCK(m_treeLock);
+ Seconds frameDuration();
Seconds maxAllowableRenderingUpdateDurationForSynchronization();
bool scrollingThreadIsActive();
Modified: trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h (286351 => 286352)
--- trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h 2021-12-01 07:18:03 UTC (rev 286351)
+++ trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h 2021-12-01 07:18:46 UTC (rev 286352)
@@ -68,7 +68,7 @@
bool startAnimatedScrollToPosition(FloatPoint) final;
void stopAnimatedScroll() final;
- void serviceScrollAnimation() final;
+ void serviceScrollAnimation(MonotonicTime) final;
FloatPoint adjustedScrollPosition(const FloatPoint&, ScrollClamping) const final;
Modified: trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm (286351 => 286352)
--- trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm 2021-12-01 07:18:03 UTC (rev 286351)
+++ trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm 2021-12-01 07:18:46 UTC (rev 286352)
@@ -135,9 +135,9 @@
m_delegate.stopAnimatedScroll();
}
-void ScrollingTreeFrameScrollingNodeMac::serviceScrollAnimation()
+void ScrollingTreeFrameScrollingNodeMac::serviceScrollAnimation(MonotonicTime currentTime)
{
- m_delegate.serviceScrollAnimation();
+ m_delegate.serviceScrollAnimation(currentTime);
}
void ScrollingTreeFrameScrollingNodeMac::willDoProgrammaticScroll(const FloatPoint& targetScrollPosition)
Modified: trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.h (286351 => 286352)
--- trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.h 2021-12-01 07:18:03 UTC (rev 286351)
+++ trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.h 2021-12-01 07:18:46 UTC (rev 286352)
@@ -54,7 +54,7 @@
void repositionScrollingLayers() override;
void repositionRelatedLayers() override;
- void serviceScrollAnimation() override;
+ void serviceScrollAnimation(MonotonicTime) override;
WheelEventHandlingResult handleWheelEvent(const PlatformWheelEvent&, EventTargeting) override;
Modified: trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.mm (286351 => 286352)
--- trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.mm 2021-12-01 07:18:03 UTC (rev 286351)
+++ trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.mm 2021-12-01 07:18:46 UTC (rev 286352)
@@ -87,9 +87,9 @@
m_delegate.stopAnimatedScroll();
}
-void ScrollingTreeOverflowScrollingNodeMac::serviceScrollAnimation()
+void ScrollingTreeOverflowScrollingNodeMac::serviceScrollAnimation(MonotonicTime currentTime)
{
- m_delegate.serviceScrollAnimation();
+ m_delegate.serviceScrollAnimation(currentTime);
}
void ScrollingTreeOverflowScrollingNodeMac::willDoProgrammaticScroll(const FloatPoint& targetScrollPosition)
Modified: trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.h (286351 => 286352)
--- trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.h 2021-12-01 07:18:03 UTC (rev 286351)
+++ trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.h 2021-12-01 07:18:46 UTC (rev 286352)
@@ -55,7 +55,7 @@
bool startAnimatedScrollToPosition(FloatPoint) final;
void stopAnimatedScroll() final;
- void serviceScrollAnimation() final;
+ void serviceScrollAnimation(MonotonicTime) final;
void willDoProgrammaticScroll(const FloatPoint&);
void currentScrollPositionChanged();
Modified: trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm (286351 => 286352)
--- trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm 2021-12-01 07:18:03 UTC (rev 286351)
+++ trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm 2021-12-01 07:18:46 UTC (rev 286352)
@@ -205,9 +205,9 @@
scrollingNode().setScrollAnimationInProgress(false);
}
-void ScrollingTreeScrollingNodeDelegateMac::serviceScrollAnimation()
+void ScrollingTreeScrollingNodeDelegateMac::serviceScrollAnimation(MonotonicTime currentTime)
{
- m_scrollController.animationCallback(MonotonicTime::now());
+ m_scrollController.animationCallback(currentTime);
}
bool ScrollingTreeScrollingNodeDelegateMac::allowsHorizontalStretching(const PlatformWheelEvent& wheelEvent) const
Modified: trunk/Source/WebCore/page/scrolling/nicosia/ScrollingTreeFrameScrollingNodeNicosia.cpp (286351 => 286352)
--- trunk/Source/WebCore/page/scrolling/nicosia/ScrollingTreeFrameScrollingNodeNicosia.cpp 2021-12-01 07:18:03 UTC (rev 286351)
+++ trunk/Source/WebCore/page/scrolling/nicosia/ScrollingTreeFrameScrollingNodeNicosia.cpp 2021-12-01 07:18:46 UTC (rev 286352)
@@ -116,9 +116,9 @@
m_delegate.stopAnimatedScroll();
}
-void ScrollingTreeFrameScrollingNodeNicosia::serviceScrollAnimation()
+void ScrollingTreeFrameScrollingNodeNicosia::serviceScrollAnimation(MonotonicTime currentTime)
{
- m_delegate.serviceScrollAnimation();
+ m_delegate.serviceScrollAnimation(currentTime);
}
FloatPoint ScrollingTreeFrameScrollingNodeNicosia::adjustedScrollPosition(const FloatPoint& position, ScrollClamping clamping) const
Modified: trunk/Source/WebCore/page/scrolling/nicosia/ScrollingTreeFrameScrollingNodeNicosia.h (286351 => 286352)
--- trunk/Source/WebCore/page/scrolling/nicosia/ScrollingTreeFrameScrollingNodeNicosia.h 2021-12-01 07:18:03 UTC (rev 286351)
+++ trunk/Source/WebCore/page/scrolling/nicosia/ScrollingTreeFrameScrollingNodeNicosia.h 2021-12-01 07:18:46 UTC (rev 286352)
@@ -57,7 +57,7 @@
bool startAnimatedScrollToPosition(FloatPoint) override;
void stopAnimatedScroll() override;
- void serviceScrollAnimation() final;
+ void serviceScrollAnimation(MonotonicTime) final;
WheelEventHandlingResult handleWheelEvent(const PlatformWheelEvent&, EventTargeting) override;
FloatPoint adjustedScrollPosition(const FloatPoint&, ScrollClamping) const override;
Modified: trunk/Source/WebCore/page/scrolling/nicosia/ScrollingTreeOverflowScrollingNodeNicosia.cpp (286351 => 286352)
--- trunk/Source/WebCore/page/scrolling/nicosia/ScrollingTreeOverflowScrollingNodeNicosia.cpp 2021-12-01 07:18:03 UTC (rev 286351)
+++ trunk/Source/WebCore/page/scrolling/nicosia/ScrollingTreeOverflowScrollingNodeNicosia.cpp 2021-12-01 07:18:46 UTC (rev 286352)
@@ -99,9 +99,9 @@
m_delegate.stopAnimatedScroll();
}
-void ScrollingTreeOverflowScrollingNodeNicosia::serviceScrollAnimation()
+void ScrollingTreeOverflowScrollingNodeNicosia::serviceScrollAnimation(MonotonicTime currentTime)
{
- m_delegate.serviceScrollAnimation();
+ m_delegate.serviceScrollAnimation(currentTime);
}
} // namespace WebCore
Modified: trunk/Source/WebCore/page/scrolling/nicosia/ScrollingTreeOverflowScrollingNodeNicosia.h (286351 => 286352)
--- trunk/Source/WebCore/page/scrolling/nicosia/ScrollingTreeOverflowScrollingNodeNicosia.h 2021-12-01 07:18:03 UTC (rev 286351)
+++ trunk/Source/WebCore/page/scrolling/nicosia/ScrollingTreeOverflowScrollingNodeNicosia.h 2021-12-01 07:18:46 UTC (rev 286352)
@@ -52,7 +52,7 @@
bool startAnimatedScrollToPosition(FloatPoint) override;
void stopAnimatedScroll() override;
- void serviceScrollAnimation() final;
+ void serviceScrollAnimation(MonotonicTime) final;
ScrollingTreeScrollingNodeDelegateNicosia m_delegate;
};
Modified: trunk/Source/WebCore/page/scrolling/nicosia/ScrollingTreeScrollingNodeDelegateNicosia.cpp (286351 => 286352)
--- trunk/Source/WebCore/page/scrolling/nicosia/ScrollingTreeScrollingNodeDelegateNicosia.cpp 2021-12-01 07:18:03 UTC (rev 286351)
+++ trunk/Source/WebCore/page/scrolling/nicosia/ScrollingTreeScrollingNodeDelegateNicosia.cpp 2021-12-01 07:18:46 UTC (rev 286352)
@@ -108,9 +108,9 @@
scrollingNode().setScrollAnimationInProgress(false);
}
-void ScrollingTreeScrollingNodeDelegateNicosia::serviceScrollAnimation()
+void ScrollingTreeScrollingNodeDelegateNicosia::serviceScrollAnimation(MonotonicTime currentTime)
{
- m_scrollController.animationCallback(MonotonicTime::now());
+ m_scrollController.animationCallback(currentTime);
}
bool ScrollingTreeScrollingNodeDelegateNicosia::allowsHorizontalScrolling() const
Modified: trunk/Source/WebCore/page/scrolling/nicosia/ScrollingTreeScrollingNodeDelegateNicosia.h (286351 => 286352)
--- trunk/Source/WebCore/page/scrolling/nicosia/ScrollingTreeScrollingNodeDelegateNicosia.h 2021-12-01 07:18:03 UTC (rev 286351)
+++ trunk/Source/WebCore/page/scrolling/nicosia/ScrollingTreeScrollingNodeDelegateNicosia.h 2021-12-01 07:18:46 UTC (rev 286352)
@@ -52,7 +52,7 @@
bool startAnimatedScrollToPosition(FloatPoint) final;
void stopAnimatedScroll() final;
- void serviceScrollAnimation() final;
+ void serviceScrollAnimation(MonotonicTime) final;
private:
// ScrollingEffectsControllerClient.
Modified: trunk/Source/WebKit/ChangeLog (286351 => 286352)
--- trunk/Source/WebKit/ChangeLog 2021-12-01 07:18:03 UTC (rev 286351)
+++ trunk/Source/WebKit/ChangeLog 2021-12-01 07:18:46 UTC (rev 286352)
@@ -1,5 +1,14 @@
2021-11-30 Simon Fraser <simon.fra...@apple.com>
+ 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.
+
+ * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.h:
+
+2021-11-30 Simon Fraser <simon.fra...@apple.com>
+
Remove the scrolling tree plumbing of the momentumScrollingAnimatorEnabled() setting, which is no longer needed
https://bugs.webkit.org/show_bug.cgi?id=233680
Modified: trunk/Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.h (286351 => 286352)
--- trunk/Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.h 2021-12-01 07:18:03 UTC (rev 286351)
+++ trunk/Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.h 2021-12-01 07:18:46 UTC (rev 286352)
@@ -81,7 +81,7 @@
bool startAnimatedScrollToPosition(WebCore::FloatPoint) final;
void stopAnimatedScroll() final;
- void serviceScrollAnimation() final { }
+ void serviceScrollAnimation(MonotonicTime) final { }
private:
RetainPtr<CALayer> m_scrollLayer;