Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: c7c99b8fbe3eb996a92f2c2b5c8f5819ce17b0b9
https://github.com/WebKit/WebKit/commit/c7c99b8fbe3eb996a92f2c2b5c8f5819ce17b0b9
Author: Alan Baradlay <[email protected]>
Date: 2026-04-23 (Thu, 23 Apr 2026)
Changed paths:
A
LayoutTests/imported/w3c/web-platform-tests/css/css-flexbox/percentage-size-quirks-004-expected.txt
A
LayoutTests/imported/w3c/web-platform-tests/css/css-flexbox/percentage-size-quirks-004.html
A
LayoutTests/imported/w3c/web-platform-tests/css/css-flexbox/percentage-size-quirks-005-expected.txt
A
LayoutTests/imported/w3c/web-platform-tests/css/css-flexbox/percentage-size-quirks-005.html
A
LayoutTests/imported/w3c/web-platform-tests/css/css-flexbox/position-relative-percentage-top-004-expected.txt
A
LayoutTests/imported/w3c/web-platform-tests/css/css-flexbox/position-relative-percentage-top-004.html
A
LayoutTests/imported/w3c/web-platform-tests/css/css-flexbox/position-relative-stretch-height-001-expected.txt
A
LayoutTests/imported/w3c/web-platform-tests/css/css-flexbox/position-relative-stretch-height-001.html
A
LayoutTests/imported/w3c/web-platform-tests/css/css-position/position-relative-015-expected.txt
A
LayoutTests/imported/w3c/web-platform-tests/css/css-position/position-relative-015.html
M Source/WebCore/rendering/RenderBoxModelObject.cpp
M Source/WebCore/rendering/RenderElement.h
M Source/WebCore/rendering/RenderFlexibleBox.h
Log Message:
-----------
[Flex] Avoid expensive percentage height walk when resolving relative
position offsets
https://bugs.webkit.org/show_bug.cgi?id=312944
Reviewed by Sammy Gill.
When a relatively positioned element has a percentage top or bottom (e.g.
top: 10%), we need to know if its containing block has a definite height.
The existing check (hasAutoHeightOrContainingBlockWithAutoHeight) in deeply
nested column flex content could trigger an expensive O(n2) walk.
The key insight is that relativePositionOffset runs after layout -- it only
affects visual positioning (painting, hit testing), not layout geometry. During
layout, the expensive walk is needed because flex item sizes aren't computed yet
and layout-phase checks gate when it's safe to resolve percentages. But after
layout, all sizes are final. We can answer "is this height definite?" with
simple style checks instead of re-walking the tree.
The new hasDefiniteHeightByStyle function checks 9.8 rules directly:
- Rule 3: stretched cross-axis items have definite height
- Rule 2: definite flex-basis makes post-flexing size definite
- Rule 1: definite container main size makes all items definite (recurse)
For non-flex cases it checks style values (auto, percentage, stretch, intrinsic
keywords)
and walks the percentage chain when needed -- all O(1) per level.
*
LayoutTests/imported/w3c/web-platform-tests/css/css-flexbox/percentage-size-quirks-004-expected.txt:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/css-flexbox/percentage-size-quirks-004.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/css-flexbox/percentage-size-quirks-005-expected.txt:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/css-flexbox/percentage-size-quirks-005.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/css-flexbox/position-relative-percentage-top-004-expected.txt:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/css-flexbox/position-relative-percentage-top-004.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/css-flexbox/position-relative-stretch-height-001-expected.txt:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/css-flexbox/position-relative-stretch-height-001.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/css-position/position-relative-015-expected.txt:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/css-position/position-relative-015.html:
Added.
* Source/WebCore/rendering/RenderBoxModelObject.cpp:
(WebCore::RenderBoxModelObject::containingBlockForAutoHeightDetectionGeneric
const):
(WebCore::hasDefiniteHeightByStyle):
(WebCore::RenderBoxModelObject::relativePositionOffset const):
* Source/WebCore/rendering/RenderElement.h:
(WebCore::RenderElement::isAnonymousForPercentageResolution const):
* Source/WebCore/rendering/RenderFlexibleBox.h:
Canonical link: https://commits.webkit.org/311908@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications