diff --git a/Libraries/LibWeb/Layout/FlexFormattingContext.cpp b/Libraries/LibWeb/Layout/FlexFormattingContext.cpp index 975c0b8215c..6a1a67bf974 100644 --- a/Libraries/LibWeb/Layout/FlexFormattingContext.cpp +++ b/Libraries/LibWeb/Layout/FlexFormattingContext.cpp @@ -51,6 +51,15 @@ void FlexFormattingContext::run(AvailableSpace const& available_space) { // This implements https://www.w3.org/TR/css-flexbox-1/#layout-algorithm + // OPTIMIZATION: If we're in intrinsic sizing layout, but the flex container is not the + // box being measured, we can skip everything here. + // The parent formatting context has already figured out our size anyway. + if (m_layout_mode == LayoutMode::IntrinsicSizing + && !available_space.width.is_intrinsic_sizing_constraint() + && !available_space.height.is_intrinsic_sizing_constraint()) { + return; + } + m_available_space = available_space; // 1. Generate anonymous flex items diff --git a/Libraries/LibWeb/Layout/GridFormattingContext.cpp b/Libraries/LibWeb/Layout/GridFormattingContext.cpp index 4135f55e2ad..aaa9955d2f3 100644 --- a/Libraries/LibWeb/Layout/GridFormattingContext.cpp +++ b/Libraries/LibWeb/Layout/GridFormattingContext.cpp @@ -1956,6 +1956,15 @@ CSSPixelRect GridFormattingContext::get_grid_area_rect(GridItem const& grid_item void GridFormattingContext::run(AvailableSpace const& available_space) { + // OPTIMIZATION: If we're in intrinsic sizing layout, but the grid container is not the + // box being measured, we can skip everything here. + // The parent formatting context has already figured out our size anyway. + if (m_layout_mode == LayoutMode::IntrinsicSizing + && !available_space.width.is_intrinsic_sizing_constraint() + && !available_space.height.is_intrinsic_sizing_constraint()) { + return; + } + m_available_space = available_space; init_grid_lines(GridDimension::Column);