Title: [249222] trunk/Source/WebCore
- Revision
- 249222
- Author
- simon.fra...@apple.com
- Date
- 2019-08-28 15:32:01 -0700 (Wed, 28 Aug 2019)
Log Message
Devirtualize RenderBox::visualOverflowRect()
https://bugs.webkit.org/show_bug.cgi?id=201231
Reviewed by Zalan Bujtas.
The only override of RenderBox::visualOverflowRect() was in RenderView, for "paintsEntireContents" views, and as
far as I can tell this is not necessary. visualOverflowRect() is hot when called from RenderLayer::localBoundingBox() --
this shows in profiles when scrolling large patch reviews, so making it non-virtual is a performance enhancement.
RenderLayer::localBoundingBox() can also just call visualOverflowRect(), since that returns borderBoxRect()
when there is no overflow.
* rendering/RenderBox.h:
(WebCore::RenderBox::visualOverflowRect const):
* rendering/RenderLayer.cpp:
(WebCore::performOverlapTests): Minor optimization to avoid a call to boundingBox().
(WebCore::RenderLayer::calculateClipRects const):
* rendering/RenderView.cpp:
(WebCore::RenderView::visualOverflowRect const): Deleted.
* rendering/RenderView.h:
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (249221 => 249222)
--- trunk/Source/WebCore/ChangeLog 2019-08-28 21:24:47 UTC (rev 249221)
+++ trunk/Source/WebCore/ChangeLog 2019-08-28 22:32:01 UTC (rev 249222)
@@ -1,3 +1,26 @@
+2019-08-28 Simon Fraser <simon.fra...@apple.com>
+
+ Devirtualize RenderBox::visualOverflowRect()
+ https://bugs.webkit.org/show_bug.cgi?id=201231
+
+ Reviewed by Zalan Bujtas.
+
+ The only override of RenderBox::visualOverflowRect() was in RenderView, for "paintsEntireContents" views, and as
+ far as I can tell this is not necessary. visualOverflowRect() is hot when called from RenderLayer::localBoundingBox() --
+ this shows in profiles when scrolling large patch reviews, so making it non-virtual is a performance enhancement.
+
+ RenderLayer::localBoundingBox() can also just call visualOverflowRect(), since that returns borderBoxRect()
+ when there is no overflow.
+
+ * rendering/RenderBox.h:
+ (WebCore::RenderBox::visualOverflowRect const):
+ * rendering/RenderLayer.cpp:
+ (WebCore::performOverlapTests): Minor optimization to avoid a call to boundingBox().
+ (WebCore::RenderLayer::calculateClipRects const):
+ * rendering/RenderView.cpp:
+ (WebCore::RenderView::visualOverflowRect const): Deleted.
+ * rendering/RenderView.h:
+
2019-08-28 Austin Eng <e...@chromium.org>
Create ANGLE EGL Context with all extensions disabled by default
Modified: trunk/Source/WebCore/rendering/RenderBox.h (249221 => 249222)
--- trunk/Source/WebCore/rendering/RenderBox.h 2019-08-28 21:24:47 UTC (rev 249221)
+++ trunk/Source/WebCore/rendering/RenderBox.h 2019-08-28 22:32:01 UTC (rev 249222)
@@ -191,7 +191,7 @@
LayoutUnit logicalLeftLayoutOverflow() const { return style().isHorizontalWritingMode() ? layoutOverflowRect().x() : layoutOverflowRect().y(); }
LayoutUnit logicalRightLayoutOverflow() const { return style().isHorizontalWritingMode() ? layoutOverflowRect().maxX() : layoutOverflowRect().maxY(); }
- virtual LayoutRect visualOverflowRect() const { return m_overflow ? m_overflow->visualOverflowRect() : borderBoxRect(); }
+ LayoutRect visualOverflowRect() const { return m_overflow ? m_overflow->visualOverflowRect() : borderBoxRect(); }
LayoutUnit logicalLeftVisualOverflow() const { return style().isHorizontalWritingMode() ? visualOverflowRect().x() : visualOverflowRect().y(); }
LayoutUnit logicalRightVisualOverflow() const { return style().isHorizontalWritingMode() ? visualOverflowRect().maxX() : visualOverflowRect().maxY(); }
Modified: trunk/Source/WebCore/rendering/RenderLayer.cpp (249221 => 249222)
--- trunk/Source/WebCore/rendering/RenderLayer.cpp 2019-08-28 21:24:47 UTC (rev 249221)
+++ trunk/Source/WebCore/rendering/RenderLayer.cpp 2019-08-28 22:32:01 UTC (rev 249222)
@@ -4094,6 +4094,9 @@
static void performOverlapTests(OverlapTestRequestMap& overlapTestRequests, const RenderLayer* rootLayer, const RenderLayer* layer)
{
+ if (overlapTestRequests.isEmpty())
+ return;
+
Vector<OverlapTestRequestClient*> overlappedRequestClients;
LayoutRect boundingBox = layer->boundingBox(rootLayer, layer->offsetFromAncestor(rootLayer));
for (auto& request : overlapTestRequests) {
@@ -5934,13 +5937,8 @@
if (!(flags & DontConstrainForMask) && box->hasMask()) {
result = box->maskClipRect(LayoutPoint());
box->flipForWritingMode(result); // The mask clip rect is in physical coordinates, so we have to flip, since localBoundingBox is not.
- } else {
- LayoutRect bbox = box->borderBoxRect();
- result = bbox;
- LayoutRect overflowRect = box->visualOverflowRect();
- if (bbox != overflowRect)
- result.unite(overflowRect);
- }
+ } else
+ result = box->visualOverflowRect();
}
return result;
}
Modified: trunk/Source/WebCore/rendering/RenderView.cpp (249221 => 249222)
--- trunk/Source/WebCore/rendering/RenderView.cpp 2019-08-28 21:24:47 UTC (rev 249221)
+++ trunk/Source/WebCore/rendering/RenderView.cpp 2019-08-28 22:32:01 UTC (rev 249222)
@@ -514,14 +514,6 @@
compositor.repaintCompositedLayers();
}
-LayoutRect RenderView::visualOverflowRect() const
-{
- if (frameView().paintsEntireContents())
- return layoutOverflowRect();
-
- return RenderBlockFlow::visualOverflowRect();
-}
-
Optional<LayoutRect> RenderView::computeVisibleRectInContainer(const LayoutRect& rect, const RenderLayerModelObject* container, VisibleRectContext context) const
{
// If a container was specified, and was not nullptr or the RenderView,
Modified: trunk/Source/WebCore/rendering/RenderView.h (249221 => 249222)
--- trunk/Source/WebCore/rendering/RenderView.h 2019-08-28 21:24:47 UTC (rev 249221)
+++ trunk/Source/WebCore/rendering/RenderView.h 2019-08-28 22:32:01 UTC (rev 249222)
@@ -68,7 +68,6 @@
FrameView& frameView() const { return m_frameView; }
- LayoutRect visualOverflowRect() const override;
Optional<LayoutRect> computeVisibleRectInContainer(const LayoutRect&, const RenderLayerModelObject* container, VisibleRectContext) const override;
void repaintRootContents();
void repaintViewRectangle(const LayoutRect&) const;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes