Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 53e6f169995e6029d4a238a424b13cf7ede55ad2
https://github.com/WebKit/WebKit/commit/53e6f169995e6029d4a238a424b13cf7ede55ad2
Author: Yusuke Suzuki <[email protected]>
Date: 2024-05-15 (Wed, 15 May 2024)
Changed paths:
M Source/WebCore/rendering/RenderBlock.cpp
M Source/WebCore/rendering/RenderBlock.h
M Source/WebCore/rendering/RenderBlockFlow.cpp
M Source/WebCore/rendering/RenderBox.cpp
M Source/WebCore/rendering/RenderBox.h
M Source/WebCore/rendering/RenderElement.h
M Source/WebCore/rendering/RenderObject.cpp
M Source/WebCore/rendering/shapes/ShapeOutsideInfo.h
Log Message:
-----------
Do not query HashMap at RenderObject destruction
https://bugs.webkit.org/show_bug.cgi?id=274192
rdar://128099684
Reviewed by Alan Baradlay.
We found that a lot of HashMap lookups are used in RenderObject and its derived
classes' destruction.
This makes render tree teardown really costly since HashMap access is not so
fast.
This patch wipes many of them by using some techniques.
1. We put m_renderBlockHasRareData and m_renderBoxHasShapeOutsideInfo flags to
indicate whether these
side data is materialized for this RenderBlock. As a result, we can skip
querying to HashMap when
this bit is not set.
2. RenderObject::removeRareData should check HasRareData flag before accessing
to HashMap.
3. We are already using `HashMap<SingleThreadWeakRef<const T>, U>` much, but
let's use SingleThreadWeakHashMap
for that. As a result, for destruction, we do not need to query to this map.
SingleThreadWeakHashMap will
sweep dead ones in an amortized manner. This completely removes HashMap
querying for each destruction.
* Source/WebCore/rendering/RenderBlock.cpp:
(WebCore::PositionedDescendantsMap::addDescendant):
(WebCore::PositionedDescendantsMap::removeDescendant):
(WebCore::PositionedDescendantsMap::removeContainingBlock):
(WebCore::PositionedDescendantsMap::positionedRenderers const):
(WebCore::RenderBlock::~RenderBlock):
(WebCore::RenderBlock::willBeDestroyed):
(WebCore::RenderBlock::getBlockRareData const):
(WebCore::RenderBlock::ensureBlockRareData):
(WebCore::RenderBlock::cachedEnclosingFragmentedFlow const):
(WebCore::RenderBlock::cachedEnclosingFragmentedFlowNeedsUpdate const):
(WebCore::RenderBlock::setCachedEnclosingFragmentedFlowNeedsUpdate):
(WebCore::RenderBlock::updateCachedEnclosingFragmentedFlow const):
(WebCore::RenderBlock::locateEnclosingFragmentedFlow const):
(WebCore::RenderBlock::paginationStrut const):
(WebCore::RenderBlock::pageLogicalOffset const):
(WebCore::RenderBlock::setPaginationStrut):
(WebCore::RenderBlock::setPageLogicalOffset):
(WebCore::RenderBlock::intrinsicBorderForFieldset const):
(WebCore::RenderBlock::setIntrinsicBorderForFieldset):
(WebCore::removeBlockFromPercentageDescendantAndContainerMaps): Deleted.
(WebCore::RenderBlock::blockWillBeDestroyed): Deleted.
(WebCore::RenderBlock::hasRareData const): Deleted.
(WebCore::RenderBlock::removeFromUpdateScrollInfoAfterLayoutTransaction):
Deleted.
(WebCore::getBlockRareData): Deleted.
(WebCore::ensureBlockRareData): Deleted.
* Source/WebCore/rendering/RenderBlock.h:
* Source/WebCore/rendering/RenderBlockFlow.cpp:
(WebCore::RenderBlockFlow::willBeDestroyed):
* Source/WebCore/rendering/RenderBox.cpp:
(WebCore::RenderBox::willBeDestroyed):
(WebCore::RenderBox::updateShapeOutsideInfoAfterStyleChange):
(WebCore::RenderBox::overridingLogicalWidth const):
(WebCore::RenderBox::overridingLogicalHeight const):
(WebCore::RenderBox::overridingContainingBlockContentWidth const):
(WebCore::RenderBox::overridingContainingBlockContentHeight const):
(WebCore::RenderBox::overridingContainingBlockContentLogicalWidth const):
(WebCore::RenderBox::overridingContainingBlockContentLogicalHeight const):
(WebCore::RenderBox::overridingLogicalHeightLength const):
(WebCore::RenderBox::overridingLogicalWidthLength const):
(WebCore::RenderBox::imageChanged):
(WebCore::shapeOutsideInfoMap):
(WebCore::RenderBox::shapeOutsideInfo const):
(WebCore::RenderBox::ensureShapeOutsideInfo):
(WebCore::RenderBox::removeShapeOutsideInfo):
* Source/WebCore/rendering/RenderBox.h:
(WebCore::RenderBox::shapeOutsideInfo const): Deleted.
* Source/WebCore/rendering/RenderElement.h:
(WebCore::RenderElement::setRenderBoxHasShapeOutsideInfo):
(WebCore::RenderElement::renderBoxHasShapeOutsideInfo const):
(WebCore::RenderElement::setRenderBlockHasRareData):
(WebCore::RenderElement::renderBlockHasRareData const):
* Source/WebCore/rendering/RenderObject.cpp:
(WebCore::RenderObject::removeRareData):
* Source/WebCore/rendering/shapes/ShapeOutsideInfo.h:
Canonical link: https://commits.webkit.org/278829@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes