| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |