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/paint/PaintPropertyTreeBuilderTest.h" | 5 #include "core/paint/PaintPropertyTreeBuilderTest.h" |
6 | 6 |
7 #include "core/html/HTMLIFrameElement.h" | 7 #include "core/html/HTMLIFrameElement.h" |
8 #include "core/layout/LayoutTreeAsText.h" | 8 #include "core/layout/LayoutTreeAsText.h" |
9 #include "core/paint/ObjectPaintProperties.h" | 9 #include "core/paint/ObjectPaintProperties.h" |
10 #include "core/paint/PaintPropertyTreePrinter.h" | 10 #include "core/paint/PaintPropertyTreePrinter.h" |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
50 if (RuntimeEnabledFeatures::rootLayerScrollingEnabled()) | 50 if (RuntimeEnabledFeatures::rootLayerScrollingEnabled()) |
51 return frameView->layoutView()->paintProperties()->scroll(); | 51 return frameView->layoutView()->paintProperties()->scroll(); |
52 return frameView->scroll(); | 52 return frameView->scroll(); |
53 } | 53 } |
54 | 54 |
55 LayoutPoint PaintPropertyTreeBuilderTest::paintOffset( | 55 LayoutPoint PaintPropertyTreeBuilderTest::paintOffset( |
56 const LayoutObject* object) { | 56 const LayoutObject* object) { |
57 return object->paintProperties()->localBorderBoxProperties()->paintOffset; | 57 return object->paintProperties()->localBorderBoxProperties()->paintOffset; |
58 } | 58 } |
59 | 59 |
| 60 const ObjectPaintProperties* |
| 61 PaintPropertyTreeBuilderTest::paintPropertiesForElement(const char* name) { |
| 62 return document().getElementById(name)->layoutObject()->paintProperties(); |
| 63 } |
| 64 |
60 void PaintPropertyTreeBuilderTest::SetUp() { | 65 void PaintPropertyTreeBuilderTest::SetUp() { |
61 Settings::setMockScrollbarsEnabled(true); | 66 Settings::setMockScrollbarsEnabled(true); |
62 | 67 |
63 RenderingTest::SetUp(); | 68 RenderingTest::SetUp(); |
64 enableCompositing(); | 69 enableCompositing(); |
65 } | 70 } |
66 | 71 |
67 void PaintPropertyTreeBuilderTest::TearDown() { | 72 void PaintPropertyTreeBuilderTest::TearDown() { |
68 RenderingTest::TearDown(); | 73 RenderingTest::TearDown(); |
69 | 74 |
(...skipping 344 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
414 const ObjectPaintProperties* perspectiveProperties = | 419 const ObjectPaintProperties* perspectiveProperties = |
415 perspective->layoutObject()->paintProperties(); | 420 perspective->layoutObject()->paintProperties(); |
416 | 421 |
417 EXPECT_TRUE(perspectiveProperties->transform()); | 422 EXPECT_TRUE(perspectiveProperties->transform()); |
418 EXPECT_TRUE( | 423 EXPECT_TRUE( |
419 perspectiveProperties->transform()->hasDirectCompositingReasons()); | 424 perspectiveProperties->transform()->hasDirectCompositingReasons()); |
420 } | 425 } |
421 | 426 |
422 TEST_P(PaintPropertyTreeBuilderTest, | 427 TEST_P(PaintPropertyTreeBuilderTest, |
423 TransformNodeWithActiveAnimationHasDirectCompositingReason) { | 428 TransformNodeWithActiveAnimationHasDirectCompositingReason) { |
424 setBodyInnerHTML( | 429 loadTestData("transform-animation.html"); |
425 "<style>" | 430 EXPECT_TRUE(paintPropertiesForElement("target") |
426 "@keyframes test {" | 431 ->transform() |
427 " 0% { transform: translate(1em, 1em) } " | 432 ->hasDirectCompositingReasons()); |
428 " 100% { transform: translate(2em, 2em) } " | |
429 "} " | |
430 ".animate { " | |
431 " animation-name: test; " | |
432 " animation-duration: 1s " | |
433 "}" | |
434 "</style>" | |
435 "<div id='target' class='animate'></div>"); | |
436 Element* target = document().getElementById("target"); | |
437 const ObjectPaintProperties* properties = | |
438 target->layoutObject()->paintProperties(); | |
439 EXPECT_TRUE(properties->transform()->hasDirectCompositingReasons()); | |
440 } | 433 } |
441 | 434 |
442 namespace { | |
443 | |
444 const char* kSimpleOpacityExampleHTML = | |
445 "<style>" | |
446 "div {" | |
447 " width: 100px;" | |
448 " height: 100px;" | |
449 " background-color: red;" | |
450 " animation-name: example;" | |
451 " animation-duration: 4s;" | |
452 "}" | |
453 "@keyframes example {" | |
454 " from { opacity: 0.0;}" | |
455 " to { opacity: 1.0;}" | |
456 "}" | |
457 "</style>" | |
458 "<div id='target'></div>"; | |
459 | |
460 } // namespace | |
461 | |
462 TEST_P(PaintPropertyTreeBuilderTest, | 435 TEST_P(PaintPropertyTreeBuilderTest, |
463 OpacityAnimationDoesNotCreateTransformNode) { | 436 OpacityAnimationDoesNotCreateTransformNode) { |
464 setBodyInnerHTML(kSimpleOpacityExampleHTML); | 437 loadTestData("opacity-animation.html"); |
465 Element* target = document().getElementById("target"); | 438 EXPECT_EQ(nullptr, paintPropertiesForElement("target")->transform()); |
466 const ObjectPaintProperties* properties = | |
467 target->layoutObject()->paintProperties(); | |
468 EXPECT_EQ(nullptr, properties->transform()); | |
469 } | 439 } |
470 | 440 |
471 TEST_P(PaintPropertyTreeBuilderTest, | 441 TEST_P(PaintPropertyTreeBuilderTest, |
472 EffectNodeWithActiveAnimationHasDirectCompositingReason) { | 442 EffectNodeWithActiveAnimationHasDirectCompositingReason) { |
473 setBodyInnerHTML(kSimpleOpacityExampleHTML); | 443 loadTestData("opacity-animation.html"); |
474 Element* target = document().getElementById("target"); | 444 EXPECT_TRUE(paintPropertiesForElement("target") |
475 const ObjectPaintProperties* properties = | 445 ->effect() |
476 target->layoutObject()->paintProperties(); | 446 ->hasDirectCompositingReasons()); |
477 EXPECT_TRUE(properties->effect()->hasDirectCompositingReasons()); | |
478 } | 447 } |
479 | 448 |
480 TEST_P(PaintPropertyTreeBuilderTest, WillChangeTransform) { | 449 TEST_P(PaintPropertyTreeBuilderTest, WillChangeTransform) { |
481 setBodyInnerHTML( | 450 setBodyInnerHTML( |
482 "<style> body { margin: 0 } </style>" | 451 "<style> body { margin: 0 } </style>" |
483 "<div id='transform' style='margin-left: 50px; margin-top: 100px;" | 452 "<div id='transform' style='margin-left: 50px; margin-top: 100px;" |
484 " width: 400px; height: 300px;" | 453 " width: 400px; height: 300px;" |
485 " will-change: transform'>" | 454 " will-change: transform'>" |
486 "</div>"); | 455 "</div>"); |
487 | 456 |
(...skipping 2699 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3187 | 3156 |
3188 toElement(ancestor->node()) | 3157 toElement(ancestor->node()) |
3189 ->setAttribute(HTMLNames::styleAttr, "position: static"); | 3158 ->setAttribute(HTMLNames::styleAttr, "position: static"); |
3190 document().view()->updateAllLifecyclePhases(); | 3159 document().view()->updateAllLifecyclePhases(); |
3191 EXPECT_NE(ancestor->paintProperties()->overflowClip(), | 3160 EXPECT_NE(ancestor->paintProperties()->overflowClip(), |
3192 descendant->paintProperties() | 3161 descendant->paintProperties() |
3193 ->localBorderBoxProperties() | 3162 ->localBorderBoxProperties() |
3194 ->propertyTreeState.clip()); | 3163 ->propertyTreeState.clip()); |
3195 } | 3164 } |
3196 | 3165 |
| 3166 TEST_P(PaintPropertyTreeBuilderTest, |
| 3167 TransformNodeNotAnimatedHasNoCompositorElementId) { |
| 3168 setBodyInnerHTML("<div id='target' style='transform: translateX(2em)'></div"); |
| 3169 const ObjectPaintProperties* properties = paintPropertiesForElement("target"); |
| 3170 EXPECT_TRUE(properties->transform()); |
| 3171 EXPECT_EQ(CompositorElementId(), |
| 3172 properties->transform()->compositorElementId()); |
| 3173 } |
| 3174 |
| 3175 TEST_P(PaintPropertyTreeBuilderTest, |
| 3176 EffectNodeNotAnimatedHasNoCompositorElementId) { |
| 3177 setBodyInnerHTML("<div id='target' style='opacity: 0.5'></div"); |
| 3178 const ObjectPaintProperties* properties = paintPropertiesForElement("target"); |
| 3179 EXPECT_TRUE(properties->effect()); |
| 3180 EXPECT_EQ(CompositorElementId(), properties->effect()->compositorElementId()); |
| 3181 } |
| 3182 |
| 3183 TEST_P(PaintPropertyTreeBuilderTest, |
| 3184 TransformNodeAnimatedHasCompositorElementId) { |
| 3185 loadTestData("transform-animation.html"); |
| 3186 const ObjectPaintProperties* properties = paintPropertiesForElement("target"); |
| 3187 EXPECT_TRUE(properties->transform()); |
| 3188 EXPECT_NE(CompositorElementId(), |
| 3189 properties->transform()->compositorElementId()); |
| 3190 } |
| 3191 |
| 3192 TEST_P(PaintPropertyTreeBuilderTest, EffectNodeAnimatedHasCompositorElementId) { |
| 3193 loadTestData("opacity-animation.html"); |
| 3194 const ObjectPaintProperties* properties = paintPropertiesForElement("target"); |
| 3195 EXPECT_TRUE(properties->effect()); |
| 3196 EXPECT_NE(CompositorElementId(), properties->effect()->compositorElementId()); |
| 3197 } |
| 3198 |
3197 } // namespace blink | 3199 } // namespace blink |
OLD | NEW |