Commit a0d9b79a authored by Christian Biesinger's avatar Christian Biesinger Committed by Commit Bot

[layoutng] Preallocate some space in the layout opportunities vector

The number 8 for the initial capacity was picked at random.

This seems to help especially with the float perf tests.

Cq-Include-Trybots: luci.chromium.try:linux_layout_tests_layout_ng
Change-Id: Ie4217a459848e7269c791cf864f9aab163d7895d
Reviewed-on: https://chromium-review.googlesource.com/1216813Reviewed-by: default avatarEmil A Eklund <eae@chromium.org>
Commit-Queue: Christian Biesinger <cbiesinger@chromium.org>
Cr-Commit-Position: refs/heads/master@{#590095}
parent 70ce32d2
...@@ -476,7 +476,7 @@ NGLayoutOpportunity NGExclusionSpace::DerivedGeometry::FindLayoutOpportunity( ...@@ -476,7 +476,7 @@ NGLayoutOpportunity NGExclusionSpace::DerivedGeometry::FindLayoutOpportunity(
// TODO(ikilpatrick): Determine what to do for a -ve available_inline_size. // TODO(ikilpatrick): Determine what to do for a -ve available_inline_size.
// TODO(ikilpatrick): Change this so that it iterates over the // TODO(ikilpatrick): Change this so that it iterates over the
// shelves/opportunities instead for querying for all of them. // shelves/opportunities instead for querying for all of them.
Vector<NGLayoutOpportunity> opportunities = LayoutOpportunityVector opportunities =
AllLayoutOpportunities(offset, available_inline_size); AllLayoutOpportunities(offset, available_inline_size);
for (const auto& opportunity : opportunities) { for (const auto& opportunity : opportunities) {
...@@ -495,11 +495,11 @@ NGLayoutOpportunity NGExclusionSpace::DerivedGeometry::FindLayoutOpportunity( ...@@ -495,11 +495,11 @@ NGLayoutOpportunity NGExclusionSpace::DerivedGeometry::FindLayoutOpportunity(
return NGLayoutOpportunity(); return NGLayoutOpportunity();
} }
Vector<NGLayoutOpportunity> LayoutOpportunityVector
NGExclusionSpace::DerivedGeometry::AllLayoutOpportunities( NGExclusionSpace::DerivedGeometry::AllLayoutOpportunities(
const NGBfcOffset& offset, const NGBfcOffset& offset,
const LayoutUnit available_inline_size) const { const LayoutUnit available_inline_size) const {
Vector<NGLayoutOpportunity> opportunities; LayoutOpportunityVector opportunities;
auto* shelves_it = shelves_.begin(); auto* shelves_it = shelves_.begin();
auto* opps_it = opportunities_.begin(); auto* opps_it = opportunities_.begin();
......
...@@ -17,6 +17,8 @@ ...@@ -17,6 +17,8 @@
namespace blink { namespace blink {
typedef Vector<NGLayoutOpportunity, 8> LayoutOpportunityVector;
// The exclusion space represents all of the exclusions within a block // The exclusion space represents all of the exclusions within a block
// formatting context. // formatting context.
// //
...@@ -53,7 +55,7 @@ class CORE_EXPORT NGExclusionSpace { ...@@ -53,7 +55,7 @@ class CORE_EXPORT NGExclusionSpace {
offset, available_inline_size, minimum_size); offset, available_inline_size, minimum_size);
} }
Vector<NGLayoutOpportunity> AllLayoutOpportunities( LayoutOpportunityVector AllLayoutOpportunities(
const NGBfcOffset& offset, const NGBfcOffset& offset,
const LayoutUnit available_inline_size) const { const LayoutUnit available_inline_size) const {
// If the area clears all floats, we can just return a single layout // If the area clears all floats, we can just return a single layout
...@@ -62,7 +64,7 @@ class CORE_EXPORT NGExclusionSpace { ...@@ -62,7 +64,7 @@ class CORE_EXPORT NGExclusionSpace {
NGBfcOffset end_offset( NGBfcOffset end_offset(
offset.line_offset + available_inline_size.ClampNegativeToZero(), offset.line_offset + available_inline_size.ClampNegativeToZero(),
LayoutUnit::Max()); LayoutUnit::Max());
return Vector<NGLayoutOpportunity>( return LayoutOpportunityVector(
{NGLayoutOpportunity(NGBfcRect(offset, end_offset), nullptr)}); {NGLayoutOpportunity(NGBfcRect(offset, end_offset), nullptr)});
} }
...@@ -198,7 +200,7 @@ class CORE_EXPORT NGExclusionSpace { ...@@ -198,7 +200,7 @@ class CORE_EXPORT NGExclusionSpace {
const LayoutUnit available_inline_size, const LayoutUnit available_inline_size,
const NGLogicalSize& minimum_size) const; const NGLogicalSize& minimum_size) const;
Vector<NGLayoutOpportunity> AllLayoutOpportunities( LayoutOpportunityVector AllLayoutOpportunities(
const NGBfcOffset& offset, const NGBfcOffset& offset,
const LayoutUnit available_inline_size) const; const LayoutUnit available_inline_size) const;
......
...@@ -19,10 +19,9 @@ namespace { ...@@ -19,10 +19,9 @@ namespace {
TEST(NGExclusionSpaceTest, Empty) { TEST(NGExclusionSpaceTest, Empty) {
NGExclusionSpace exclusion_space; NGExclusionSpace exclusion_space;
Vector<NGLayoutOpportunity> opportunites = LayoutOpportunityVector opportunites = exclusion_space.AllLayoutOpportunities(
exclusion_space.AllLayoutOpportunities( /* offset */ {LayoutUnit(), LayoutUnit()},
/* offset */ {LayoutUnit(), LayoutUnit()}, /* available_size */ LayoutUnit(100));
/* available_size */ LayoutUnit(100));
EXPECT_EQ(1u, opportunites.size()); EXPECT_EQ(1u, opportunites.size());
TEST_OPPORTUNITY(opportunites[0], NGBfcOffset(LayoutUnit(), LayoutUnit()), TEST_OPPORTUNITY(opportunites[0], NGBfcOffset(LayoutUnit(), LayoutUnit()),
...@@ -55,10 +54,9 @@ TEST(NGExclusionSpaceTest, SingleExclusion) { ...@@ -55,10 +54,9 @@ TEST(NGExclusionSpaceTest, SingleExclusion) {
NGBfcOffset(LayoutUnit(60), LayoutUnit(90))), NGBfcOffset(LayoutUnit(60), LayoutUnit(90))),
EFloat::kLeft)); EFloat::kLeft));
Vector<NGLayoutOpportunity> opportunites = LayoutOpportunityVector opportunites = exclusion_space.AllLayoutOpportunities(
exclusion_space.AllLayoutOpportunities( /* offset */ {LayoutUnit(), LayoutUnit()},
/* offset */ {LayoutUnit(), LayoutUnit()}, /* available_size */ LayoutUnit(100));
/* available_size */ LayoutUnit(100));
EXPECT_EQ(3u, opportunites.size()); EXPECT_EQ(3u, opportunites.size());
TEST_OPPORTUNITY(opportunites[0], NGBfcOffset(LayoutUnit(), LayoutUnit()), TEST_OPPORTUNITY(opportunites[0], NGBfcOffset(LayoutUnit(), LayoutUnit()),
...@@ -124,10 +122,9 @@ TEST(NGExclusionSpaceTest, TwoExclusions) { ...@@ -124,10 +122,9 @@ TEST(NGExclusionSpaceTest, TwoExclusions) {
NGBfcOffset(LayoutUnit(400), LayoutUnit(150))), NGBfcOffset(LayoutUnit(400), LayoutUnit(150))),
EFloat::kRight)); EFloat::kRight));
Vector<NGLayoutOpportunity> opportunites = LayoutOpportunityVector opportunites = exclusion_space.AllLayoutOpportunities(
exclusion_space.AllLayoutOpportunities( /* offset */ {LayoutUnit(), LayoutUnit()},
/* offset */ {LayoutUnit(), LayoutUnit()}, /* available_size */ LayoutUnit(400));
/* available_size */ LayoutUnit(400));
EXPECT_EQ(4u, opportunites.size()); EXPECT_EQ(4u, opportunites.size());
TEST_OPPORTUNITY(opportunites[0], NGBfcOffset(LayoutUnit(150), LayoutUnit()), TEST_OPPORTUNITY(opportunites[0], NGBfcOffset(LayoutUnit(150), LayoutUnit()),
...@@ -175,10 +172,9 @@ TEST(NGExclusionSpaceTest, SolidEdges) { ...@@ -175,10 +172,9 @@ TEST(NGExclusionSpaceTest, SolidEdges) {
NGBfcOffset(LayoutUnit(70), LayoutUnit(35))), NGBfcOffset(LayoutUnit(70), LayoutUnit(35))),
EFloat::kRight)); EFloat::kRight));
Vector<NGLayoutOpportunity> opportunites = LayoutOpportunityVector opportunites = exclusion_space.AllLayoutOpportunities(
exclusion_space.AllLayoutOpportunities( /* offset */ {LayoutUnit(), LayoutUnit()},
/* offset */ {LayoutUnit(), LayoutUnit()}, /* available_size */ LayoutUnit(80));
/* available_size */ LayoutUnit(80));
EXPECT_EQ(5u, opportunites.size()); EXPECT_EQ(5u, opportunites.size());
TEST_OPPORTUNITY(opportunites[0], NGBfcOffset(LayoutUnit(20), LayoutUnit()), TEST_OPPORTUNITY(opportunites[0], NGBfcOffset(LayoutUnit(20), LayoutUnit()),
...@@ -223,10 +219,9 @@ TEST(NGExclusionSpaceTest, OverlappingWithShelf) { ...@@ -223,10 +219,9 @@ TEST(NGExclusionSpaceTest, OverlappingWithShelf) {
NGBfcOffset(LayoutUnit(90), LayoutUnit(35))), NGBfcOffset(LayoutUnit(90), LayoutUnit(35))),
EFloat::kRight)); EFloat::kRight));
Vector<NGLayoutOpportunity> opportunites = LayoutOpportunityVector opportunites = exclusion_space.AllLayoutOpportunities(
exclusion_space.AllLayoutOpportunities( /* offset */ {LayoutUnit(), LayoutUnit()},
/* offset */ {LayoutUnit(), LayoutUnit()}, /* available_size */ LayoutUnit(80));
/* available_size */ LayoutUnit(80));
EXPECT_EQ(4u, opportunites.size()); EXPECT_EQ(4u, opportunites.size());
TEST_OPPORTUNITY(opportunites[0], NGBfcOffset(LayoutUnit(20), LayoutUnit()), TEST_OPPORTUNITY(opportunites[0], NGBfcOffset(LayoutUnit(20), LayoutUnit()),
...@@ -271,10 +266,9 @@ TEST(NGExclusionSpaceTest, InsertBetweenShelves) { ...@@ -271,10 +266,9 @@ TEST(NGExclusionSpaceTest, InsertBetweenShelves) {
NGBfcOffset(LayoutUnit(30), LayoutUnit(25))), NGBfcOffset(LayoutUnit(30), LayoutUnit(25))),
EFloat::kLeft)); EFloat::kLeft));
Vector<NGLayoutOpportunity> opportunites = LayoutOpportunityVector opportunites = exclusion_space.AllLayoutOpportunities(
exclusion_space.AllLayoutOpportunities( /* offset */ {LayoutUnit(30), LayoutUnit(15)},
/* offset */ {LayoutUnit(30), LayoutUnit(15)}, /* available_size */ LayoutUnit(30));
/* available_size */ LayoutUnit(30));
// NOTE: This demonstrates a quirk when querying the exclusion space for // NOTE: This demonstrates a quirk when querying the exclusion space for
// opportunities. The exclusion space may return multiple exclusions of // opportunities. The exclusion space may return multiple exclusions of
...@@ -298,10 +292,9 @@ TEST(NGExclusionSpaceTest, ZeroInlineSizeOpportunity) { ...@@ -298,10 +292,9 @@ TEST(NGExclusionSpaceTest, ZeroInlineSizeOpportunity) {
NGBfcOffset(LayoutUnit(100), LayoutUnit(10))), NGBfcOffset(LayoutUnit(100), LayoutUnit(10))),
EFloat::kLeft)); EFloat::kLeft));
Vector<NGLayoutOpportunity> opportunites = LayoutOpportunityVector opportunites = exclusion_space.AllLayoutOpportunities(
exclusion_space.AllLayoutOpportunities( /* offset */ {LayoutUnit(), LayoutUnit()},
/* offset */ {LayoutUnit(), LayoutUnit()}, /* available_size */ LayoutUnit(100));
/* available_size */ LayoutUnit(100));
EXPECT_EQ(2u, opportunites.size()); EXPECT_EQ(2u, opportunites.size());
TEST_OPPORTUNITY(opportunites[0], NGBfcOffset(LayoutUnit(100), LayoutUnit()), TEST_OPPORTUNITY(opportunites[0], NGBfcOffset(LayoutUnit(100), LayoutUnit()),
...@@ -318,10 +311,9 @@ TEST(NGExclusionSpaceTest, NegativeInlineSizeOpportunityLeft) { ...@@ -318,10 +311,9 @@ TEST(NGExclusionSpaceTest, NegativeInlineSizeOpportunityLeft) {
NGBfcOffset(LayoutUnit(120), LayoutUnit(10))), NGBfcOffset(LayoutUnit(120), LayoutUnit(10))),
EFloat::kLeft)); EFloat::kLeft));
Vector<NGLayoutOpportunity> opportunites = LayoutOpportunityVector opportunites = exclusion_space.AllLayoutOpportunities(
exclusion_space.AllLayoutOpportunities( /* offset */ {LayoutUnit(), LayoutUnit()},
/* offset */ {LayoutUnit(), LayoutUnit()}, /* available_size */ LayoutUnit(100));
/* available_size */ LayoutUnit(100));
EXPECT_EQ(2u, opportunites.size()); EXPECT_EQ(2u, opportunites.size());
TEST_OPPORTUNITY(opportunites[0], NGBfcOffset(LayoutUnit(120), LayoutUnit()), TEST_OPPORTUNITY(opportunites[0], NGBfcOffset(LayoutUnit(120), LayoutUnit()),
...@@ -338,10 +330,9 @@ TEST(NGExclusionSpaceTest, NegativeInlineSizeOpportunityRight) { ...@@ -338,10 +330,9 @@ TEST(NGExclusionSpaceTest, NegativeInlineSizeOpportunityRight) {
NGBfcOffset(LayoutUnit(100), LayoutUnit(10))), NGBfcOffset(LayoutUnit(100), LayoutUnit(10))),
EFloat::kRight)); EFloat::kRight));
Vector<NGLayoutOpportunity> opportunites = LayoutOpportunityVector opportunites = exclusion_space.AllLayoutOpportunities(
exclusion_space.AllLayoutOpportunities( /* offset */ {LayoutUnit(), LayoutUnit()},
/* offset */ {LayoutUnit(), LayoutUnit()}, /* available_size */ LayoutUnit(100));
/* available_size */ LayoutUnit(100));
EXPECT_EQ(2u, opportunites.size()); EXPECT_EQ(2u, opportunites.size());
TEST_OPPORTUNITY(opportunites[0], NGBfcOffset(LayoutUnit(), LayoutUnit()), TEST_OPPORTUNITY(opportunites[0], NGBfcOffset(LayoutUnit(), LayoutUnit()),
......
...@@ -654,7 +654,7 @@ scoped_refptr<NGLayoutResult> NGInlineLayoutAlgorithm::Layout() { ...@@ -654,7 +654,7 @@ scoped_refptr<NGLayoutResult> NGInlineLayoutAlgorithm::Layout() {
// We query all the layout opportunities on the initial exclusion space up // We query all the layout opportunities on the initial exclusion space up
// front, as if the line breaker may add floats and change the opportunities. // front, as if the line breaker may add floats and change the opportunities.
const Vector<NGLayoutOpportunity> opportunities = const LayoutOpportunityVector opportunities =
initial_exclusion_space->AllLayoutOpportunities( initial_exclusion_space->AllLayoutOpportunities(
ConstraintSpace().BfcOffset(), ConstraintSpace().BfcOffset(),
ConstraintSpace().AvailableSize().inline_size); ConstraintSpace().AvailableSize().inline_size);
......
...@@ -972,7 +972,7 @@ NGBlockLayoutAlgorithm::LayoutNewFormattingContext( ...@@ -972,7 +972,7 @@ NGBlockLayoutAlgorithm::LayoutNewFormattingContext(
(child_available_size_.inline_size - inline_margin.ClampNegativeToZero()) (child_available_size_.inline_size - inline_margin.ClampNegativeToZero())
.ClampNegativeToZero(); .ClampNegativeToZero();
Vector<NGLayoutOpportunity> opportunities = LayoutOpportunityVector opportunities =
exclusion_space_->AllLayoutOpportunities(origin_offset, inline_size); exclusion_space_->AllLayoutOpportunities(origin_offset, inline_size);
// We should always have at least one opportunity. // We should always have at least one opportunity.
......
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