Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(152)

Side by Side Diff: third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.cpp

Issue 2353843002: Add position sticky main thread scrolling reason [spv2] (Closed)
Patch Set: Embrace the rebase Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "core/layout/LayoutTestHelper.h" 5 #include "core/layout/LayoutTestHelper.h"
6 #include "core/layout/LayoutTreeAsText.h" 6 #include "core/layout/LayoutTreeAsText.h"
7 #include "core/layout/api/LayoutViewItem.h" 7 #include "core/layout/api/LayoutViewItem.h"
8 #include "core/paint/ObjectPaintProperties.h" 8 #include "core/paint/ObjectPaintProperties.h"
9 #include "core/paint/PaintPropertyTreePrinter.h" 9 #include "core/paint/PaintPropertyTreePrinter.h"
10 #include "platform/graphics/paint/GeometryMapper.h" 10 #include "platform/graphics/paint/GeometryMapper.h"
(...skipping 2020 matching lines...) Expand 10 before | Expand all | Expand 10 after
2031 EXPECT_FALSE(frameScroll()->hasMainThreadScrollingReasons(MainThreadScrollin gReason::kThreadedScrollingDisabled)); 2031 EXPECT_FALSE(frameScroll()->hasMainThreadScrollingReasons(MainThreadScrollin gReason::kThreadedScrollingDisabled));
2032 EXPECT_FALSE(overflowA->layoutObject()->objectPaintProperties()->scroll()->h asMainThreadScrollingReasons(MainThreadScrollingReason::kThreadedScrollingDisabl ed)); 2032 EXPECT_FALSE(overflowA->layoutObject()->objectPaintProperties()->scroll()->h asMainThreadScrollingReasons(MainThreadScrollingReason::kThreadedScrollingDisabl ed));
2033 2033
2034 document().settings()->setThreadedScrollingEnabled(false); 2034 document().settings()->setThreadedScrollingEnabled(false);
2035 document().view()->updateAllLifecyclePhases(); 2035 document().view()->updateAllLifecyclePhases();
2036 2036
2037 EXPECT_TRUE(frameScroll()->hasMainThreadScrollingReasons(MainThreadScrolling Reason::kThreadedScrollingDisabled)); 2037 EXPECT_TRUE(frameScroll()->hasMainThreadScrollingReasons(MainThreadScrolling Reason::kThreadedScrollingDisabled));
2038 EXPECT_TRUE(overflowA->layoutObject()->objectPaintProperties()->scroll()->ha sMainThreadScrollingReasons(MainThreadScrollingReason::kThreadedScrollingDisable d)); 2038 EXPECT_TRUE(overflowA->layoutObject()->objectPaintProperties()->scroll()->ha sMainThreadScrollingReasons(MainThreadScrollingReason::kThreadedScrollingDisable d));
2039 } 2039 }
2040 2040
2041 TEST_P(PaintPropertyTreeBuilderTest, MainThreadScrollReasonsWithNestedScrollers) 2041 TEST_P(PaintPropertyTreeBuilderTest, BackgroundAttachmentFixedMainThreadScrollRe asonsWithNestedScrollers)
2042 { 2042 {
2043 setBodyInnerHTML( 2043 setBodyInnerHTML(
2044 "<style>" 2044 "<style>"
2045 " #overflowA {" 2045 " #overflowA {"
2046 " position: absolute;" 2046 " position: absolute;"
2047 " overflow: scroll;" 2047 " overflow: scroll;"
2048 " width: 20px;" 2048 " width: 20px;"
2049 " height: 20px;" 2049 " height: 20px;"
2050 " }" 2050 " }"
2051 " #overflowB {" 2051 " #overflowB {"
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
2084 EXPECT_FALSE(overflowB->layoutObject()->objectPaintProperties()->scroll()->h asMainThreadScrollingReasons(MainThreadScrollingReason::kHasBackgroundAttachment FixedObjects)); 2084 EXPECT_FALSE(overflowB->layoutObject()->objectPaintProperties()->scroll()->h asMainThreadScrollingReasons(MainThreadScrollingReason::kHasBackgroundAttachment FixedObjects));
2085 2085
2086 // Adding a main thread scrolling reason should update the entire tree. 2086 // Adding a main thread scrolling reason should update the entire tree.
2087 overflowB->setAttribute(HTMLNames::classAttr, "backgroundAttachmentFixed"); 2087 overflowB->setAttribute(HTMLNames::classAttr, "backgroundAttachmentFixed");
2088 document().view()->updateAllLifecyclePhases(); 2088 document().view()->updateAllLifecyclePhases();
2089 EXPECT_TRUE(frameScroll()->hasMainThreadScrollingReasons(MainThreadScrolling Reason::kHasBackgroundAttachmentFixedObjects)); 2089 EXPECT_TRUE(frameScroll()->hasMainThreadScrollingReasons(MainThreadScrolling Reason::kHasBackgroundAttachmentFixedObjects));
2090 EXPECT_TRUE(overflowA->layoutObject()->objectPaintProperties()->scroll()->ha sMainThreadScrollingReasons(MainThreadScrollingReason::kHasBackgroundAttachmentF ixedObjects)); 2090 EXPECT_TRUE(overflowA->layoutObject()->objectPaintProperties()->scroll()->ha sMainThreadScrollingReasons(MainThreadScrollingReason::kHasBackgroundAttachmentF ixedObjects));
2091 EXPECT_FALSE(overflowB->layoutObject()->objectPaintProperties()->scroll()->h asMainThreadScrollingReasons(MainThreadScrollingReason::kHasBackgroundAttachment FixedObjects)); 2091 EXPECT_FALSE(overflowB->layoutObject()->objectPaintProperties()->scroll()->h asMainThreadScrollingReasons(MainThreadScrollingReason::kHasBackgroundAttachment FixedObjects));
2092 } 2092 }
2093 2093
2094 TEST_P(PaintPropertyTreeBuilderTest, MainThreadScrollReasonsWithFixedScroller) 2094 TEST_P(PaintPropertyTreeBuilderTest, BackgroundAttachmentFixedMainThreadScrollRe asonsWithFixedScroller)
2095 { 2095 {
2096 setBodyInnerHTML( 2096 setBodyInnerHTML(
2097 "<style>" 2097 "<style>"
2098 " #overflowA {" 2098 " #overflowA {"
2099 " position: absolute;" 2099 " position: absolute;"
2100 " overflow: scroll;" 2100 " overflow: scroll;"
2101 " width: 20px;" 2101 " width: 20px;"
2102 " height: 20px;" 2102 " height: 20px;"
2103 " }" 2103 " }"
2104 " #overflowB {" 2104 " #overflowB {"
(...skipping 25 matching lines...) Expand all
2130 EXPECT_FALSE(overflowB->layoutObject()->objectPaintProperties()->scroll()->h asMainThreadScrollingReasons(MainThreadScrollingReason::kHasBackgroundAttachment FixedObjects)); 2130 EXPECT_FALSE(overflowB->layoutObject()->objectPaintProperties()->scroll()->h asMainThreadScrollingReasons(MainThreadScrollingReason::kHasBackgroundAttachment FixedObjects));
2131 2131
2132 // Removing a main thread scrolling reason should update the entire tree. 2132 // Removing a main thread scrolling reason should update the entire tree.
2133 overflowB->removeAttribute("class"); 2133 overflowB->removeAttribute("class");
2134 document().view()->updateAllLifecyclePhases(); 2134 document().view()->updateAllLifecyclePhases();
2135 EXPECT_FALSE(rootScroll()->hasMainThreadScrollingReasons(MainThreadScrolling Reason::kHasBackgroundAttachmentFixedObjects)); 2135 EXPECT_FALSE(rootScroll()->hasMainThreadScrollingReasons(MainThreadScrolling Reason::kHasBackgroundAttachmentFixedObjects));
2136 EXPECT_FALSE(overflowA->layoutObject()->objectPaintProperties()->scroll()->h asMainThreadScrollingReasons(MainThreadScrollingReason::kHasBackgroundAttachment FixedObjects)); 2136 EXPECT_FALSE(overflowA->layoutObject()->objectPaintProperties()->scroll()->h asMainThreadScrollingReasons(MainThreadScrollingReason::kHasBackgroundAttachment FixedObjects));
2137 EXPECT_FALSE(overflowB->layoutObject()->objectPaintProperties()->scroll()->h asMainThreadScrollingReasons(MainThreadScrollingReason::kHasBackgroundAttachment FixedObjects)); 2137 EXPECT_FALSE(overflowB->layoutObject()->objectPaintProperties()->scroll()->h asMainThreadScrollingReasons(MainThreadScrollingReason::kHasBackgroundAttachment FixedObjects));
2138 } 2138 }
2139 2139
2140 TEST_P(PaintPropertyTreeBuilderTest, PositionStickyMainThreadScrollReasonsWithNe stedScrollers)
2141 {
2142 setBodyInnerHTML(
2143 "<style>"
2144 " #overflowA {"
2145 " overflow: scroll;"
2146 " width: 20px;"
2147 " height: 20px;"
2148 " }"
2149 " #overflowB {"
2150 " overflow: scroll;"
2151 " width: 5px;"
2152 " height: 3px;"
2153 " }"
2154 " .positionSticky {"
2155 " position: sticky;"
2156 " top: 0;"
2157 " left: 0;"
2158 " }"
2159 " .forceScroll {"
2160 " height: 4000px;"
2161 " }"
2162 "</style>"
2163 "<div id='overflowA'>"
2164 " <div id='overflowB' class='positionSticky'>"
2165 " <div id='overflowBChild'></div>"
2166 " <div class='forceScroll'></div>"
2167 " </div>"
2168 " <div class='forceScroll'></div>"
2169 "</div>"
2170 "<div class='forceScroll'></div>");
2171 Element* overflowA = document().getElementById("overflowA");
2172 Element* overflowB = document().getElementById("overflowB");
2173 Element* overflowBChild = document().getElementById("overflowBChild");
2174
2175 EXPECT_TRUE(frameScroll()->hasMainThreadScrollingReasons(MainThreadScrolling Reason::kHasStickyPositionObjects));
2176 EXPECT_TRUE(overflowA->layoutObject()->objectPaintProperties()->scroll()->ha sMainThreadScrollingReasons(MainThreadScrollingReason::kHasStickyPositionObjects ));
2177 EXPECT_FALSE(overflowB->layoutObject()->objectPaintProperties()->scroll()->h asMainThreadScrollingReasons(MainThreadScrollingReason::kHasStickyPositionObject s));
2178 EXPECT_TRUE(!overflowBChild->layoutObject()->objectPaintProperties() || !ove rflowBChild->layoutObject()->objectPaintProperties()->scroll());
2179
2180 // Removing a main thread scrolling reason should update the entire tree.
2181 overflowB->removeAttribute("class");
2182 document().view()->updateAllLifecyclePhases();
2183 EXPECT_FALSE(frameScroll()->hasMainThreadScrollingReasons(MainThreadScrollin gReason::kHasStickyPositionObjects));
2184 EXPECT_FALSE(overflowA->layoutObject()->objectPaintProperties()->scroll()->h asMainThreadScrollingReasons(MainThreadScrollingReason::kHasStickyPositionObject s));
2185 EXPECT_FALSE(overflowB->layoutObject()->objectPaintProperties()->scroll()->h asMainThreadScrollingReasons(MainThreadScrollingReason::kHasStickyPositionObject s));
2186 EXPECT_TRUE(!overflowBChild->layoutObject()->objectPaintProperties() || !ove rflowBChild->layoutObject()->objectPaintProperties()->scroll());
2187
2188 // Adding a main thread scrolling reason should update the entire tree.
2189 overflowBChild->setAttribute(HTMLNames::classAttr, "positionSticky");
2190 document().view()->updateAllLifecyclePhases();
2191 EXPECT_TRUE(frameScroll()->hasMainThreadScrollingReasons(MainThreadScrolling Reason::kHasStickyPositionObjects));
2192 EXPECT_TRUE(overflowA->layoutObject()->objectPaintProperties()->scroll()->ha sMainThreadScrollingReasons(MainThreadScrollingReason::kHasStickyPositionObjects ));
2193 EXPECT_TRUE(overflowB->layoutObject()->objectPaintProperties()->scroll()->ha sMainThreadScrollingReasons(MainThreadScrollingReason::kHasStickyPositionObjects ));
2194 EXPECT_TRUE(!overflowBChild->layoutObject()->objectPaintProperties() || !ove rflowBChild->layoutObject()->objectPaintProperties()->scroll());
2195 }
2196
2197 TEST_P(PaintPropertyTreeBuilderTest, MainThreadScrollReasonsWithNestedPositionSt ickyScrollers)
2198 {
2199 setBodyInnerHTML(
2200 "<style>"
2201 " #overflowA {"
2202 " overflow: scroll;"
2203 " width: 20px;"
2204 " height: 20px;"
2205 " }"
2206 " #overflowB {"
2207 " overflow: scroll;"
2208 " width: 5px;"
2209 " height: 3px;"
2210 " }"
2211 " .positionSticky {"
2212 " position: sticky;"
2213 " top: 0;"
2214 " left: 0;"
2215 " }"
2216 " .forceScroll {"
2217 " height: 4000px;"
2218 " }"
2219 "</style>"
2220 "<div id='overflowA' class='positionSticky'>"
2221 " <div id='overflowB'>"
2222 " <div class='forceScroll'></div>"
2223 " </div>"
2224 " <div class='forceScroll'></div>"
2225 "</div>"
2226 "<div class='forceScroll'></div>");
2227 Element* overflowA = document().getElementById("overflowA");
2228 Element* overflowB = document().getElementById("overflowB");
2229
2230 EXPECT_TRUE(frameScroll()->hasMainThreadScrollingReasons(MainThreadScrolling Reason::kHasStickyPositionObjects));
2231 EXPECT_FALSE(overflowA->layoutObject()->objectPaintProperties()->scroll()->h asMainThreadScrollingReasons(MainThreadScrollingReason::kHasStickyPositionObject s));
2232 EXPECT_FALSE(overflowB->layoutObject()->objectPaintProperties()->scroll()->h asMainThreadScrollingReasons(MainThreadScrollingReason::kHasStickyPositionObject s));
2233 }
2234
2140 } // namespace blink 2235 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698