Diff
Modified: trunk/Source/WebCore/ChangeLog (285160 => 285161)
--- trunk/Source/WebCore/ChangeLog 2021-11-02 15:56:29 UTC (rev 285160)
+++ trunk/Source/WebCore/ChangeLog 2021-11-02 15:59:13 UTC (rev 285161)
@@ -1,3 +1,32 @@
+2021-11-02 Chris Lord <cl...@igalia.com>
+
+ [GTK][WPE] Use the display refresh to drive scrolling animations (async scroll)
+ https://bugs.webkit.org/show_bug.cgi?id=232432
+
+ Reviewed by Simon Fraser.
+
+ Implement missing API in nicosia async scroll path to have scroll
+ animations driven by the display refresh instead of a 60Hz timer.
+
+ No new tests, covered by existing tests.
+
+ * page/scrolling/nicosia/ScrollingCoordinatorNicosia.cpp:
+ (WebCore::ScrollingCoordinatorNicosia::didCompleteRenderingUpdate):
+ (WebCore::ScrollingCoordinatorNicosia::hasNodeWithAnimatedScrollChanged):
+ * page/scrolling/nicosia/ScrollingCoordinatorNicosia.h:
+ * 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::startAnimationCallback):
+ (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::stopAnimationCallback):
+ (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::serviceScrollAnimation):
+ (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::animationTimerFired): Deleted.
+ * page/scrolling/nicosia/ScrollingTreeScrollingNodeDelegateNicosia.h:
+
2021-11-02 Alan Bujtas <za...@apple.com>
[LFC][IFC] Line should keep track of whether the content needs visual reordering
Modified: trunk/Source/WebCore/page/scrolling/nicosia/ScrollingCoordinatorNicosia.cpp (285160 => 285161)
--- trunk/Source/WebCore/page/scrolling/nicosia/ScrollingCoordinatorNicosia.cpp 2021-11-02 15:56:29 UTC (rev 285160)
+++ trunk/Source/WebCore/page/scrolling/nicosia/ScrollingCoordinatorNicosia.cpp 2021-11-02 15:59:13 UTC (rev 285161)
@@ -102,6 +102,22 @@
synchronizeStateFromScrollingTree();
}
+void ScrollingCoordinatorNicosia::didCompleteRenderingUpdate()
+{
+ downcast<ThreadedScrollingTree>(scrollingTree())->didCompleteRenderingUpdate();
+
+ // Scroll animations are driven by the display refresh, so make sure that we
+ // keep firing until they're complete.
+ if (scrollingTree()->hasNodeWithActiveScrollAnimations())
+ scheduleRenderingUpdate();
+}
+
+void ScrollingCoordinatorNicosia::hasNodeWithAnimatedScrollChanged(bool hasAnimatingNode)
+{
+ if (hasAnimatingNode)
+ scheduleRenderingUpdate();
+}
+
} // namespace WebCore
#endif // ENABLE(ASYNC_SCROLLING) && USE(NICOSIA)
Modified: trunk/Source/WebCore/page/scrolling/nicosia/ScrollingCoordinatorNicosia.h (285160 => 285161)
--- trunk/Source/WebCore/page/scrolling/nicosia/ScrollingCoordinatorNicosia.h 2021-11-02 15:56:29 UTC (rev 285160)
+++ trunk/Source/WebCore/page/scrolling/nicosia/ScrollingCoordinatorNicosia.h 2021-11-02 15:59:13 UTC (rev 285161)
@@ -51,6 +51,9 @@
void scheduleTreeStateCommit() override;
void willStartRenderingUpdate() final;
+ void didCompleteRenderingUpdate() final;
+
+ void hasNodeWithAnimatedScrollChanged(bool) final;
};
} // namespace WebCore
Modified: trunk/Source/WebCore/page/scrolling/nicosia/ScrollingTreeFrameScrollingNodeNicosia.cpp (285160 => 285161)
--- trunk/Source/WebCore/page/scrolling/nicosia/ScrollingTreeFrameScrollingNodeNicosia.cpp 2021-11-02 15:56:29 UTC (rev 285160)
+++ trunk/Source/WebCore/page/scrolling/nicosia/ScrollingTreeFrameScrollingNodeNicosia.cpp 2021-11-02 15:59:13 UTC (rev 285161)
@@ -116,6 +116,11 @@
m_delegate.stopAnimatedScroll();
}
+void ScrollingTreeFrameScrollingNodeNicosia::serviceScrollAnimation()
+{
+ m_delegate.serviceScrollAnimation();
+}
+
FloatPoint ScrollingTreeFrameScrollingNodeNicosia::adjustedScrollPosition(const FloatPoint& position, ScrollClamping clamping) const
{
FloatPoint scrollPosition(roundf(position.x()), roundf(position.y()));
Modified: trunk/Source/WebCore/page/scrolling/nicosia/ScrollingTreeFrameScrollingNodeNicosia.h (285160 => 285161)
--- trunk/Source/WebCore/page/scrolling/nicosia/ScrollingTreeFrameScrollingNodeNicosia.h 2021-11-02 15:56:29 UTC (rev 285160)
+++ trunk/Source/WebCore/page/scrolling/nicosia/ScrollingTreeFrameScrollingNodeNicosia.h 2021-11-02 15:59:13 UTC (rev 285161)
@@ -57,6 +57,7 @@
bool startAnimatedScrollToPosition(FloatPoint) override;
void stopAnimatedScroll() override;
+ void serviceScrollAnimation() final;
WheelEventHandlingResult handleWheelEvent(const PlatformWheelEvent&, EventTargeting) override;
FloatPoint adjustedScrollPosition(const FloatPoint&, ScrollClamping) const override;
Modified: trunk/Source/WebCore/page/scrolling/nicosia/ScrollingTreeOverflowScrollingNodeNicosia.cpp (285160 => 285161)
--- trunk/Source/WebCore/page/scrolling/nicosia/ScrollingTreeOverflowScrollingNodeNicosia.cpp 2021-11-02 15:56:29 UTC (rev 285160)
+++ trunk/Source/WebCore/page/scrolling/nicosia/ScrollingTreeOverflowScrollingNodeNicosia.cpp 2021-11-02 15:59:13 UTC (rev 285161)
@@ -99,6 +99,11 @@
m_delegate.stopAnimatedScroll();
}
+void ScrollingTreeOverflowScrollingNodeNicosia::serviceScrollAnimation()
+{
+ m_delegate.serviceScrollAnimation();
+}
+
} // namespace WebCore
#endif // ENABLE(ASYNC_SCROLLING) && USE(NICOSIA)
Modified: trunk/Source/WebCore/page/scrolling/nicosia/ScrollingTreeOverflowScrollingNodeNicosia.h (285160 => 285161)
--- trunk/Source/WebCore/page/scrolling/nicosia/ScrollingTreeOverflowScrollingNodeNicosia.h 2021-11-02 15:56:29 UTC (rev 285160)
+++ trunk/Source/WebCore/page/scrolling/nicosia/ScrollingTreeOverflowScrollingNodeNicosia.h 2021-11-02 15:59:13 UTC (rev 285161)
@@ -52,6 +52,7 @@
bool startAnimatedScrollToPosition(FloatPoint) override;
void stopAnimatedScroll() override;
+ void serviceScrollAnimation() final;
ScrollingTreeScrollingNodeDelegateNicosia m_delegate;
};
Modified: trunk/Source/WebCore/page/scrolling/nicosia/ScrollingTreeScrollingNodeDelegateNicosia.cpp (285160 => 285161)
--- trunk/Source/WebCore/page/scrolling/nicosia/ScrollingTreeScrollingNodeDelegateNicosia.cpp 2021-11-02 15:56:29 UTC (rev 285160)
+++ trunk/Source/WebCore/page/scrolling/nicosia/ScrollingTreeScrollingNodeDelegateNicosia.cpp 2021-11-02 15:59:13 UTC (rev 285161)
@@ -97,38 +97,19 @@
void ScrollingTreeScrollingNodeDelegateNicosia::startAnimationCallback(ScrollingEffectsController&)
{
- if (!m_animationTimer) {
- m_animationTimer = makeUnique<RunLoop::Timer<ScrollingTreeScrollingNodeDelegateNicosia>>(RunLoop::current(), this, &ScrollingTreeScrollingNodeDelegateNicosia::animationTimerFired);
-
-#if USE(GLIB_EVENT_LOOP)
- m_animationTimer->setPriority(RunLoopSourcePriority::DisplayRefreshMonitorTimer);
-#endif
- }
-
- if (m_animationTimer->isActive())
- return;
-
- static constexpr double frameRate = 60;
- static constexpr Seconds tickTime = 1_s / frameRate;
- m_animationTimer->startRepeating(tickTime);
+ scrollingNode().setScrollAnimationInProgress(true);
}
void ScrollingTreeScrollingNodeDelegateNicosia::stopAnimationCallback(ScrollingEffectsController&)
{
- if (m_animationTimer)
- m_animationTimer->stop();
+ scrollingNode().setScrollAnimationInProgress(false);
}
-void ScrollingTreeScrollingNodeDelegateNicosia::animationTimerFired()
+void ScrollingTreeScrollingNodeDelegateNicosia::serviceScrollAnimation()
{
m_scrollController.animationCallback(MonotonicTime::now());
}
-void ScrollingTreeScrollingNodeDelegateNicosia::serviceScrollAnimation()
-{
- // FIXME: Instead of using m_animationTimer, drive animations via ThreadedScrollingTree::serviceScrollAnimations().
-}
-
bool ScrollingTreeScrollingNodeDelegateNicosia::allowsHorizontalScrolling() const
{
return ScrollingTreeScrollingNodeDelegate::allowsHorizontalScrolling();
Modified: trunk/Source/WebCore/page/scrolling/nicosia/ScrollingTreeScrollingNodeDelegateNicosia.h (285160 => 285161)
--- trunk/Source/WebCore/page/scrolling/nicosia/ScrollingTreeScrollingNodeDelegateNicosia.h 2021-11-02 15:56:29 UTC (rev 285160)
+++ trunk/Source/WebCore/page/scrolling/nicosia/ScrollingTreeScrollingNodeDelegateNicosia.h 2021-11-02 15:59:13 UTC (rev 285161)
@@ -55,8 +55,6 @@
void serviceScrollAnimation() final;
private:
- void animationTimerFired();
-
// ScrollingEffectsControllerClient.
std::unique_ptr<ScrollingEffectsControllerTimer> createTimer(Function<void()>&&) final;
@@ -83,7 +81,6 @@
bool scrollAnimationEnabled() const final { return m_scrollAnimatorEnabled; }
ScrollingEffectsController m_scrollController;
- std::unique_ptr<RunLoop::Timer<ScrollingTreeScrollingNodeDelegateNicosia>> m_animationTimer;
bool m_scrollAnimatorEnabled { false };
};