diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-10-06 12:48:11 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-10-13 09:33:43 +0000 |
commit | 7b5b123ac58f58ffde0f4f6e488bcd09aa4decd3 (patch) | |
tree | fa14ba0ca8d2683ba2efdabd246dc9b18a1229c6 /chromium/third_party/blink/renderer/core/layout/ng/ng_layout_result_caching_test.cc | |
parent | 79b4f909db1049fca459c07cca55af56a9b54fe3 (diff) | |
download | qtwebengine-chromium-7b5b123ac58f58ffde0f4f6e488bcd09aa4decd3.tar.gz |
BASELINE: Update Chromium to 84.0.4147.141
Change-Id: Ib85eb4cfa1cbe2b2b81e5022c8cad5c493969535
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/third_party/blink/renderer/core/layout/ng/ng_layout_result_caching_test.cc')
-rw-r--r-- | chromium/third_party/blink/renderer/core/layout/ng/ng_layout_result_caching_test.cc | 158 |
1 files changed, 154 insertions, 4 deletions
diff --git a/chromium/third_party/blink/renderer/core/layout/ng/ng_layout_result_caching_test.cc b/chromium/third_party/blink/renderer/core/layout/ng/ng_layout_result_caching_test.cc index 24df10ed942..573498622f7 100644 --- a/chromium/third_party/blink/renderer/core/layout/ng/ng_layout_result_caching_test.cc +++ b/chromium/third_party/blink/renderer/core/layout/ng/ng_layout_result_caching_test.cc @@ -1502,22 +1502,25 @@ TEST_F(NGLayoutResultCachingTest, MissIsFixedBlockSizeIndefinite) { EXPECT_EQ(result.get(), nullptr); } -TEST_F(NGLayoutResultCachingTest, HitFlexBoxMeasureAndLayout) { +TEST_F(NGLayoutResultCachingTest, HitColumnFlexBoxMeasureAndLayout) { ScopedLayoutNGFlexBoxForTest layout_ng_flex_box(true); SetBodyInnerHTML(R"HTML( <!DOCTYPE html> - <div style="display: flex; flex-direction: column; width: 100px; height: 100px;"> + <style> + .bfc { display: flex; flex-direction: column; width: 100px; height: 100px; } + </style> + <div class="bfc"> <div id="src1" style="flex-grow: 0;"> <div style="height: 50px;"></div> </div> </div> - <div style="display: flex; flex-direction: column; width: 100px; height: 100px;"> + <div class="bfc"> <div id="src2" style="flex-grow: 1;"> <div style="height: 50px;"></div> </div> </div> - <div style="display: flex; flex-direction: column; width: 100px; height: 100px;"> + <div class="bfc"> <div id="test1" style="flex-grow: 2;"> <div style="height: 50px;"></div> </div> @@ -1553,5 +1556,152 @@ TEST_F(NGLayoutResultCachingTest, HitFlexBoxMeasureAndLayout) { EXPECT_NE(result.get(), nullptr); } +TEST_F(NGLayoutResultCachingTest, HitRowFlexBoxMeasureAndLayout) { + ScopedLayoutNGFlexBoxForTest layout_ng_flex_box(true); + + SetBodyInnerHTML(R"HTML( + <!DOCTYPE html> + <style> + .bfc { display: flex; width: 100px; } + </style> + <div class="bfc"> + <div id="src1"> + <div style="height: 50px;"></div> + </div> + </div> + <div class="bfc"> + <div id="src2"> + <div style="height: 70px;"></div> + </div> + <div style="width: 0px; height: 100px;"></div> + </div> + <div class="bfc"> + <div id="test1"> + <div style="height: 50px;"></div> + </div> + <div style="width: 0px; height: 100px;"></div> + </div> + )HTML"); + + auto* test1 = To<LayoutBlockFlow>(GetLayoutObjectByElementId("test1")); + auto* src1 = To<LayoutBlockFlow>(GetLayoutObjectByElementId("src1")); + auto* src2 = To<LayoutBlockFlow>(GetLayoutObjectByElementId("src2")); + + NGLayoutCacheStatus cache_status; + base::Optional<NGFragmentGeometry> fragment_geometry; + + // "src1" only had one "measure" pass performed, and should hit the "measure" + // cache-slot for "test1". + NGConstraintSpace space = + src1->GetCachedLayoutResult()->GetConstraintSpaceForCaching(); + scoped_refptr<const NGLayoutResult> result = test1->CachedLayoutResult( + space, nullptr, nullptr, &fragment_geometry, &cache_status); + + EXPECT_EQ(space.CacheSlot(), NGCacheSlot::kMeasure); + EXPECT_EQ(cache_status, NGLayoutCacheStatus::kHit); + EXPECT_NE(result.get(), nullptr); + + // "src2" had both a "measure" and "layout" pass performed, and should hit + // the "layout" cache-slot for "test1". + space = src2->GetCachedLayoutResult()->GetConstraintSpaceForCaching(); + result = test1->CachedLayoutResult(space, nullptr, nullptr, + &fragment_geometry, &cache_status); + + EXPECT_EQ(space.CacheSlot(), NGCacheSlot::kLayout); + EXPECT_EQ(cache_status, NGLayoutCacheStatus::kHit); + EXPECT_NE(result.get(), nullptr); +} + +TEST_F(NGLayoutResultCachingTest, HitFlexLegacyImg) { + SetBodyInnerHTML(R"HTML( + <style> + .bfc { display: flex; flex-direction: column; width: 300px; } + .bfc > * { display: flex; } + </style> + <div class="bfc"> + <div id="test"> + <img /> + </div> + </div> + <div class="bfc" style="height: 200px;"> + <div id="src"> + <img /> + </div> + </div> + )HTML"); + + auto* test = To<LayoutBlock>(GetLayoutObjectByElementId("test")); + auto* src = To<LayoutBlock>(GetLayoutObjectByElementId("src")); + + NGLayoutCacheStatus cache_status; + base::Optional<NGFragmentGeometry> fragment_geometry; + const NGConstraintSpace& space = + src->GetCachedLayoutResult()->GetConstraintSpaceForCaching(); + scoped_refptr<const NGLayoutResult> result = test->CachedLayoutResult( + space, nullptr, nullptr, &fragment_geometry, &cache_status); + + EXPECT_EQ(cache_status, NGLayoutCacheStatus::kHit); + EXPECT_NE(result.get(), nullptr); +} + +TEST_F(NGLayoutResultCachingTest, HitFlexLegacyGrid) { + SetBodyInnerHTML(R"HTML( + <style> + .bfc { display: flex; flex-direction: column; width: 300px; } + .bfc > * { display: flex; } + .grid { display: grid; } + </style> + <div class="bfc"> + <div id="test"> + <div class="grid"></div> + </div> + </div> + <div class="bfc" style="height: 200px;"> + <div id="src"> + <div class="grid"></div> + </div> + </div> + )HTML"); + + auto* test = To<LayoutBlock>(GetLayoutObjectByElementId("test")); + auto* src = To<LayoutBlock>(GetLayoutObjectByElementId("src")); + + NGLayoutCacheStatus cache_status; + base::Optional<NGFragmentGeometry> fragment_geometry; + const NGConstraintSpace& space = + src->GetCachedLayoutResult()->GetConstraintSpaceForCaching(); + scoped_refptr<const NGLayoutResult> result = test->CachedLayoutResult( + space, nullptr, nullptr, &fragment_geometry, &cache_status); + + EXPECT_EQ(cache_status, NGLayoutCacheStatus::kHit); + EXPECT_NE(result.get(), nullptr); +} + +TEST_F(NGLayoutResultCachingTest, HitOrthogonalRoot) { + SetBodyInnerHTML(R"HTML( + <style> + span { display: inline-block; width: 20px; height: 250px } + </style> + <div id="target" style="display: flex;"> + <div style="writing-mode: vertical-rl; line-height: 0;"> + <span></span><span></span> + </div> + </div> + )HTML"); + + auto* target = To<LayoutBlock>(GetLayoutObjectByElementId("target")); + + NGLayoutCacheStatus cache_status; + base::Optional<NGFragmentGeometry> fragment_geometry; + const NGConstraintSpace& space = + target->GetCachedLayoutResult()->GetConstraintSpaceForCaching(); + scoped_refptr<const NGLayoutResult> result = target->CachedLayoutResult( + space, nullptr, nullptr, &fragment_geometry, &cache_status); + + // We should hit the cache using the same constraint space. + EXPECT_EQ(cache_status, NGLayoutCacheStatus::kHit); + EXPECT_NE(result.get(), nullptr); +} + } // namespace } // namespace blink |