Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(19)

Side by Side Diff: third_party/WebKit/Source/core/paint/BoxPaintInvalidatorTest.cpp

Issue 2706063003: Reduce the requirement for saving previousLocation (Closed)
Patch Set: - Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/HTMLNames.h" 5 #include "core/HTMLNames.h"
6 #include "core/frame/FrameView.h" 6 #include "core/frame/FrameView.h"
7 #include "core/layout/LayoutTestHelper.h" 7 #include "core/layout/LayoutTestHelper.h"
8 #include "core/layout/LayoutView.h" 8 #include "core/layout/LayoutView.h"
9 #include "core/paint/PaintLayer.h" 9 #include "core/paint/PaintLayer.h"
10 #include "platform/graphics/GraphicsLayer.h" 10 #include "platform/graphics/GraphicsLayer.h"
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 " border-style: solid;" 52 " border-style: solid;"
53 " border-color: red;" 53 " border-color: red;"
54 " }" 54 " }"
55 " .local-background {" 55 " .local-background {"
56 " background-attachment: local;" 56 " background-attachment: local;"
57 " overflow: scroll;" 57 " overflow: scroll;"
58 " }" 58 " }"
59 " .gradient {" 59 " .gradient {"
60 " background-image: linear-gradient(blue, yellow)" 60 " background-image: linear-gradient(blue, yellow)"
61 " }" 61 " }"
62 " .transform {"
63 " transform: scale(2);"
64 " }"
62 "</style>" 65 "</style>"
63 "<div id='target' class='border'></div>"); 66 "<div id='target' class='border'></div>");
64 } 67 }
65 }; 68 };
66 69
67 INSTANTIATE_TEST_CASE_P(All, BoxPaintInvalidatorTest, ::testing::Bool()); 70 INSTANTIATE_TEST_CASE_P(All, BoxPaintInvalidatorTest, ::testing::Bool());
68 71
69 TEST_P(BoxPaintInvalidatorTest, IncrementalInvalidationExpand) { 72 TEST_P(BoxPaintInvalidatorTest, IncrementalInvalidationExpand) {
70 document().view()->setTracksPaintInvalidations(true); 73 document().view()->setTracksPaintInvalidations(true);
71 Element* target = document().getElementById("target"); 74 Element* target = document().getElementById("target");
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 EXPECT_EQ(IntRect(0, 100, 70, 40), rasterInvalidations[1].rect); 112 EXPECT_EQ(IntRect(0, 100, 70, 40), rasterInvalidations[1].rect);
110 EXPECT_EQ(PaintInvalidationIncremental, rasterInvalidations[1].reason); 113 EXPECT_EQ(PaintInvalidationIncremental, rasterInvalidations[1].reason);
111 document().view()->setTracksPaintInvalidations(false); 114 document().view()->setTracksPaintInvalidations(false);
112 } 115 }
113 116
114 TEST_P(BoxPaintInvalidatorTest, SubpixelVisualRectChagne) { 117 TEST_P(BoxPaintInvalidatorTest, SubpixelVisualRectChagne) {
115 ScopedSlimmingPaintInvalidationForTest scopedSlimmingPaintInvalidation(true); 118 ScopedSlimmingPaintInvalidationForTest scopedSlimmingPaintInvalidation(true);
116 119
117 Element* target = document().getElementById("target"); 120 Element* target = document().getElementById("target");
118 121
119 // Should do full invalidation if new geometry has subpixels.
120 document().view()->setTracksPaintInvalidations(true); 122 document().view()->setTracksPaintInvalidations(true);
121 target->setAttribute(HTMLNames::styleAttr, "width: 100.6px; height: 70.3px"); 123 target->setAttribute(HTMLNames::styleAttr, "width: 100.6px; height: 70.3px");
122 document().view()->updateAllLifecyclePhases(); 124 document().view()->updateAllLifecyclePhases();
123 const auto* rasterInvalidations = 125 const auto* rasterInvalidations =
124 &getRasterInvalidationTracking()->trackedRasterInvalidations; 126 &getRasterInvalidationTracking()->trackedRasterInvalidations;
125 ASSERT_EQ(2u, rasterInvalidations->size()); 127 ASSERT_EQ(2u, rasterInvalidations->size());
126 EXPECT_EQ(IntRect(0, 0, 70, 140), (*rasterInvalidations)[0].rect); 128 EXPECT_EQ(IntRect(60, 0, 61, 111), (*rasterInvalidations)[0].rect);
127 EXPECT_EQ(PaintInvalidationBorderBoxChange, (*rasterInvalidations)[0].reason); 129 EXPECT_EQ(PaintInvalidationIncremental, (*rasterInvalidations)[0].reason);
128 EXPECT_EQ(IntRect(0, 0, 121, 111), (*rasterInvalidations)[1].rect); 130 EXPECT_EQ(IntRect(0, 90, 70, 50), (*rasterInvalidations)[1].rect);
129 EXPECT_EQ(PaintInvalidationBorderBoxChange, (*rasterInvalidations)[1].reason); 131 EXPECT_EQ(PaintInvalidationIncremental, (*rasterInvalidations)[1].reason);
130 document().view()->setTracksPaintInvalidations(false); 132 document().view()->setTracksPaintInvalidations(false);
131 133
132 // Should do full invalidation if old geometry has subpixels.
133 document().view()->setTracksPaintInvalidations(true); 134 document().view()->setTracksPaintInvalidations(true);
134 target->setAttribute(HTMLNames::styleAttr, "width: 50px; height: 100px"); 135 target->setAttribute(HTMLNames::styleAttr, "width: 50px; height: 100px");
135 document().view()->updateAllLifecyclePhases(); 136 document().view()->updateAllLifecyclePhases();
136 rasterInvalidations = 137 rasterInvalidations =
137 &getRasterInvalidationTracking()->trackedRasterInvalidations; 138 &getRasterInvalidationTracking()->trackedRasterInvalidations;
138 ASSERT_EQ(2u, rasterInvalidations->size()); 139 ASSERT_EQ(2u, rasterInvalidations->size());
139 EXPECT_EQ(IntRect(0, 0, 121, 111), (*rasterInvalidations)[0].rect); 140 EXPECT_EQ(IntRect(60, 0, 61, 111), (*rasterInvalidations)[0].rect);
141 EXPECT_EQ(PaintInvalidationIncremental, (*rasterInvalidations)[0].reason);
142 EXPECT_EQ(IntRect(0, 90, 70, 50), (*rasterInvalidations)[1].rect);
143 EXPECT_EQ(PaintInvalidationIncremental, (*rasterInvalidations)[1].reason);
144 document().view()->setTracksPaintInvalidations(false);
145 }
146
147 TEST_P(BoxPaintInvalidatorTest, SubpixelVisualRectChangeWithTransform) {
148 ScopedSlimmingPaintInvalidationForTest scopedSlimmingPaintInvalidation(true);
149
150 Element* target = document().getElementById("target");
151 target->setAttribute(HTMLNames::classAttr, "border transform");
152 document().view()->updateAllLifecyclePhases();
153
154 document().view()->setTracksPaintInvalidations(true);
155 target->setAttribute(HTMLNames::styleAttr, "width: 100.6px; height: 70.3px");
156 document().view()->updateAllLifecyclePhases();
157 const auto* rasterInvalidations =
158 &getRasterInvalidationTracking()->trackedRasterInvalidations;
159 ASSERT_EQ(2u, rasterInvalidations->size());
160 EXPECT_EQ(IntRect(0, 0, 140, 280), (*rasterInvalidations)[0].rect);
140 EXPECT_EQ(PaintInvalidationBorderBoxChange, (*rasterInvalidations)[0].reason); 161 EXPECT_EQ(PaintInvalidationBorderBoxChange, (*rasterInvalidations)[0].reason);
141 EXPECT_EQ(IntRect(0, 0, 70, 140), (*rasterInvalidations)[1].rect); 162 EXPECT_EQ(IntRect(0, 0, 242, 222), (*rasterInvalidations)[1].rect);
163 EXPECT_EQ(PaintInvalidationBorderBoxChange, (*rasterInvalidations)[1].reason);
164 document().view()->setTracksPaintInvalidations(false);
165
166 document().view()->setTracksPaintInvalidations(true);
167 target->setAttribute(HTMLNames::styleAttr, "width: 50px; height: 100px");
168 document().view()->updateAllLifecyclePhases();
169 rasterInvalidations =
170 &getRasterInvalidationTracking()->trackedRasterInvalidations;
171 ASSERT_EQ(2u, rasterInvalidations->size());
172 EXPECT_EQ(IntRect(0, 0, 242, 222), (*rasterInvalidations)[0].rect);
173 EXPECT_EQ(PaintInvalidationBorderBoxChange, (*rasterInvalidations)[0].reason);
174 EXPECT_EQ(IntRect(0, 0, 140, 280), (*rasterInvalidations)[1].rect);
142 EXPECT_EQ(PaintInvalidationBorderBoxChange, (*rasterInvalidations)[1].reason); 175 EXPECT_EQ(PaintInvalidationBorderBoxChange, (*rasterInvalidations)[1].reason);
143 document().view()->setTracksPaintInvalidations(false); 176 document().view()->setTracksPaintInvalidations(false);
144 } 177 }
145 178
146 TEST_P(BoxPaintInvalidatorTest, SubpixelChangeWithoutVisualRectChange) { 179 TEST_P(BoxPaintInvalidatorTest, SubpixelWithinPixelsChange) {
147 ScopedSlimmingPaintInvalidationForTest scopedSlimmingPaintInvalidation(true); 180 ScopedSlimmingPaintInvalidationForTest scopedSlimmingPaintInvalidation(true);
148 181
149 Element* target = document().getElementById("target"); 182 Element* target = document().getElementById("target");
150 LayoutObject* targetObject = target->layoutObject(); 183 LayoutObject* targetObject = target->layoutObject();
151 EXPECT_EQ(LayoutRect(0, 0, 70, 140), targetObject->previousVisualRect()); 184 EXPECT_EQ(LayoutRect(0, 0, 70, 140), targetObject->previousVisualRect());
152 185
153 // Should do full invalidation if new geometry has subpixels even if the paint
154 // invalidation rect doesn't change.
155 document().view()->setTracksPaintInvalidations(true); 186 document().view()->setTracksPaintInvalidations(true);
156 target->setAttribute(HTMLNames::styleAttr, 187 target->setAttribute(HTMLNames::styleAttr,
157 "margin-top: 0.6px; width: 50px; height: 99.3px"); 188 "margin-top: 0.6px; width: 50px; height: 99.3px");
158 document().view()->updateAllLifecyclePhases(); 189 document().view()->updateAllLifecyclePhases();
159 EXPECT_EQ(LayoutRect(0, 0, 70, 140), targetObject->previousVisualRect()); 190 EXPECT_EQ(LayoutRect(LayoutUnit(), LayoutUnit(0.6), LayoutUnit(70),
191 LayoutUnit(139.3)),
192 targetObject->previousVisualRect());
160 const auto* rasterInvalidations = 193 const auto* rasterInvalidations =
161 &getRasterInvalidationTracking()->trackedRasterInvalidations; 194 &getRasterInvalidationTracking()->trackedRasterInvalidations;
162 ASSERT_EQ(1u, rasterInvalidations->size()); 195 ASSERT_EQ(1u, rasterInvalidations->size());
163 EXPECT_EQ(IntRect(0, 0, 70, 140), (*rasterInvalidations)[0].rect); 196 EXPECT_EQ(IntRect(0, 0, 70, 140), (*rasterInvalidations)[0].rect);
164 EXPECT_EQ(PaintInvalidationLocationChange, (*rasterInvalidations)[0].reason); 197 EXPECT_EQ(PaintInvalidationBoundsChange, (*rasterInvalidations)[0].reason);
165 document().view()->setTracksPaintInvalidations(false); 198 document().view()->setTracksPaintInvalidations(false);
166 199
167 document().view()->setTracksPaintInvalidations(true); 200 document().view()->setTracksPaintInvalidations(true);
168 target->setAttribute(HTMLNames::styleAttr, 201 target->setAttribute(HTMLNames::styleAttr,
169 "margin-top: 0.6px; width: 49.3px; height: 98.5px"); 202 "margin-top: 0.6px; width: 49.3px; height: 98.5px");
170 document().view()->updateAllLifecyclePhases(); 203 document().view()->updateAllLifecyclePhases();
171 EXPECT_EQ(LayoutRect(0, 0, 70, 140), targetObject->previousVisualRect()); 204 EXPECT_EQ(LayoutRect(LayoutUnit(), LayoutUnit(0.6), LayoutUnit(69.3),
205 LayoutUnit(138.5)),
206 targetObject->previousVisualRect());
172 rasterInvalidations = 207 rasterInvalidations =
173 &getRasterInvalidationTracking()->trackedRasterInvalidations; 208 &getRasterInvalidationTracking()->trackedRasterInvalidations;
174 ASSERT_EQ(1u, rasterInvalidations->size()); 209 ASSERT_EQ(2u, rasterInvalidations->size());
175 EXPECT_EQ(IntRect(0, 0, 70, 140), (*rasterInvalidations)[0].rect); 210 EXPECT_EQ(IntRect(59, 0, 11, 140), (*rasterInvalidations)[0].rect);
176 EXPECT_EQ(PaintInvalidationBorderBoxChange, (*rasterInvalidations)[0].reason); 211 EXPECT_EQ(PaintInvalidationIncremental, (*rasterInvalidations)[0].reason);
212 EXPECT_EQ(IntRect(0, 119, 70, 21), (*rasterInvalidations)[1].rect);
213 EXPECT_EQ(PaintInvalidationIncremental, (*rasterInvalidations)[1].reason);
177 document().view()->setTracksPaintInvalidations(false); 214 document().view()->setTracksPaintInvalidations(false);
178 } 215 }
179 216
180 TEST_P(BoxPaintInvalidatorTest, ResizeRotated) { 217 TEST_P(BoxPaintInvalidatorTest, ResizeRotated) {
181 ScopedSlimmingPaintInvalidationForTest scopedSlimmingPaintInvalidation(true); 218 ScopedSlimmingPaintInvalidationForTest scopedSlimmingPaintInvalidation(true);
182 219
183 Element* target = document().getElementById("target"); 220 Element* target = document().getElementById("target");
184 target->setAttribute(HTMLNames::styleAttr, "transform: rotate(45deg)"); 221 target->setAttribute(HTMLNames::styleAttr, "transform: rotate(45deg)");
185 document().view()->updateAllLifecyclePhases(); 222 document().view()->updateAllLifecyclePhases();
186 223
(...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after
547 getRasterInvalidationTracking()->trackedRasterInvalidations; 584 getRasterInvalidationTracking()->trackedRasterInvalidations;
548 ASSERT_EQ(1u, rasterInvalidations.size()); 585 ASSERT_EQ(1u, rasterInvalidations.size());
549 EXPECT_EQ(IntRect(0, 120, 70, 120), rasterInvalidations[0].rect); 586 EXPECT_EQ(IntRect(0, 120, 70, 120), rasterInvalidations[0].rect);
550 EXPECT_EQ(static_cast<const DisplayItemClient*>(target->layoutObject()), 587 EXPECT_EQ(static_cast<const DisplayItemClient*>(target->layoutObject()),
551 rasterInvalidations[0].client); 588 rasterInvalidations[0].client);
552 EXPECT_EQ(PaintInvalidationIncremental, rasterInvalidations[0].reason); 589 EXPECT_EQ(PaintInvalidationIncremental, rasterInvalidations[0].reason);
553 document().view()->setTracksPaintInvalidations(false); 590 document().view()->setTracksPaintInvalidations(false);
554 } 591 }
555 592
556 } // namespace blink 593 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698