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(
// TODO(ikilpatrick): Determine what to do for a -ve available_inline_size.
// TODO(ikilpatrick): Change this so that it iterates over the
// shelves/opportunities instead for querying for all of them.
Vector<NGLayoutOpportunity> opportunities =
LayoutOpportunityVector opportunities =
AllLayoutOpportunities(offset, available_inline_size);
for (const auto& opportunity : opportunities) {
......@@ -495,11 +495,11 @@ NGLayoutOpportunity NGExclusionSpace::DerivedGeometry::FindLayoutOpportunity(
return NGLayoutOpportunity();
}
Vector<NGLayoutOpportunity>
LayoutOpportunityVector
NGExclusionSpace::DerivedGeometry::AllLayoutOpportunities(
const NGBfcOffset& offset,
const LayoutUnit available_inline_size) const {
Vector<NGLayoutOpportunity> opportunities;
LayoutOpportunityVector opportunities;
auto* shelves_it = shelves_.begin();
auto* opps_it = opportunities_.begin();
......
......@@ -17,6 +17,8 @@
namespace blink {
typedef Vector<NGLayoutOpportunity, 8> LayoutOpportunityVector;
// The exclusion space represents all of the exclusions within a block
// formatting context.
//
......@@ -53,7 +55,7 @@ class CORE_EXPORT NGExclusionSpace {
offset, available_inline_size, minimum_size);
}
Vector<NGLayoutOpportunity> AllLayoutOpportunities(
LayoutOpportunityVector AllLayoutOpportunities(
const NGBfcOffset& offset,
const LayoutUnit available_inline_size) const {
// If the area clears all floats, we can just return a single layout
......@@ -62,7 +64,7 @@ class CORE_EXPORT NGExclusionSpace {
NGBfcOffset end_offset(
offset.line_offset + available_inline_size.ClampNegativeToZero(),
LayoutUnit::Max());
return Vector<NGLayoutOpportunity>(
return LayoutOpportunityVector(
{NGLayoutOpportunity(NGBfcRect(offset, end_offset), nullptr)});
}
......@@ -198,7 +200,7 @@ class CORE_EXPORT NGExclusionSpace {
const LayoutUnit available_inline_size,
const NGLogicalSize& minimum_size) const;
Vector<NGLayoutOpportunity> AllLayoutOpportunities(
LayoutOpportunityVector AllLayoutOpportunities(
const NGBfcOffset& offset,
const LayoutUnit available_inline_size) const;
......
......@@ -19,10 +19,9 @@ namespace {
TEST(NGExclusionSpaceTest, Empty) {
NGExclusionSpace exclusion_space;
Vector<NGLayoutOpportunity> opportunites =
exclusion_space.AllLayoutOpportunities(
/* offset */ {LayoutUnit(), LayoutUnit()},
/* available_size */ LayoutUnit(100));
LayoutOpportunityVector opportunites = exclusion_space.AllLayoutOpportunities(
/* offset */ {LayoutUnit(), LayoutUnit()},
/* available_size */ LayoutUnit(100));
EXPECT_EQ(1u, opportunites.size());
TEST_OPPORTUNITY(opportunites[0], NGBfcOffset(LayoutUnit(), LayoutUnit()),
......@@ -55,10 +54,9 @@ TEST(NGExclusionSpaceTest, SingleExclusion) {
NGBfcOffset(LayoutUnit(60), LayoutUnit(90))),
EFloat::kLeft));
Vector<NGLayoutOpportunity> opportunites =
exclusion_space.AllLayoutOpportunities(
/* offset */ {LayoutUnit(), LayoutUnit()},
/* available_size */ LayoutUnit(100));
LayoutOpportunityVector opportunites = exclusion_space.AllLayoutOpportunities(
/* offset */ {LayoutUnit(), LayoutUnit()},
/* available_size */ LayoutUnit(100));
EXPECT_EQ(3u, opportunites.size());
TEST_OPPORTUNITY(opportunites[0], NGBfcOffset(LayoutUnit(), LayoutUnit()),
......@@ -124,10 +122,9 @@ TEST(NGExclusionSpaceTest, TwoExclusions) {
NGBfcOffset(LayoutUnit(400), LayoutUnit(150))),
EFloat::kRight));
Vector<NGLayoutOpportunity> opportunites =
exclusion_space.AllLayoutOpportunities(
/* offset */ {LayoutUnit(), LayoutUnit()},
/* available_size */ LayoutUnit(400));
LayoutOpportunityVector opportunites = exclusion_space.AllLayoutOpportunities(
/* offset */ {LayoutUnit(), LayoutUnit()},
/* available_size */ LayoutUnit(400));
EXPECT_EQ(4u, opportunites.size());
TEST_OPPORTUNITY(opportunites[0], NGBfcOffset(LayoutUnit(150), LayoutUnit()),
......@@ -175,10 +172,9 @@ TEST(NGExclusionSpaceTest, SolidEdges) {
NGBfcOffset(LayoutUnit(70), LayoutUnit(35))),
EFloat::kRight));
Vector<NGLayoutOpportunity> opportunites =
exclusion_space.AllLayoutOpportunities(
/* offset */ {LayoutUnit(), LayoutUnit()},
/* available_size */ LayoutUnit(80));
LayoutOpportunityVector opportunites = exclusion_space.AllLayoutOpportunities(
/* offset */ {LayoutUnit(), LayoutUnit()},
/* available_size */ LayoutUnit(80));
EXPECT_EQ(5u, opportunites.size());
TEST_OPPORTUNITY(opportunites[0], NGBfcOffset(LayoutUnit(20), LayoutUnit()),
......@@ -223,10 +219,9 @@ TEST(NGExclusionSpaceTest, OverlappingWithShelf) {
NGBfcOffset(LayoutUnit(90), LayoutUnit(35))),
EFloat::kRight));
Vector<NGLayoutOpportunity> opportunites =
exclusion_space.AllLayoutOpportunities(
/* offset */ {LayoutUnit(), LayoutUnit()},
/* available_size */ LayoutUnit(80));
LayoutOpportunityVector opportunites = exclusion_space.AllLayoutOpportunities(
/* offset */ {LayoutUnit(), LayoutUnit()},
/* available_size */ LayoutUnit(80));
EXPECT_EQ(4u, opportunites.size());
TEST_OPPORTUNITY(opportunites[0], NGBfcOffset(LayoutUnit(20), LayoutUnit()),
......@@ -271,10 +266,9 @@ TEST(NGExclusionSpaceTest, InsertBetweenShelves) {
NGBfcOffset(LayoutUnit(30), LayoutUnit(25))),
EFloat::kLeft));
Vector<NGLayoutOpportunity> opportunites =
exclusion_space.AllLayoutOpportunities(
/* offset */ {LayoutUnit(30), LayoutUnit(15)},
/* available_size */ LayoutUnit(30));
LayoutOpportunityVector opportunites = exclusion_space.AllLayoutOpportunities(
/* offset */ {LayoutUnit(30), LayoutUnit(15)},
/* available_size */ LayoutUnit(30));
// NOTE: This demonstrates a quirk when querying the exclusion space for
// opportunities. The exclusion space may return multiple exclusions of
......@@ -298,10 +292,9 @@ TEST(NGExclusionSpaceTest, ZeroInlineSizeOpportunity) {
NGBfcOffset(LayoutUnit(100), LayoutUnit(10))),
EFloat::kLeft));
Vector<NGLayoutOpportunity> opportunites =
exclusion_space.AllLayoutOpportunities(
/* offset */ {LayoutUnit(), LayoutUnit()},
/* available_size */ LayoutUnit(100));
LayoutOpportunityVector opportunites = exclusion_space.AllLayoutOpportunities(
/* offset */ {LayoutUnit(), LayoutUnit()},
/* available_size */ LayoutUnit(100));
EXPECT_EQ(2u, opportunites.size());
TEST_OPPORTUNITY(opportunites[0], NGBfcOffset(LayoutUnit(100), LayoutUnit()),
......@@ -318,10 +311,9 @@ TEST(NGExclusionSpaceTest, NegativeInlineSizeOpportunityLeft) {
NGBfcOffset(LayoutUnit(120), LayoutUnit(10))),
EFloat::kLeft));
Vector<NGLayoutOpportunity> opportunites =
exclusion_space.AllLayoutOpportunities(
/* offset */ {LayoutUnit(), LayoutUnit()},
/* available_size */ LayoutUnit(100));
LayoutOpportunityVector opportunites = exclusion_space.AllLayoutOpportunities(
/* offset */ {LayoutUnit(), LayoutUnit()},
/* available_size */ LayoutUnit(100));
EXPECT_EQ(2u, opportunites.size());
TEST_OPPORTUNITY(opportunites[0], NGBfcOffset(LayoutUnit(120), LayoutUnit()),
......@@ -338,10 +330,9 @@ TEST(NGExclusionSpaceTest, NegativeInlineSizeOpportunityRight) {
NGBfcOffset(LayoutUnit(100), LayoutUnit(10))),
EFloat::kRight));
Vector<NGLayoutOpportunity> opportunites =
exclusion_space.AllLayoutOpportunities(
/* offset */ {LayoutUnit(), LayoutUnit()},
/* available_size */ LayoutUnit(100));
LayoutOpportunityVector opportunites = exclusion_space.AllLayoutOpportunities(
/* offset */ {LayoutUnit(), LayoutUnit()},
/* available_size */ LayoutUnit(100));
EXPECT_EQ(2u, opportunites.size());
TEST_OPPORTUNITY(opportunites[0], NGBfcOffset(LayoutUnit(), LayoutUnit()),
......
......@@ -654,7 +654,7 @@ scoped_refptr<NGLayoutResult> NGInlineLayoutAlgorithm::Layout() {
// 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.
const Vector<NGLayoutOpportunity> opportunities =
const LayoutOpportunityVector opportunities =
initial_exclusion_space->AllLayoutOpportunities(
ConstraintSpace().BfcOffset(),
ConstraintSpace().AvailableSize().inline_size);
......
......@@ -972,7 +972,7 @@ NGBlockLayoutAlgorithm::LayoutNewFormattingContext(
(child_available_size_.inline_size - inline_margin.ClampNegativeToZero())
.ClampNegativeToZero();
Vector<NGLayoutOpportunity> opportunities =
LayoutOpportunityVector opportunities =
exclusion_space_->AllLayoutOpportunities(origin_offset, inline_size);
// 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