Title: [262298] trunk/Source/WebCore
Revision
262298
Author
[email protected]
Date
2020-05-29 09:29:07 -0700 (Fri, 29 May 2020)

Log Message

Update debug overlays at rendering update time
https://bugs.webkit.org/show_bug.cgi?id=212510

Reviewed by Antoine Quint.

Don't eagerly update the regions in debug overlays when things change; this triggers
assertions for touch event overlays.

Instead, just mark them dirty and update the regions at "update the rendering" time.

* page/DebugPageOverlays.cpp:
(WebCore::RegionOverlay::setRegionChanged):
(WebCore::RegionOverlay::didMoveToPage):
(WebCore::RegionOverlay::recomputeRegion):
(WebCore::DebugPageOverlays::regionChanged):
(WebCore::DebugPageOverlays::updateRegionIfNecessary):
* page/DebugPageOverlays.h:
(WebCore::DebugPageOverlays::doAfterUpdateRendering):
* page/Page.cpp:
(WebCore::Page::doAfterUpdateRendering):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (262297 => 262298)


--- trunk/Source/WebCore/ChangeLog	2020-05-29 16:28:26 UTC (rev 262297)
+++ trunk/Source/WebCore/ChangeLog	2020-05-29 16:29:07 UTC (rev 262298)
@@ -1,5 +1,28 @@
 2020-05-29  Simon Fraser  <[email protected]>
 
+        Update debug overlays at rendering update time
+        https://bugs.webkit.org/show_bug.cgi?id=212510
+
+        Reviewed by Antoine Quint.
+
+        Don't eagerly update the regions in debug overlays when things change; this triggers
+        assertions for touch event overlays.
+
+        Instead, just mark them dirty and update the regions at "update the rendering" time.
+
+        * page/DebugPageOverlays.cpp:
+        (WebCore::RegionOverlay::setRegionChanged):
+        (WebCore::RegionOverlay::didMoveToPage):
+        (WebCore::RegionOverlay::recomputeRegion):
+        (WebCore::DebugPageOverlays::regionChanged):
+        (WebCore::DebugPageOverlays::updateRegionIfNecessary):
+        * page/DebugPageOverlays.h:
+        (WebCore::DebugPageOverlays::doAfterUpdateRendering):
+        * page/Page.cpp:
+        (WebCore::Page::doAfterUpdateRendering):
+
+2020-05-29  Simon Fraser  <[email protected]>
+
         Prepare for async scrolling in passive wheel event handler regions
         https://bugs.webkit.org/show_bug.cgi?id=212455
 

Modified: trunk/Source/WebCore/page/DebugPageOverlays.cpp (262297 => 262298)


--- trunk/Source/WebCore/page/DebugPageOverlays.cpp	2020-05-29 16:28:26 UTC (rev 262297)
+++ trunk/Source/WebCore/page/DebugPageOverlays.cpp	2020-05-29 16:29:07 UTC (rev 262298)
@@ -49,6 +49,8 @@
     void recomputeRegion();
     PageOverlay& overlay() { return *m_overlay; }
 
+    void setRegionChanged() { m_regionChanged = true; }
+
 protected:
     RegionOverlay(Page&, Color);
 
@@ -68,6 +70,7 @@
     RefPtr<PageOverlay> m_overlay;
     std::unique_ptr<Region> m_region;
     Color m_color;
+    bool m_regionChanged { true };
 };
 
 class MouseWheelRegionOverlay final : public RegionOverlay {
@@ -287,7 +290,7 @@
 void RegionOverlay::didMoveToPage(PageOverlay&, Page* page)
 {
     if (page)
-        recomputeRegion();
+        setRegionChanged();
 }
 
 void RegionOverlay::drawRect(PageOverlay&, GraphicsContext& context, const IntRect& dirtyRect)
@@ -321,8 +324,13 @@
 
 void RegionOverlay::recomputeRegion()
 {
+    if (!m_regionChanged)
+        return;
+
     if (updateRegion())
         m_overlay->setNeedsDisplay();
+
+    m_regionChanged = false;
 }
 
 DebugPageOverlays& DebugPageOverlays::singleton()
@@ -380,6 +388,12 @@
         return;
 
     if (auto* visualizer = regionOverlayForPage(*page, regionType))
+        visualizer->setRegionChanged();
+}
+
+void DebugPageOverlays::updateRegionIfNecessary(Page& page, RegionType regionType)
+{
+    if (auto* visualizer = regionOverlayForPage(page, regionType))
         visualizer->recomputeRegion();
 }
 

Modified: trunk/Source/WebCore/page/DebugPageOverlays.h (262297 => 262298)


--- trunk/Source/WebCore/page/DebugPageOverlays.h	2020-05-29 16:28:26 UTC (rev 262297)
+++ trunk/Source/WebCore/page/DebugPageOverlays.h	2020-05-29 16:29:07 UTC (rev 262298)
@@ -47,6 +47,7 @@
 
     static void didLayout(Frame&);
     static void didChangeEventHandlers(Frame&);
+    static void doAfterUpdateRendering(Page&);
 
     WEBCORE_EXPORT static void settingsChanged(Page&);
 
@@ -56,6 +57,8 @@
     void showRegionOverlay(Page&, RegionType);
     void hideRegionOverlay(Page&, RegionType);
 
+    void updateRegionIfNecessary(Page&, RegionType);
+
     void regionChanged(Frame&, RegionType);
 
     bool hasOverlaysForPage(Page& page) const
@@ -99,4 +102,13 @@
     sharedDebugOverlays->regionChanged(frame, RegionType::NonFastScrollableRegion);
 }
 
+inline void DebugPageOverlays::doAfterUpdateRendering(Page& page)
+{
+    if (LIKELY(!hasOverlays(page)))
+        return;
+
+    sharedDebugOverlays->updateRegionIfNecessary(page, RegionType::WheelEventHandlers);
+    sharedDebugOverlays->updateRegionIfNecessary(page, RegionType::NonFastScrollableRegion);
+}
+
 } // namespace WebCore

Modified: trunk/Source/WebCore/page/Page.cpp (262297 => 262298)


--- trunk/Source/WebCore/page/Page.cpp	2020-05-29 16:28:26 UTC (rev 262297)
+++ trunk/Source/WebCore/page/Page.cpp	2020-05-29 16:29:07 UTC (rev 262298)
@@ -41,6 +41,7 @@
 #include "DOMRect.h"
 #include "DOMRectList.h"
 #include "DatabaseProvider.h"
+#include "DebugPageOverlays.h"
 #include "DiagnosticLoggingClient.h"
 #include "DiagnosticLoggingKeys.h"
 #include "DocumentLoader.h"
@@ -1457,6 +1458,8 @@
         document->updateTouchEventRegions();
 #endif
 
+    DebugPageOverlays::doAfterUpdateRendering(*this);
+
     if (UNLIKELY(isMonitoringWheelEvents()))
         wheelEventTestMonitor()->checkShouldFireCallbacks();
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to