Commit 3584222f authored by Christian Biesinger's avatar Christian Biesinger Committed by Commit Bot

[layoutng] Store borders on fragments as well

This avoids recomputing them later.

Also, changes RunOldLayout to use legacy layout to
compute border/padding to store on the fragment,
which seems more correct.

R=eae@chromium.org

Bug: 635619
Cq-Include-Trybots: luci.chromium.try:linux_layout_tests_layout_ng
Change-Id: Id659d7c92eae81431d8e75a26ac3973421afc3d0
Reviewed-on: https://chromium-review.googlesource.com/1169634
Commit-Queue: Christian Biesinger <cbiesinger@chromium.org>
Reviewed-by: default avatarEmil A Eklund <eae@chromium.org>
Cr-Commit-Position: refs/heads/master@{#582339}
parent f5e8bf69
...@@ -149,6 +149,8 @@ void LayoutNGBlockFlow::UpdateOutOfFlowBlockLayout() { ...@@ -149,6 +149,8 @@ void LayoutNGBlockFlow::UpdateOutOfFlowBlockLayout() {
container_builder.SetInlineSize(container_border_box_logical_width); container_builder.SetInlineSize(container_border_box_logical_width);
container_builder.SetBlockSize(container_border_box_logical_height); container_builder.SetBlockSize(container_border_box_logical_height);
container_builder.SetBorders(
ComputeBorders(*constraint_space, *container_style));
container_builder.SetPadding( container_builder.SetPadding(
ComputePadding(*constraint_space, *container_style)); ComputePadding(*constraint_space, *container_style));
......
...@@ -635,6 +635,7 @@ scoped_refptr<NGLayoutResult> NGBlockLayoutAlgorithm::Layout() { ...@@ -635,6 +635,7 @@ scoped_refptr<NGLayoutResult> NGBlockLayoutAlgorithm::Layout() {
container_builder_.SetEndMarginStrut(end_margin_strut); container_builder_.SetEndMarginStrut(end_margin_strut);
container_builder_.SetIntrinsicBlockSize(intrinsic_block_size_); container_builder_.SetIntrinsicBlockSize(intrinsic_block_size_);
container_builder_.SetPadding(padding); container_builder_.SetPadding(padding);
container_builder_.SetBorders(borders);
// We only finalize for fragmentation if the fragment has a BFC block offset. // We only finalize for fragmentation if the fragment has a BFC block offset.
// This may occur with a zero block size fragment. We need to know the BFC // This may occur with a zero block size fragment. We need to know the BFC
......
...@@ -446,7 +446,7 @@ void NGBlockNode::CopyFragmentDataToLayoutBox( ...@@ -446,7 +446,7 @@ void NGBlockNode::CopyFragmentDataToLayoutBox(
logical_height += fragment_logical_size.block_size; logical_height += fragment_logical_size.block_size;
intrinsic_content_logical_height += layout_result.IntrinsicBlockSize(); intrinsic_content_logical_height += layout_result.IntrinsicBlockSize();
NGBoxStrut borders = ComputeBorders(constraint_space, Style()); NGBoxStrut borders = fragment.Borders();
NGBoxStrut scrollbars = GetScrollbarSizes(); NGBoxStrut scrollbars = GetScrollbarSizes();
NGBoxStrut padding = fragment.Padding(); NGBoxStrut padding = fragment.Padding();
NGBoxStrut border_scrollbar_padding = borders + scrollbars + padding; NGBoxStrut border_scrollbar_padding = borders + scrollbars + padding;
...@@ -724,7 +724,12 @@ scoped_refptr<NGLayoutResult> NGBlockNode::RunOldLayout( ...@@ -724,7 +724,12 @@ scoped_refptr<NGLayoutResult> NGBlockNode::RunOldLayout(
builder.SetIsOldLayoutRoot(); builder.SetIsOldLayoutRoot();
builder.SetInlineSize(box_size.inline_size); builder.SetInlineSize(box_size.inline_size);
builder.SetBlockSize(box_size.block_size); builder.SetBlockSize(box_size.block_size);
builder.SetPadding(ComputePadding(constraint_space, box_->StyleRef())); NGBoxStrut borders(box_->BorderStart(), box_->BorderEnd(),
box_->BorderBefore(), box_->BorderAfter());
builder.SetBorders(borders);
NGBoxStrut padding(box_->PaddingStart(), box_->PaddingEnd(),
box_->PaddingBefore(), box_->PaddingAfter());
builder.SetPadding(padding);
CopyBaselinesFromOldLayout(constraint_space, &builder); CopyBaselinesFromOldLayout(constraint_space, &builder);
UpdateShapeOutsideInfoIfNeeded( UpdateShapeOutsideInfoIfNeeded(
......
...@@ -83,6 +83,12 @@ NGLineHeightMetrics NGBoxFragment::BaselineMetrics( ...@@ -83,6 +83,12 @@ NGLineHeightMetrics NGBoxFragment::BaselineMetrics(
return NGLineHeightMetrics(block_size - block_size / 2, block_size / 2); return NGLineHeightMetrics(block_size - block_size / 2, block_size / 2);
} }
NGBoxStrut NGBoxFragment::Borders() const {
const auto& physical_fragment = ToNGPhysicalBoxFragment(physical_fragment_);
return physical_fragment.Borders().ConvertToLogical(GetWritingMode(),
direction_);
}
NGBoxStrut NGBoxFragment::Padding() const { NGBoxStrut NGBoxFragment::Padding() const {
const auto& physical_fragment = ToNGPhysicalBoxFragment(physical_fragment_); const auto& physical_fragment = ToNGPhysicalBoxFragment(physical_fragment_);
return physical_fragment.Padding().ConvertToLogical(GetWritingMode(), return physical_fragment.Padding().ConvertToLogical(GetWritingMode(),
......
...@@ -36,9 +36,10 @@ class CORE_EXPORT NGBoxFragment final : public NGFragment { ...@@ -36,9 +36,10 @@ class CORE_EXPORT NGBoxFragment final : public NGFragment {
NGLineHeightMetrics BaselineMetrics(const NGBaselineRequest&, NGLineHeightMetrics BaselineMetrics(const NGBaselineRequest&,
const NGConstraintSpace&) const; const NGConstraintSpace&) const;
NGBoxStrut Borders() const;
NGBoxStrut Padding() const; NGBoxStrut Padding() const;
private: protected:
TextDirection direction_; TextDirection direction_;
}; };
......
...@@ -183,6 +183,7 @@ scoped_refptr<NGLayoutResult> NGColumnLayoutAlgorithm::Layout() { ...@@ -183,6 +183,7 @@ scoped_refptr<NGLayoutResult> NGColumnLayoutAlgorithm::Layout() {
} }
container_builder_.SetInlineSize(border_box_size.inline_size); container_builder_.SetInlineSize(border_box_size.inline_size);
container_builder_.SetBlockSize(border_box_size.block_size); container_builder_.SetBlockSize(border_box_size.block_size);
container_builder_.SetBorders(ComputeBorders(ConstraintSpace(), Style()));
container_builder_.SetPadding(ComputePadding(ConstraintSpace(), Style())); container_builder_.SetPadding(ComputePadding(ConstraintSpace(), Style()));
return container_builder_.ToBoxFragment(); return container_builder_.ToBoxFragment();
......
...@@ -158,6 +158,8 @@ scoped_refptr<NGLayoutResult> NGFlexLayoutAlgorithm::Layout() { ...@@ -158,6 +158,8 @@ scoped_refptr<NGLayoutResult> NGFlexLayoutAlgorithm::Layout() {
ConstraintSpace(), Style(), intrinsic_block_size); ConstraintSpace(), Style(), intrinsic_block_size);
container_builder_.SetBlockSize(block_size); container_builder_.SetBlockSize(block_size);
container_builder_.SetInlineSize(flex_container_border_box_inline_size); container_builder_.SetInlineSize(flex_container_border_box_inline_size);
container_builder_.SetBorders(ComputeBorders(ConstraintSpace(), Style()));
container_builder_.SetPadding(ComputePadding(ConstraintSpace(), Style()));
return container_builder_.ToBoxFragment(); return container_builder_.ToBoxFragment();
} }
......
...@@ -68,6 +68,12 @@ NGFragmentBuilder& NGFragmentBuilder::SetIntrinsicBlockSize( ...@@ -68,6 +68,12 @@ NGFragmentBuilder& NGFragmentBuilder::SetIntrinsicBlockSize(
return *this; return *this;
} }
NGFragmentBuilder& NGFragmentBuilder::SetBorders(const NGBoxStrut& border) {
DCHECK_NE(BoxType(), NGPhysicalFragment::kInlineBox);
borders_ = border;
return *this;
}
NGFragmentBuilder& NGFragmentBuilder::SetPadding(const NGBoxStrut& padding) { NGFragmentBuilder& NGFragmentBuilder::SetPadding(const NGBoxStrut& padding) {
DCHECK_NE(BoxType(), NGPhysicalFragment::kInlineBox); DCHECK_NE(BoxType(), NGPhysicalFragment::kInlineBox);
padding_ = padding; padding_ = padding;
...@@ -308,6 +314,7 @@ scoped_refptr<NGLayoutResult> NGFragmentBuilder::ToBoxFragment( ...@@ -308,6 +314,7 @@ scoped_refptr<NGLayoutResult> NGFragmentBuilder::ToBoxFragment(
scoped_refptr<NGPhysicalBoxFragment> fragment = scoped_refptr<NGPhysicalBoxFragment> fragment =
base::AdoptRef(new NGPhysicalBoxFragment( base::AdoptRef(new NGPhysicalBoxFragment(
layout_object_, Style(), style_variant_, physical_size, children_, layout_object_, Style(), style_variant_, physical_size, children_,
borders_.ConvertToPhysical(GetWritingMode(), Direction()),
padding_.ConvertToPhysical(GetWritingMode(), Direction()), padding_.ConvertToPhysical(GetWritingMode(), Direction()),
contents_ink_overflow, baselines_, BoxType(), is_old_layout_root_, contents_ink_overflow, baselines_, BoxType(), is_old_layout_root_,
border_edges_.ToPhysical(GetWritingMode()), std::move(break_token))); border_edges_.ToPhysical(GetWritingMode()), std::move(break_token)));
......
...@@ -40,6 +40,7 @@ class CORE_EXPORT NGFragmentBuilder final : public NGContainerFragmentBuilder { ...@@ -40,6 +40,7 @@ class CORE_EXPORT NGFragmentBuilder final : public NGContainerFragmentBuilder {
~NGFragmentBuilder() override; ~NGFragmentBuilder() override;
NGFragmentBuilder& SetIntrinsicBlockSize(LayoutUnit); NGFragmentBuilder& SetIntrinsicBlockSize(LayoutUnit);
NGFragmentBuilder& SetBorders(const NGBoxStrut&);
NGFragmentBuilder& SetPadding(const NGBoxStrut&); NGFragmentBuilder& SetPadding(const NGBoxStrut&);
NGFragmentBuilder& SetPadding(const NGLineBoxStrut&); NGFragmentBuilder& SetPadding(const NGLineBoxStrut&);
...@@ -186,6 +187,7 @@ class CORE_EXPORT NGFragmentBuilder final : public NGContainerFragmentBuilder { ...@@ -186,6 +187,7 @@ class CORE_EXPORT NGFragmentBuilder final : public NGContainerFragmentBuilder {
LayoutObject* layout_object_; LayoutObject* layout_object_;
LayoutUnit intrinsic_block_size_; LayoutUnit intrinsic_block_size_;
NGBoxStrut borders_;
NGBoxStrut padding_; NGBoxStrut padding_;
NGPhysicalFragment::NGBoxType box_type_; NGPhysicalFragment::NGBoxType box_type_;
......
...@@ -71,6 +71,7 @@ scoped_refptr<NGLayoutResult> NGPageLayoutAlgorithm::Layout() { ...@@ -71,6 +71,7 @@ scoped_refptr<NGLayoutResult> NGPageLayoutAlgorithm::Layout() {
border_box_size.block_size = ComputeBlockSizeForFragment( border_box_size.block_size = ComputeBlockSizeForFragment(
ConstraintSpace(), Style(), intrinsic_block_size); ConstraintSpace(), Style(), intrinsic_block_size);
container_builder_.SetBlockSize(border_box_size.block_size); container_builder_.SetBlockSize(border_box_size.block_size);
container_builder_.SetBorders(ComputeBorders(ConstraintSpace(), Style()));
container_builder_.SetPadding(ComputePadding(ConstraintSpace(), Style())); container_builder_.SetPadding(ComputePadding(ConstraintSpace(), Style()));
NGOutOfFlowLayoutPart(&container_builder_, Node().IsAbsoluteContainer(), NGOutOfFlowLayoutPart(&container_builder_, Node().IsAbsoluteContainer(),
......
...@@ -22,6 +22,7 @@ NGPhysicalBoxFragment::NGPhysicalBoxFragment( ...@@ -22,6 +22,7 @@ NGPhysicalBoxFragment::NGPhysicalBoxFragment(
NGStyleVariant style_variant, NGStyleVariant style_variant,
NGPhysicalSize size, NGPhysicalSize size,
Vector<scoped_refptr<NGPhysicalFragment>>& children, Vector<scoped_refptr<NGPhysicalFragment>>& children,
const NGPhysicalBoxStrut& borders,
const NGPhysicalBoxStrut& padding, const NGPhysicalBoxStrut& padding,
const NGPhysicalOffsetRect& contents_ink_overflow, const NGPhysicalOffsetRect& contents_ink_overflow,
Vector<NGBaseline>& baselines, Vector<NGBaseline>& baselines,
...@@ -39,6 +40,7 @@ NGPhysicalBoxFragment::NGPhysicalBoxFragment( ...@@ -39,6 +40,7 @@ NGPhysicalBoxFragment::NGPhysicalBoxFragment(
contents_ink_overflow, contents_ink_overflow,
std::move(break_token)), std::move(break_token)),
baselines_(std::move(baselines)), baselines_(std::move(baselines)),
borders_(borders),
padding_(padding) { padding_(padding) {
DCHECK(baselines.IsEmpty()); // Ensure move semantics is used. DCHECK(baselines.IsEmpty()); // Ensure move semantics is used.
is_old_layout_root_ = is_old_layout_root; is_old_layout_root_ = is_old_layout_root;
...@@ -248,7 +250,7 @@ scoped_refptr<NGPhysicalFragment> NGPhysicalBoxFragment::CloneWithoutOffset() ...@@ -248,7 +250,7 @@ scoped_refptr<NGPhysicalFragment> NGPhysicalBoxFragment::CloneWithoutOffset()
scoped_refptr<NGPhysicalFragment> physical_fragment = scoped_refptr<NGPhysicalFragment> physical_fragment =
base::AdoptRef(new NGPhysicalBoxFragment( base::AdoptRef(new NGPhysicalBoxFragment(
layout_object_, Style(), StyleVariant(), size_, children_copy, layout_object_, Style(), StyleVariant(), size_, children_copy,
padding_, contents_ink_overflow_, baselines_copy, BoxType(), borders_, padding_, contents_ink_overflow_, baselines_copy, BoxType(),
is_old_layout_root_, border_edge_, break_token_)); is_old_layout_root_, border_edge_, break_token_));
return physical_fragment; return physical_fragment;
} }
......
...@@ -22,6 +22,7 @@ class CORE_EXPORT NGPhysicalBoxFragment final ...@@ -22,6 +22,7 @@ class CORE_EXPORT NGPhysicalBoxFragment final
NGStyleVariant style_variant, NGStyleVariant style_variant,
NGPhysicalSize size, NGPhysicalSize size,
Vector<scoped_refptr<NGPhysicalFragment>>& children, Vector<scoped_refptr<NGPhysicalFragment>>& children,
const NGPhysicalBoxStrut& border,
const NGPhysicalBoxStrut& padding, const NGPhysicalBoxStrut& padding,
const NGPhysicalOffsetRect& contents_ink_overflow, const NGPhysicalOffsetRect& contents_ink_overflow,
Vector<NGBaseline>& baselines, Vector<NGBaseline>& baselines,
...@@ -32,7 +33,10 @@ class CORE_EXPORT NGPhysicalBoxFragment final ...@@ -32,7 +33,10 @@ class CORE_EXPORT NGPhysicalBoxFragment final
const NGBaseline* Baseline(const NGBaselineRequest&) const; const NGBaseline* Baseline(const NGBaselineRequest&) const;
const NGPhysicalBoxStrut& Padding() const { return padding_; } const NGPhysicalBoxStrut Borders() const { return borders_; }
const NGPhysicalBoxStrut Padding() const { return padding_; }
NGPixelSnappedPhysicalBoxStrut PixelSnappedPadding() const { NGPixelSnappedPhysicalBoxStrut PixelSnappedPadding() const {
return padding_.SnapToDevicePixels(); return padding_.SnapToDevicePixels();
} }
...@@ -72,6 +76,7 @@ class CORE_EXPORT NGPhysicalBoxFragment final ...@@ -72,6 +76,7 @@ class CORE_EXPORT NGPhysicalBoxFragment final
private: private:
Vector<NGBaseline> baselines_; Vector<NGBaseline> baselines_;
NGPhysicalBoxStrut borders_;
NGPhysicalBoxStrut padding_; NGPhysicalBoxStrut padding_;
NGPhysicalOffsetRect descendant_outlines_; NGPhysicalOffsetRect descendant_outlines_;
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment