Chromium Code Reviews| 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"); |
|
Xianzhu
2016/12/29 20:40:38
I would prefer inlined html to separate test file
wkorman
2016/12/29 20:59:15
But we already use similar test data fixture in ot
| |
| 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 |