Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 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/frame/FrameView.h" | 5 #include "core/frame/FrameView.h" |
| 6 #include "core/layout/LayoutTestHelper.h" | 6 #include "core/layout/LayoutTestHelper.h" |
| 7 #include "core/layout/LayoutView.h" | 7 #include "core/layout/LayoutView.h" |
| 8 #include "core/paint/PaintLayer.h" | |
| 8 #include "platform/testing/RuntimeEnabledFeaturesTestHelpers.h" | 9 #include "platform/testing/RuntimeEnabledFeaturesTestHelpers.h" |
| 9 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
| 10 | 11 |
| 11 namespace blink { | 12 namespace blink { |
| 12 | 13 |
| 13 namespace { | 14 namespace { |
| 14 | 15 |
| 15 class PaintInvalidationTest : public ::testing::WithParamInterface<bool>, | 16 class PaintInvalidationTest : public ::testing::WithParamInterface<bool>, |
| 16 private ScopedRootLayerScrollingForTest, | 17 private ScopedRootLayerScrollingForTest, |
| 17 public RenderingTest { | 18 public RenderingTest { |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 76 &childLayoutView->containerForPaintInvalidation()); | 77 &childLayoutView->containerForPaintInvalidation()); |
| 77 EXPECT_EQ(LayoutRect(10, 10, 100, 100), childLayoutView->visualRect()); | 78 EXPECT_EQ(LayoutRect(10, 10, 100, 100), childLayoutView->visualRect()); |
| 78 | 79 |
| 79 iframe->setAttribute(HTMLNames::styleAttr, "border: 20px solid blue"); | 80 iframe->setAttribute(HTMLNames::styleAttr, "border: 20px solid blue"); |
| 80 document().view()->updateAllLifecyclePhases(); | 81 document().view()->updateAllLifecyclePhases(); |
| 81 EXPECT_EQ(document().layoutView(), | 82 EXPECT_EQ(document().layoutView(), |
| 82 &childLayoutView->containerForPaintInvalidation()); | 83 &childLayoutView->containerForPaintInvalidation()); |
| 83 EXPECT_EQ(LayoutRect(30, 30, 100, 100), childLayoutView->visualRect()); | 84 EXPECT_EQ(LayoutRect(30, 30, 100, 100), childLayoutView->visualRect()); |
| 84 }; | 85 }; |
| 85 | 86 |
| 87 // This is a simlified test case for crbug.com/704182. | |
|
chrishtr
2017/04/04 16:26:05
nit: simplified
Xianzhu
2017/04/04 16:58:31
Done.
| |
| 88 TEST_P(PaintInvalidationTest, InvisibleTransformUnderFixedOnScroll) { | |
| 89 enableCompositing(); | |
| 90 setBodyInnerHTML( | |
| 91 "<div style='height: 2000px'></div>" | |
|
chrishtr
2017/04/04 16:26:05
This test doesn't seem to result in a user-visible
Xianzhu
2017/04/04 16:58:31
This test case ensures no paint time regression fo
| |
| 92 "<div id='fixed' style='position: fixed; top: 0; left: 0; width: 100px;" | |
| 93 " height: 100px; visibility: hidden'>" | |
| 94 " <div id='transform' style='will-change: transform'></div>" | |
| 95 "</div>"); | |
| 96 | |
| 97 auto& fixed = *document().getElementById("fixed"); | |
| 98 auto& transform = *document().getElementById("transform"); | |
| 99 const auto& fixedObject = *fixed.layoutObject(); | |
| 100 const auto& fixedLayer = *toLayoutBoxModelObject(fixedObject).layer(); | |
| 101 EXPECT_TRUE(fixedLayer.subtreeIsInvisible()); | |
| 102 | |
| 103 document().domWindow()->scrollTo(0, 100); | |
| 104 transform.setAttribute(HTMLNames::styleAttr, | |
| 105 "transform: translate3d(10px, 20px, 30px)"); | |
| 106 document().view()->updateLifecycleToCompositingCleanPlusScrolling(); | |
| 107 | |
| 108 EXPECT_TRUE(fixedLayer.subtreeIsInvisible()); | |
| 109 // We skip invisible layers when setting non-composited fixed-position | |
| 110 // needing paint invalidation when the frame is scrolled. | |
| 111 EXPECT_FALSE(fixedObject.shouldDoFullPaintInvalidation()); | |
| 112 // This was set when fixedObject is marked needsOverflowRecaldAfterStyleChange | |
| 113 // when child changed transform. | |
| 114 EXPECT_TRUE(fixedObject.mayNeedPaintInvalidation()); | |
| 115 | |
| 116 // We should not repaint anything because all contents are invisible. | |
| 117 document().view()->updateAllLifecyclePhasesExceptPaint(); | |
| 118 EXPECT_FALSE(fixedLayer.needsRepaint()); | |
| 119 document().view()->updateAllLifecyclePhases(); | |
| 120 } | |
| 121 | |
| 86 } // namespace | 122 } // namespace |
| 87 | 123 |
| 88 } // namespace blink | 124 } // namespace blink |
| OLD | NEW |