| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2012 Google Inc. All rights reserved. | 2 * Copyright (C) 2012 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 1034 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1045 web_scroll_layer->MainThreadScrollingReasons() & | 1045 web_scroll_layer->MainThreadScrollingReasons() & |
| 1046 MainThreadScrollingReason::kHasNonLayerViewportConstrainedObjects); | 1046 MainThreadScrollingReason::kHasNonLayerViewportConstrainedObjects); |
| 1047 } | 1047 } |
| 1048 } | 1048 } |
| 1049 | 1049 |
| 1050 class NonCompositedMainThreadScrollingReasonTest | 1050 class NonCompositedMainThreadScrollingReasonTest |
| 1051 : public ScrollingCoordinatorTest { | 1051 : public ScrollingCoordinatorTest { |
| 1052 static const uint32_t kLCDTextRelatedReasons = | 1052 static const uint32_t kLCDTextRelatedReasons = |
| 1053 MainThreadScrollingReason::kHasOpacityAndLCDText | | 1053 MainThreadScrollingReason::kHasOpacityAndLCDText | |
| 1054 MainThreadScrollingReason::kHasTransformAndLCDText | | 1054 MainThreadScrollingReason::kHasTransformAndLCDText | |
| 1055 MainThreadScrollingReason::kBackgroundNotOpaqueInRectAndLCDText; | 1055 MainThreadScrollingReason::kBackgroundNotOpaqueInRectAndLCDText | |
| 1056 MainThreadScrollingReason::kIsNotStackingContextAndLCDText; |
| 1056 | 1057 |
| 1057 protected: | 1058 protected: |
| 1058 NonCompositedMainThreadScrollingReasonTest() { | 1059 NonCompositedMainThreadScrollingReasonTest() { |
| 1059 RegisterMockedHttpURLLoad("two_scrollable_area.html"); | 1060 RegisterMockedHttpURLLoad("two_scrollable_area.html"); |
| 1060 NavigateTo(base_url_ + "two_scrollable_area.html"); | 1061 NavigateTo(base_url_ + "two_scrollable_area.html"); |
| 1061 } | 1062 } |
| 1062 void TestNonCompositedReasons(const std::string& target, | 1063 void TestNonCompositedReasons(const std::string& target, |
| 1063 const uint32_t reason) { | 1064 const uint32_t reason) { |
| 1064 GetWebViewImpl()->GetSettings()->SetPreferCompositingToLCDTextEnabled( | 1065 GetWebViewImpl()->GetSettings()->SetPreferCompositingToLCDTextEnabled( |
| 1065 false); | 1066 false); |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1200 TestNonCompositedReasons("transparent border-radius", | 1201 TestNonCompositedReasons("transparent border-radius", |
| 1201 MainThreadScrollingReason::kHasOpacityAndLCDText | | 1202 MainThreadScrollingReason::kHasOpacityAndLCDText | |
| 1202 MainThreadScrollingReason::kHasBorderRadius); | 1203 MainThreadScrollingReason::kHasBorderRadius); |
| 1203 } | 1204 } |
| 1204 | 1205 |
| 1205 TEST_P(NonCompositedMainThreadScrollingReasonTest, BoxShadowTest) { | 1206 TEST_P(NonCompositedMainThreadScrollingReasonTest, BoxShadowTest) { |
| 1206 TestNonCompositedReasons( | 1207 TestNonCompositedReasons( |
| 1207 "box-shadow", MainThreadScrollingReason::kHasBoxShadowFromNonRootLayer); | 1208 "box-shadow", MainThreadScrollingReason::kHasBoxShadowFromNonRootLayer); |
| 1208 } | 1209 } |
| 1209 | 1210 |
| 1211 TEST_P(NonCompositedMainThreadScrollingReasonTest, StackingContextTest) { |
| 1212 GetWebViewImpl()->GetSettings()->SetPreferCompositingToLCDTextEnabled(false); |
| 1213 |
| 1214 Document* document = GetFrame()->GetDocument(); |
| 1215 Element* container = document->getElementById("scroller1"); |
| 1216 ASSERT_TRUE(container); |
| 1217 |
| 1218 ForceFullCompositingUpdate(); |
| 1219 |
| 1220 // If a scroller contains all its children, it's not a stacking context. |
| 1221 PaintLayerScrollableArea* scrollable_area = |
| 1222 ToLayoutBoxModelObject(container->GetLayoutObject())->GetScrollableArea(); |
| 1223 ASSERT_TRUE(scrollable_area); |
| 1224 EXPECT_TRUE(scrollable_area->GetNonCompositedMainThreadScrollingReasons() & |
| 1225 MainThreadScrollingReason::kIsNotStackingContextAndLCDText); |
| 1226 |
| 1227 GetWebViewImpl()->GetSettings()->SetPreferCompositingToLCDTextEnabled(true); |
| 1228 ForceFullCompositingUpdate(); |
| 1229 EXPECT_FALSE(scrollable_area->GetNonCompositedMainThreadScrollingReasons() & |
| 1230 MainThreadScrollingReason::kIsNotStackingContextAndLCDText); |
| 1231 GetWebViewImpl()->GetSettings()->SetPreferCompositingToLCDTextEnabled(false); |
| 1232 |
| 1233 // Adding "contain: paint" to force a stacking context leads to promotion. |
| 1234 container->setAttribute("style", "contain: paint", ASSERT_NO_EXCEPTION); |
| 1235 ForceFullCompositingUpdate(); |
| 1236 |
| 1237 EXPECT_FALSE(scrollable_area->GetNonCompositedMainThreadScrollingReasons()); |
| 1238 } |
| 1239 |
| 1210 TEST_P(NonCompositedMainThreadScrollingReasonTest, | 1240 TEST_P(NonCompositedMainThreadScrollingReasonTest, |
| 1211 CompositedWithLCDTextRelatedReasonsTest) { | 1241 CompositedWithLCDTextRelatedReasonsTest) { |
| 1212 // With "will-change:transform" we composite elements with | 1242 // With "will-change:transform" we composite elements with |
| 1213 // LCDTextRelatedReasons only. For elements with other | 1243 // LCDTextRelatedReasons only. For elements with other |
| 1214 // NonCompositedReasons, we don't create scrollingLayer for their | 1244 // NonCompositedReasons, we don't create scrollingLayer for their |
| 1215 // CompositedLayerMapping therefore they don't get composited. | 1245 // CompositedLayerMapping therefore they don't get composited. |
| 1216 GetWebViewImpl()->GetSettings()->SetPreferCompositingToLCDTextEnabled(false); | 1246 GetWebViewImpl()->GetSettings()->SetPreferCompositingToLCDTextEnabled(false); |
| 1217 Document* document = GetFrame()->GetDocument(); | 1247 Document* document = GetFrame()->GetDocument(); |
| 1218 Element* container = document->getElementById("scroller1"); | 1248 Element* container = document->getElementById("scroller1"); |
| 1219 ASSERT_TRUE(container); | 1249 ASSERT_TRUE(container); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1233 ForceFullCompositingUpdate(); | 1263 ForceFullCompositingUpdate(); |
| 1234 PaintLayerScrollableArea* scrollable_area2 = | 1264 PaintLayerScrollableArea* scrollable_area2 = |
| 1235 ToLayoutBoxModelObject(container2->GetLayoutObject()) | 1265 ToLayoutBoxModelObject(container2->GetLayoutObject()) |
| 1236 ->GetScrollableArea(); | 1266 ->GetScrollableArea(); |
| 1237 ASSERT_TRUE(scrollable_area2); | 1267 ASSERT_TRUE(scrollable_area2); |
| 1238 EXPECT_TRUE(scrollable_area2->GetNonCompositedMainThreadScrollingReasons() & | 1268 EXPECT_TRUE(scrollable_area2->GetNonCompositedMainThreadScrollingReasons() & |
| 1239 MainThreadScrollingReason::kHasBorderRadius); | 1269 MainThreadScrollingReason::kHasBorderRadius); |
| 1240 } | 1270 } |
| 1241 | 1271 |
| 1242 } // namespace blink | 1272 } // namespace blink |
| OLD | NEW |