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

Reply via email to