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