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/LayoutView.h" | 6 #include "core/layout/LayoutView.h" |
7 #include "core/layout/PaintInvalidationState.h" | 7 #include "core/layout/PaintInvalidationState.h" |
8 #include "core/paint/PaintLayer.h" | 8 #include "core/paint/PaintLayer.h" |
9 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
10 | 10 |
11 namespace blink { | 11 namespace blink { |
12 | 12 |
13 class VisualRectMappingTest : public RenderingTest { | 13 class VisualRectMappingTest : public RenderingTest { |
14 public: | 14 public: |
15 VisualRectMappingTest() | 15 VisualRectMappingTest() |
16 : RenderingTest(SingleChildFrameLoaderClient::create()) {} | 16 : RenderingTest(SingleChildFrameLoaderClient::create()) {} |
17 protected: | 17 protected: |
18 LayoutView& layoutView() const { return *document().layoutView(); } | 18 LayoutView& layoutView() const { return *document().layoutView(); } |
19 | 19 |
20 void checkPaintInvalidationStateRectMapping(const LayoutRect& expectedRect,
const LayoutRect& rect, const LayoutObject& object, const LayoutView& layoutView
, const LayoutObject& paintInvalidationContainer) | 20 void checkPaintInvalidationStateRectMapping(const LayoutRect& expectedRect,
const LayoutRect& rect, const LayoutObject& object, const LayoutView& layoutView
, const LayoutObject& paintInvalidationContainer) |
21 { | 21 { |
22 Vector<const LayoutObject*> ancestors; | 22 Vector<const LayoutObject*> ancestors; |
23 for (const LayoutObject* ancestor = &object; ancestor != layoutView; anc
estor = ancestor->parentCrossingFrameBoundaries()) | 23 for (const LayoutObject* ancestor = &object; ancestor != layoutView; anc
estor = ancestor->parentCrossingFrameBoundaries()) |
24 ancestors.append(ancestor); | 24 ancestors.append(ancestor); |
25 | 25 |
26 Vector<Optional<PaintInvalidationState>> paintInvalidationStates(ancesto
rs.size() + 1); | 26 Vector<Optional<PaintInvalidationState>> paintInvalidationStates(ancesto
rs.size() + 1); |
27 Vector<LayoutObject*> pendingDelayedPaintInvalidations; | 27 Vector<LayoutObject*> pendingDelayedPaintInvalidations; |
28 paintInvalidationStates[0].emplace(layoutView, pendingDelayedPaintInvali
dations); | 28 paintInvalidationStates[0].emplace(layoutView, pendingDelayedPaintInvali
dations); |
29 if (layoutView != object) | 29 if (layoutView != object) |
30 paintInvalidationStates[0]->updateForChildren(); | 30 paintInvalidationStates[0]->updateForChildren(PaintInvalidationFull)
; |
31 for (size_t i = 1; i < paintInvalidationStates.size(); ++i) { | 31 for (size_t i = 1; i < paintInvalidationStates.size(); ++i) { |
32 paintInvalidationStates[i].emplace(*paintInvalidationStates[i - 1],
*ancestors[ancestors.size() - i]); | 32 paintInvalidationStates[i].emplace(*paintInvalidationStates[i - 1],
*ancestors[ancestors.size() - i]); |
33 if (paintInvalidationStates[i]->m_currentObject != object) | 33 if (paintInvalidationStates[i]->m_currentObject != object) |
34 paintInvalidationStates[i]->updateForChildren(); | 34 paintInvalidationStates[i]->updateForChildren(PaintInvalidationF
ull); |
35 } | 35 } |
36 | 36 |
37 const PaintInvalidationState& paintInvalidationState = *paintInvalidatio
nStates.last(); | 37 const PaintInvalidationState& paintInvalidationState = *paintInvalidatio
nStates.last(); |
38 ASSERT_EQ(paintInvalidationState.m_currentObject, object); | 38 ASSERT_EQ(paintInvalidationState.m_currentObject, object); |
39 ASSERT_EQ(&paintInvalidationState.paintInvalidationContainer(), &paintIn
validationContainer); | 39 ASSERT_EQ(&paintInvalidationState.paintInvalidationContainer(), &paintIn
validationContainer); |
40 | 40 |
41 LayoutRect r = rect; | 41 LayoutRect r = rect; |
42 paintInvalidationState.mapLocalRectToPaintInvalidationContainer(r); | 42 paintInvalidationState.mapLocalRectToPaintInvalidationContainer(r); |
43 EXPECT_EQ(expectedRect, r); | 43 EXPECT_EQ(expectedRect, r); |
44 } | 44 } |
(...skipping 468 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
513 LayoutRect absoluteOverflowRect = absolute->localOverflowRectForPaintInvalid
ation(); | 513 LayoutRect absoluteOverflowRect = absolute->localOverflowRectForPaintInvalid
ation(); |
514 EXPECT_EQ(LayoutRect(0, 0, 50, 50), absoluteOverflowRect); | 514 EXPECT_EQ(LayoutRect(0, 0, 50, 50), absoluteOverflowRect); |
515 LayoutRect rect = absoluteOverflowRect; | 515 LayoutRect rect = absoluteOverflowRect; |
516 EXPECT_TRUE(absolute->mapToVisualRectInAncestorSpace(stackingContext, rect))
; | 516 EXPECT_TRUE(absolute->mapToVisualRectInAncestorSpace(stackingContext, rect))
; |
517 // -172 = top(50) - y_offset_of_stacking_context(222) | 517 // -172 = top(50) - y_offset_of_stacking_context(222) |
518 EXPECT_EQ(LayoutRect(50, -172, 50, 50), rect); | 518 EXPECT_EQ(LayoutRect(50, -172, 50, 50), rect); |
519 checkPaintInvalidationStateRectMapping(rect, absoluteOverflowRect, *absolute
, layoutView(), *stackingContext); | 519 checkPaintInvalidationStateRectMapping(rect, absoluteOverflowRect, *absolute
, layoutView(), *stackingContext); |
520 } | 520 } |
521 | 521 |
522 } // namespace blink | 522 } // namespace blink |
OLD | NEW |