summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/core/layout/ng/ng_layout_result_caching_test.cc
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2020-10-06 12:48:11 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2020-10-13 09:33:43 +0000
commit7b5b123ac58f58ffde0f4f6e488bcd09aa4decd3 (patch)
treefa14ba0ca8d2683ba2efdabd246dc9b18a1229c6 /chromium/third_party/blink/renderer/core/layout/ng/ng_layout_result_caching_test.cc
parent79b4f909db1049fca459c07cca55af56a9b54fe3 (diff)
downloadqtwebengine-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.cc158
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