Title: [257996] trunk/Source
Revision
257996
Author
simon.fra...@apple.com
Date
2020-03-06 08:05:53 -0800 (Fri, 06 Mar 2020)

Log Message

Use an OptionSet<> for SynchronousScrollingReasons
https://bugs.webkit.org/show_bug.cgi?id=208697

Reviewed by Antti Koivisto.

Convert SynchronousScrollingReasons to an OptionSet<SynchronousScrollingReason>.

Source/WebCore:

* page/PerformanceLoggingClient.cpp:
(WebCore::PerformanceLoggingClient::synchronousScrollingReasonsAsString):
* page/PerformanceLoggingClient.h:
* page/scrolling/AsyncScrollingCoordinator.cpp:
(WebCore::AsyncScrollingCoordinator::setSynchronousScrollingReasons):
(WebCore::AsyncScrollingCoordinator::reportSynchronousScrollingReasonsChanged):
* page/scrolling/AsyncScrollingCoordinator.h:
* page/scrolling/ScrollingCoordinator.cpp:
(WebCore::ScrollingCoordinator::synchronousScrollingReasons const):
(WebCore::ScrollingCoordinator::shouldUpdateScrollLayerPositionSynchronously const):
(WebCore::ScrollingCoordinator::synchronousScrollingReasonsAsText):
* page/scrolling/ScrollingCoordinator.h:
(WebCore::ScrollingCoordinator::setSynchronousScrollingReasons):
* page/scrolling/ScrollingCoordinatorTypes.h:
* page/scrolling/ScrollingStateFrameScrollingNode.cpp:
(WebCore::ScrollingStateFrameScrollingNode::setSynchronousScrollingReasons):
(WebCore::ScrollingStateFrameScrollingNode::dumpProperties const):
* page/scrolling/ScrollingStateFrameScrollingNode.h:
* page/scrolling/ScrollingTree.h:
(WebCore::ScrollingTree::reportSynchronousScrollingReasonsChanged):
* page/scrolling/ScrollingTreeFrameScrollingNode.cpp:
(WebCore::ScrollingTreeFrameScrollingNode::dumpProperties const):
* page/scrolling/ScrollingTreeFrameScrollingNode.h:
* page/scrolling/ThreadedScrollingTree.cpp:
(WebCore::ThreadedScrollingTree::reportSynchronousScrollingReasonsChanged):
* page/scrolling/ThreadedScrollingTree.h:

Source/WebKit:

* Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp:
(ArgumentCoder<ScrollingStateFrameScrollingNode>::decode):
* UIProcess/WebPageProxy.cpp:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (257995 => 257996)


--- trunk/Source/WebCore/ChangeLog	2020-03-06 14:49:38 UTC (rev 257995)
+++ trunk/Source/WebCore/ChangeLog	2020-03-06 16:05:53 UTC (rev 257996)
@@ -1,3 +1,39 @@
+2020-03-05  Simon Fraser  <simon.fra...@apple.com>
+
+        Use an OptionSet<> for SynchronousScrollingReasons
+        https://bugs.webkit.org/show_bug.cgi?id=208697
+
+        Reviewed by Antti Koivisto.
+
+        Convert SynchronousScrollingReasons to an OptionSet<SynchronousScrollingReason>.
+
+        * page/PerformanceLoggingClient.cpp:
+        (WebCore::PerformanceLoggingClient::synchronousScrollingReasonsAsString):
+        * page/PerformanceLoggingClient.h:
+        * page/scrolling/AsyncScrollingCoordinator.cpp:
+        (WebCore::AsyncScrollingCoordinator::setSynchronousScrollingReasons):
+        (WebCore::AsyncScrollingCoordinator::reportSynchronousScrollingReasonsChanged):
+        * page/scrolling/AsyncScrollingCoordinator.h:
+        * page/scrolling/ScrollingCoordinator.cpp:
+        (WebCore::ScrollingCoordinator::synchronousScrollingReasons const):
+        (WebCore::ScrollingCoordinator::shouldUpdateScrollLayerPositionSynchronously const):
+        (WebCore::ScrollingCoordinator::synchronousScrollingReasonsAsText):
+        * page/scrolling/ScrollingCoordinator.h:
+        (WebCore::ScrollingCoordinator::setSynchronousScrollingReasons):
+        * page/scrolling/ScrollingCoordinatorTypes.h:
+        * page/scrolling/ScrollingStateFrameScrollingNode.cpp:
+        (WebCore::ScrollingStateFrameScrollingNode::setSynchronousScrollingReasons):
+        (WebCore::ScrollingStateFrameScrollingNode::dumpProperties const):
+        * page/scrolling/ScrollingStateFrameScrollingNode.h:
+        * page/scrolling/ScrollingTree.h:
+        (WebCore::ScrollingTree::reportSynchronousScrollingReasonsChanged):
+        * page/scrolling/ScrollingTreeFrameScrollingNode.cpp:
+        (WebCore::ScrollingTreeFrameScrollingNode::dumpProperties const):
+        * page/scrolling/ScrollingTreeFrameScrollingNode.h:
+        * page/scrolling/ThreadedScrollingTree.cpp:
+        (WebCore::ThreadedScrollingTree::reportSynchronousScrollingReasonsChanged):
+        * page/scrolling/ThreadedScrollingTree.h:
+
 2020-03-06  Antoine Quint  <grao...@webkit.org>
 
         Remove the experimental flag for Pointer Events

Modified: trunk/Source/WebCore/page/PerformanceLoggingClient.cpp (257995 => 257996)


--- trunk/Source/WebCore/page/PerformanceLoggingClient.cpp	2020-03-06 14:49:38 UTC (rev 257995)
+++ trunk/Source/WebCore/page/PerformanceLoggingClient.cpp	2020-03-06 16:05:53 UTC (rev 257996)
@@ -26,27 +26,26 @@
 #include "config.h"
 #include "PerformanceLoggingClient.h"
 
-#include "ScrollingCoordinator.h"
 #include <wtf/text/StringBuilder.h>
 
 namespace WebCore {
 
-String PerformanceLoggingClient::synchronousScrollingReasonsAsString(SynchronousScrollingReasons synchronousScrollingReasons)
+String PerformanceLoggingClient::synchronousScrollingReasonsAsString(OptionSet<SynchronousScrollingReason> synchronousScrollingReasons)
 {
-    if (!synchronousScrollingReasons)
+    if (synchronousScrollingReasons.isEmpty())
         return emptyString();
 
     StringBuilder reasons;
 
-    if (synchronousScrollingReasons & ScrollingCoordinator::ForcedOnMainThread)
+    if (synchronousScrollingReasons & SynchronousScrollingReason::ForcedOnMainThread)
         reasons.appendLiteral("forced,");
-    if (synchronousScrollingReasons & ScrollingCoordinator::HasSlowRepaintObjects)
+    if (synchronousScrollingReasons & SynchronousScrollingReason::HasSlowRepaintObjects)
         reasons.appendLiteral("slow-repaint objects,");
-    if (synchronousScrollingReasons & ScrollingCoordinator::HasViewportConstrainedObjectsWithoutSupportingFixedLayers)
+    if (synchronousScrollingReasons & SynchronousScrollingReason::HasViewportConstrainedObjectsWithoutSupportingFixedLayers)
         reasons.appendLiteral("viewport-constrained objects,");
-    if (synchronousScrollingReasons & ScrollingCoordinator::HasNonLayerViewportConstrainedObjects)
+    if (synchronousScrollingReasons & SynchronousScrollingReason::HasNonLayerViewportConstrainedObjects)
         reasons.appendLiteral("non-layer viewport-constrained objects,");
-    if (synchronousScrollingReasons & ScrollingCoordinator::IsImageDocument)
+    if (synchronousScrollingReasons & SynchronousScrollingReason::IsImageDocument)
         reasons.appendLiteral("image document,");
 
     // Strip the trailing comma.

Modified: trunk/Source/WebCore/page/PerformanceLoggingClient.h (257995 => 257996)


--- trunk/Source/WebCore/page/PerformanceLoggingClient.h	2020-03-06 14:49:38 UTC (rev 257995)
+++ trunk/Source/WebCore/page/PerformanceLoggingClient.h	2020-03-06 16:05:53 UTC (rev 257996)
@@ -25,14 +25,14 @@
 
 #pragma once
 
+#include "ScrollingCoordinatorTypes.h"
 #include <wtf/FastMalloc.h>
 #include <wtf/MonotonicTime.h>
+#include <wtf/OptionSet.h>
 #include <wtf/text/WTFString.h>
 
 namespace WebCore {
 
-typedef unsigned SynchronousScrollingReasons;
-
 class PerformanceLoggingClient {
     WTF_MAKE_FAST_ALLOCATED;
 public:
@@ -43,7 +43,7 @@
     };
     virtual void logScrollingEvent(ScrollingEvent, MonotonicTime, uint64_t) = 0;
 
-    WEBCORE_EXPORT static String synchronousScrollingReasonsAsString(SynchronousScrollingReasons);
+    WEBCORE_EXPORT static String synchronousScrollingReasonsAsString(OptionSet<SynchronousScrollingReason>);
 
     virtual ~PerformanceLoggingClient() = default;
 };

Modified: trunk/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp (257995 => 257996)


--- trunk/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp	2020-03-06 14:49:38 UTC (rev 257995)
+++ trunk/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp	2020-03-06 16:05:53 UTC (rev 257996)
@@ -732,7 +732,7 @@
         ASSERT_NOT_REACHED();
 }
 
-void AsyncScrollingCoordinator::setSynchronousScrollingReasons(FrameView& frameView, SynchronousScrollingReasons reasons)
+void AsyncScrollingCoordinator::setSynchronousScrollingReasons(FrameView& frameView, OptionSet<SynchronousScrollingReason> reasons)
 {
     auto* scrollingStateNode = static_cast<ScrollingStateFrameScrollingNode*>(m_scrollingStateTree->stateNodeForID(frameView.scrollingNodeID()));
     if (!scrollingStateNode)
@@ -868,10 +868,10 @@
         m_page->performanceLoggingClient()->logScrollingEvent(PerformanceLoggingClient::ScrollingEvent::ExposedTilelessArea, timestamp, unfilledArea);
 }
 
-void AsyncScrollingCoordinator::reportSynchronousScrollingReasonsChanged(MonotonicTime timestamp, SynchronousScrollingReasons reasons)
+void AsyncScrollingCoordinator::reportSynchronousScrollingReasonsChanged(MonotonicTime timestamp, OptionSet<SynchronousScrollingReason> reasons)
 {
     if (m_page && m_page->performanceLoggingClient())
-        m_page->performanceLoggingClient()->logScrollingEvent(PerformanceLoggingClient::ScrollingEvent::SwitchedScrollingMode, timestamp, reasons);
+        m_page->performanceLoggingClient()->logScrollingEvent(PerformanceLoggingClient::ScrollingEvent::SwitchedScrollingMode, timestamp, reasons.toRaw());
 }
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.h (257995 => 257996)


--- trunk/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.h	2020-03-06 14:49:38 UTC (rev 257995)
+++ trunk/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.h	2020-03-06 16:05:53 UTC (rev 257996)
@@ -66,7 +66,7 @@
     WEBCORE_EXPORT void updateIsMonitoringWheelEventsForFrameView(const FrameView&) override;
 
     void reportExposedUnfilledArea(MonotonicTime, unsigned unfilledArea);
-    void reportSynchronousScrollingReasonsChanged(MonotonicTime, SynchronousScrollingReasons);
+    void reportSynchronousScrollingReasonsChanged(MonotonicTime, OptionSet<SynchronousScrollingReason>);
 
 protected:
     WEBCORE_EXPORT AsyncScrollingCoordinator(Page*);
@@ -133,7 +133,7 @@
     WEBCORE_EXPORT void reconcileViewportConstrainedLayerPositions(ScrollingNodeID, const LayoutRect& viewportRect, ScrollingLayerPositionAction) override;
     WEBCORE_EXPORT void scrollableAreaScrollbarLayerDidChange(ScrollableArea&, ScrollbarOrientation) override;
 
-    WEBCORE_EXPORT void setSynchronousScrollingReasons(FrameView&, SynchronousScrollingReasons) final;
+    WEBCORE_EXPORT void setSynchronousScrollingReasons(FrameView&, OptionSet<SynchronousScrollingReason>) final;
 
     virtual void scheduleTreeStateCommit() = 0;
 

Modified: trunk/Source/WebCore/page/scrolling/ScrollingCoordinator.cpp (257995 => 257996)


--- trunk/Source/WebCore/page/scrolling/ScrollingCoordinator.cpp	2020-03-06 14:49:38 UTC (rev 257995)
+++ trunk/Source/WebCore/page/scrolling/ScrollingCoordinator.cpp	2020-03-06 16:05:53 UTC (rev 257996)
@@ -327,18 +327,18 @@
     return false;
 }
 
-SynchronousScrollingReasons ScrollingCoordinator::synchronousScrollingReasons(const FrameView& frameView) const
+OptionSet<SynchronousScrollingReason> ScrollingCoordinator::synchronousScrollingReasons(const FrameView& frameView) const
 {
-    SynchronousScrollingReasons synchronousScrollingReasons = (SynchronousScrollingReasons)0;
+    OptionSet<SynchronousScrollingReason> synchronousScrollingReasons;
 
     if (m_forceSynchronousScrollLayerPositionUpdates)
-        synchronousScrollingReasons |= ForcedOnMainThread;
+        synchronousScrollingReasons.add(SynchronousScrollingReason::ForcedOnMainThread);
     if (frameView.hasSlowRepaintObjects())
-        synchronousScrollingReasons |= HasSlowRepaintObjects;
+        synchronousScrollingReasons.add(SynchronousScrollingReason::HasSlowRepaintObjects);
     if (hasVisibleSlowRepaintViewportConstrainedObjects(frameView))
-        synchronousScrollingReasons |= HasNonLayerViewportConstrainedObjects;
+        synchronousScrollingReasons.add(SynchronousScrollingReason::HasNonLayerViewportConstrainedObjects);
     if (frameView.frame().mainFrame().document() && frameView.frame().document()->isImageDocument())
-        synchronousScrollingReasons |= IsImageDocument;
+        synchronousScrollingReasons.add(SynchronousScrollingReason::IsImageDocument);
 
     return synchronousScrollingReasons;
 }
@@ -371,7 +371,7 @@
 bool ScrollingCoordinator::shouldUpdateScrollLayerPositionSynchronously(const FrameView& frameView) const
 {
     if (&frameView == m_page->mainFrame().view())
-        return synchronousScrollingReasons(frameView);
+        return !synchronousScrollingReasons(frameView).isEmpty();
     
     return true;
 }
@@ -387,19 +387,19 @@
     return String();
 }
 
-String ScrollingCoordinator::synchronousScrollingReasonsAsText(SynchronousScrollingReasons reasons)
+String ScrollingCoordinator::synchronousScrollingReasonsAsText(OptionSet<SynchronousScrollingReason> reasons)
 {
     StringBuilder stringBuilder;
 
-    if (reasons & ScrollingCoordinator::ForcedOnMainThread)
+    if (reasons & SynchronousScrollingReason::ForcedOnMainThread)
         stringBuilder.appendLiteral("Forced on main thread, ");
-    if (reasons & ScrollingCoordinator::HasSlowRepaintObjects)
+    if (reasons & SynchronousScrollingReason::HasSlowRepaintObjects)
         stringBuilder.appendLiteral("Has slow repaint objects, ");
-    if (reasons & ScrollingCoordinator::HasViewportConstrainedObjectsWithoutSupportingFixedLayers)
+    if (reasons & SynchronousScrollingReason::HasViewportConstrainedObjectsWithoutSupportingFixedLayers)
         stringBuilder.appendLiteral("Has viewport constrained objects without supporting fixed layers, ");
-    if (reasons & ScrollingCoordinator::HasNonLayerViewportConstrainedObjects)
+    if (reasons & SynchronousScrollingReason::HasNonLayerViewportConstrainedObjects)
         stringBuilder.appendLiteral("Has non-layer viewport-constrained objects, ");
-    if (reasons & ScrollingCoordinator::IsImageDocument)
+    if (reasons & SynchronousScrollingReason::IsImageDocument)
         stringBuilder.appendLiteral("Is image document, ");
 
     if (stringBuilder.length())

Modified: trunk/Source/WebCore/page/scrolling/ScrollingCoordinator.h (257995 => 257996)


--- trunk/Source/WebCore/page/scrolling/ScrollingCoordinator.h	2020-03-06 14:49:38 UTC (rev 257995)
+++ trunk/Source/WebCore/page/scrolling/ScrollingCoordinator.h	2020-03-06 16:05:53 UTC (rev 257996)
@@ -168,21 +168,13 @@
     // Generated a unique id for scrolling nodes.
     ScrollingNodeID uniqueScrollingNodeID();
 
-    enum MainThreadScrollingReasonFlags {
-        ForcedOnMainThread                                          = 1 << 0,
-        HasSlowRepaintObjects                                       = 1 << 1,
-        HasViewportConstrainedObjectsWithoutSupportingFixedLayers   = 1 << 2,
-        HasNonLayerViewportConstrainedObjects                       = 1 << 3,
-        IsImageDocument                                             = 1 << 4
-    };
-
-    SynchronousScrollingReasons synchronousScrollingReasons(const FrameView&) const;
+    OptionSet<SynchronousScrollingReason> synchronousScrollingReasons(const FrameView&) const;
     bool shouldUpdateScrollLayerPositionSynchronously(const FrameView&) const;
 
     virtual void willDestroyScrollableArea(ScrollableArea&) { }
     virtual void scrollableAreaScrollbarLayerDidChange(ScrollableArea&, ScrollbarOrientation) { }
 
-    static String synchronousScrollingReasonsAsText(SynchronousScrollingReasons);
+    static String synchronousScrollingReasonsAsText(OptionSet<SynchronousScrollingReason>);
     String synchronousScrollingReasonsAsText() const;
 
     EventTrackingRegions absoluteEventTrackingRegions() const;
@@ -205,7 +197,7 @@
     Page* m_page; // FIXME: ideally this would be a reference but it gets nulled on async teardown.
 
 private:
-    virtual void setSynchronousScrollingReasons(FrameView&, SynchronousScrollingReasons) { }
+    virtual void setSynchronousScrollingReasons(FrameView&, OptionSet<SynchronousScrollingReason>) { }
 
     virtual bool hasVisibleSlowRepaintViewportConstrainedObjects(const FrameView&) const;
     void updateSynchronousScrollingReasons(FrameView&);

Modified: trunk/Source/WebCore/page/scrolling/ScrollingCoordinatorTypes.h (257995 => 257996)


--- trunk/Source/WebCore/page/scrolling/ScrollingCoordinatorTypes.h	2020-03-06 14:49:38 UTC (rev 257995)
+++ trunk/Source/WebCore/page/scrolling/ScrollingCoordinatorTypes.h	2020-03-06 16:05:53 UTC (rev 257996)
@@ -29,7 +29,13 @@
 
 namespace WebCore {
 
-typedef unsigned SynchronousScrollingReasons;
+enum class SynchronousScrollingReason {
+    ForcedOnMainThread                                          = 1 << 0,
+    HasSlowRepaintObjects                                       = 1 << 1,
+    HasViewportConstrainedObjectsWithoutSupportingFixedLayers   = 1 << 2,
+    HasNonLayerViewportConstrainedObjects                       = 1 << 3,
+    IsImageDocument                                             = 1 << 4
+};
 
 enum class ScrollingNodeType : uint8_t {
     MainFrame,

Modified: trunk/Source/WebCore/page/scrolling/ScrollingStateFrameScrollingNode.cpp (257995 => 257996)


--- trunk/Source/WebCore/page/scrolling/ScrollingStateFrameScrollingNode.cpp	2020-03-06 14:49:38 UTC (rev 257995)
+++ trunk/Source/WebCore/page/scrolling/ScrollingStateFrameScrollingNode.cpp	2020-03-06 16:05:53 UTC (rev 257996)
@@ -133,7 +133,7 @@
     setPropertyChanged(EventTrackingRegion);
 }
 
-void ScrollingStateFrameScrollingNode::setSynchronousScrollingReasons(SynchronousScrollingReasons reasons)
+void ScrollingStateFrameScrollingNode::setSynchronousScrollingReasons(OptionSet<SynchronousScrollingReason> reasons)
 {
     if (m_synchronousScrollingReasons == reasons)
         return;
@@ -353,7 +353,7 @@
         }
     }
 
-    if (m_synchronousScrollingReasons)
+    if (!m_synchronousScrollingReasons.isEmpty())
         ts.dumpProperty("Scrolling on main thread because:", ScrollingCoordinator::synchronousScrollingReasonsAsText(m_synchronousScrollingReasons));
     
     ts.dumpProperty("behavior for fixed", m_behaviorForFixed);

Modified: trunk/Source/WebCore/page/scrolling/ScrollingStateFrameScrollingNode.h (257995 => 257996)


--- trunk/Source/WebCore/page/scrolling/ScrollingStateFrameScrollingNode.h	2020-03-06 14:49:38 UTC (rev 257995)
+++ trunk/Source/WebCore/page/scrolling/ScrollingStateFrameScrollingNode.h	2020-03-06 16:05:53 UTC (rev 257996)
@@ -75,8 +75,8 @@
     const EventTrackingRegions& eventTrackingRegions() const { return m_eventTrackingRegions; }
     WEBCORE_EXPORT void setEventTrackingRegions(const EventTrackingRegions&);
 
-    SynchronousScrollingReasons synchronousScrollingReasons() const { return m_synchronousScrollingReasons; }
-    WEBCORE_EXPORT void setSynchronousScrollingReasons(SynchronousScrollingReasons);
+    OptionSet<SynchronousScrollingReason> synchronousScrollingReasons() const { return m_synchronousScrollingReasons; }
+    WEBCORE_EXPORT void setSynchronousScrollingReasons(OptionSet<SynchronousScrollingReason>);
 
     ScrollBehaviorForFixedElements scrollBehaviorForFixedElements() const { return m_behaviorForFixed; }
     WEBCORE_EXPORT void setScrollBehaviorForFixedElements(ScrollBehaviorForFixedElements);
@@ -164,7 +164,7 @@
     float m_topContentInset { 0 };
     int m_headerHeight { 0 };
     int m_footerHeight { 0 };
-    SynchronousScrollingReasons m_synchronousScrollingReasons { 0 };
+    OptionSet<SynchronousScrollingReason> m_synchronousScrollingReasons;
     ScrollBehaviorForFixedElements m_behaviorForFixed { StickToDocumentBounds };
     bool m_fixedElementsLayoutRelativeToFrame { false };
     bool m_visualViewportIsSmallerThanLayoutViewport { false };

Modified: trunk/Source/WebCore/page/scrolling/ScrollingTree.h (257995 => 257996)


--- trunk/Source/WebCore/page/scrolling/ScrollingTree.h	2020-03-06 14:49:38 UTC (rev 257995)
+++ trunk/Source/WebCore/page/scrolling/ScrollingTree.h	2020-03-06 16:05:53 UTC (rev 257996)
@@ -92,7 +92,7 @@
 
     void notifyRelatedNodesAfterScrollPositionChange(ScrollingTreeScrollingNode& changedNode);
 
-    virtual void reportSynchronousScrollingReasonsChanged(MonotonicTime, SynchronousScrollingReasons) { }
+    virtual void reportSynchronousScrollingReasonsChanged(MonotonicTime, OptionSet<SynchronousScrollingReason>) { }
     virtual void reportExposedUnfilledArea(MonotonicTime, unsigned /* unfilledArea */) { }
 
 #if PLATFORM(IOS_FAMILY)

Modified: trunk/Source/WebCore/page/scrolling/ScrollingTreeFrameScrollingNode.cpp (257995 => 257996)


--- trunk/Source/WebCore/page/scrolling/ScrollingTreeFrameScrollingNode.cpp	2020-03-06 14:49:38 UTC (rev 257995)
+++ trunk/Source/WebCore/page/scrolling/ScrollingTreeFrameScrollingNode.cpp	2020-03-06 16:05:53 UTC (rev 257996)
@@ -156,7 +156,7 @@
         ts.dumpProperty("header height", m_headerHeight);
     if (m_footerHeight)
         ts.dumpProperty("footer height", m_footerHeight);
-    if (m_synchronousScrollingReasons)
+    if (!m_synchronousScrollingReasons.isEmpty())
         ts.dumpProperty("synchronous scrolling reasons", ScrollingCoordinator::synchronousScrollingReasonsAsText(m_synchronousScrollingReasons));
 
     ts.dumpProperty("behavior for fixed", m_behaviorForFixed);

Modified: trunk/Source/WebCore/page/scrolling/ScrollingTreeFrameScrollingNode.h (257995 => 257996)


--- trunk/Source/WebCore/page/scrolling/ScrollingTreeFrameScrollingNode.h	2020-03-06 14:49:38 UTC (rev 257995)
+++ trunk/Source/WebCore/page/scrolling/ScrollingTreeFrameScrollingNode.h	2020-03-06 16:05:53 UTC (rev 257996)
@@ -41,8 +41,8 @@
 
     void commitStateBeforeChildren(const ScrollingStateNode&) override;
     
-    SynchronousScrollingReasons synchronousScrollingReasons() const { return m_synchronousScrollingReasons; }
-    bool shouldUpdateScrollLayerPositionSynchronously() const { return m_synchronousScrollingReasons; }
+    OptionSet<SynchronousScrollingReason> synchronousScrollingReasons() const { return m_synchronousScrollingReasons; }
+    bool shouldUpdateScrollLayerPositionSynchronously() const { return !m_synchronousScrollingReasons.isEmpty(); }
     bool fixedElementsLayoutRelativeToFrame() const { return m_fixedElementsLayoutRelativeToFrame; }
     bool visualViewportIsSmallerThanLayoutViewport() const { return m_visualViewportIsSmallerThanLayoutViewport; }
 
@@ -85,7 +85,7 @@
     int m_headerHeight { 0 };
     int m_footerHeight { 0 };
     
-    SynchronousScrollingReasons m_synchronousScrollingReasons { 0 };
+    OptionSet<SynchronousScrollingReason> m_synchronousScrollingReasons;
     ScrollBehaviorForFixedElements m_behaviorForFixed { StickToDocumentBounds };
     
     bool m_fixedElementsLayoutRelativeToFrame { false };

Modified: trunk/Source/WebCore/page/scrolling/ThreadedScrollingTree.cpp (257995 => 257996)


--- trunk/Source/WebCore/page/scrolling/ThreadedScrollingTree.cpp	2020-03-06 14:49:38 UTC (rev 257995)
+++ trunk/Source/WebCore/page/scrolling/ThreadedScrollingTree.cpp	2020-03-06 16:05:53 UTC (rev 257996)
@@ -127,7 +127,7 @@
     });
 }
 
-void ThreadedScrollingTree::reportSynchronousScrollingReasonsChanged(MonotonicTime timestamp, SynchronousScrollingReasons reasons)
+void ThreadedScrollingTree::reportSynchronousScrollingReasonsChanged(MonotonicTime timestamp, OptionSet<SynchronousScrollingReason> reasons)
 {
     RunLoop::main().dispatch([scrollingCoordinator = m_scrollingCoordinator, timestamp, reasons] {
         scrollingCoordinator->reportSynchronousScrollingReasonsChanged(timestamp, reasons);

Modified: trunk/Source/WebCore/page/scrolling/ThreadedScrollingTree.h (257995 => 257996)


--- trunk/Source/WebCore/page/scrolling/ThreadedScrollingTree.h	2020-03-06 14:49:38 UTC (rev 257995)
+++ trunk/Source/WebCore/page/scrolling/ThreadedScrollingTree.h	2020-03-06 16:05:53 UTC (rev 257996)
@@ -75,7 +75,7 @@
 #endif
 
     void reportExposedUnfilledArea(MonotonicTime, unsigned unfilledArea) override;
-    void reportSynchronousScrollingReasonsChanged(MonotonicTime, SynchronousScrollingReasons) override;
+    void reportSynchronousScrollingReasonsChanged(MonotonicTime, OptionSet<SynchronousScrollingReason>) override;
 
 private:
     bool isThreadedScrollingTree() const override { return true; }

Modified: trunk/Source/WebKit/ChangeLog (257995 => 257996)


--- trunk/Source/WebKit/ChangeLog	2020-03-06 14:49:38 UTC (rev 257995)
+++ trunk/Source/WebKit/ChangeLog	2020-03-06 16:05:53 UTC (rev 257996)
@@ -1,3 +1,16 @@
+2020-03-05  Simon Fraser  <simon.fra...@apple.com>
+
+        Use an OptionSet<> for SynchronousScrollingReasons
+        https://bugs.webkit.org/show_bug.cgi?id=208697
+
+        Reviewed by Antti Koivisto.
+
+        Convert SynchronousScrollingReasons to an OptionSet<SynchronousScrollingReason>.
+
+        * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp:
+        (ArgumentCoder<ScrollingStateFrameScrollingNode>::decode):
+        * UIProcess/WebPageProxy.cpp:
+
 2020-03-06  Jer Noble  <jer.no...@apple.com>
 
         [GPUP] Set the WebProcess's useGPUProcessForMedia setting during the first page load

Modified: trunk/Source/WebKit/Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp (257995 => 257996)


--- trunk/Source/WebKit/Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp	2020-03-06 14:49:38 UTC (rev 257995)
+++ trunk/Source/WebKit/Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp	2020-03-06 16:05:53 UTC (rev 257996)
@@ -295,7 +295,7 @@
 
     SCROLLING_NODE_DECODE(ScrollingStateFrameScrollingNode::FrameScaleFactor, float, setFrameScaleFactor);
     SCROLLING_NODE_DECODE(ScrollingStateFrameScrollingNode::EventTrackingRegion, EventTrackingRegions, setEventTrackingRegions);
-    SCROLLING_NODE_DECODE(ScrollingStateFrameScrollingNode::ReasonsForSynchronousScrolling, SynchronousScrollingReasons, setSynchronousScrollingReasons);
+    SCROLLING_NODE_DECODE(ScrollingStateFrameScrollingNode::ReasonsForSynchronousScrolling, OptionSet<SynchronousScrollingReason>, setSynchronousScrollingReasons);
     SCROLLING_NODE_DECODE_ENUM(ScrollingStateFrameScrollingNode::BehaviorForFixedElements, ScrollBehaviorForFixedElements, setScrollBehaviorForFixedElements);
 
     SCROLLING_NODE_DECODE(ScrollingStateFrameScrollingNode::HeaderHeight, int, setHeaderHeight);

Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.cpp (257995 => 257996)


--- trunk/Source/WebKit/UIProcess/WebPageProxy.cpp	2020-03-06 14:49:38 UTC (rev 257995)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.cpp	2020-03-06 16:05:53 UTC (rev 257996)
@@ -7147,7 +7147,7 @@
         break;
     case PerformanceLoggingClient::ScrollingEvent::SwitchedScrollingMode:
         if (data)
-            WTFLogAlways("SCROLLING: Switching to main-thread scrolling mode. Time: %f Reason(s): %s\n", timestamp.secondsSinceEpoch().value(), PerformanceLoggingClient::synchronousScrollingReasonsAsString(data).utf8().data());
+            WTFLogAlways("SCROLLING: Switching to main-thread scrolling mode. Time: %f Reason(s): %s\n", timestamp.secondsSinceEpoch().value(), PerformanceLoggingClient::synchronousScrollingReasonsAsString(OptionSet<SynchronousScrollingReason>::fromRaw(data)).utf8().data());
         else
             WTFLogAlways("SCROLLING: Switching to threaded scrolling mode. Time: %f\n", timestamp.secondsSinceEpoch().value());
         break;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to