OLD | NEW |
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/paint/ObjectPaintInvalidator.h" | 5 #include "core/paint/ObjectPaintInvalidator.h" |
6 | 6 |
7 #include "core/layout/LayoutObject.h" | 7 #include "core/layout/LayoutObject.h" |
8 #include "core/layout/LayoutTestHelper.h" | 8 #include "core/layout/LayoutTestHelper.h" |
9 #include "core/paint/PaintLayer.h" | 9 #include "core/paint/PaintLayer.h" |
10 #include "platform/json/JSONValues.h" | 10 #include "platform/json/JSONValues.h" |
(...skipping 27 matching lines...) Expand all Loading... |
38 "style='position: relative'></div>" | 38 "style='position: relative'></div>" |
39 " <div " | 39 " <div " |
40 "id='non-stacked-layered-child-of-composited-non-stacking-context' " | 40 "id='non-stacked-layered-child-of-composited-non-stacking-context' " |
41 "style='overflow: scroll'></div>" | 41 "style='overflow: scroll'></div>" |
42 " </div>" | 42 " </div>" |
43 "</div>"); | 43 "</div>"); |
44 | 44 |
45 GetDocument().View()->SetTracksPaintInvalidations(true); | 45 GetDocument().View()->SetTracksPaintInvalidations(true); |
46 ObjectPaintInvalidator(*GetLayoutObjectByElementId("container")) | 46 ObjectPaintInvalidator(*GetLayoutObjectByElementId("container")) |
47 .InvalidateDisplayItemClientsIncludingNonCompositingDescendants( | 47 .InvalidateDisplayItemClientsIncludingNonCompositingDescendants( |
48 kPaintInvalidationSubtree); | 48 PaintInvalidationReason::kSubtree); |
49 std::unique_ptr<JSONArray> invalidations = | 49 std::unique_ptr<JSONArray> invalidations = |
50 GetDocument().View()->TrackedObjectPaintInvalidationsAsJSON(); | 50 GetDocument().View()->TrackedObjectPaintInvalidationsAsJSON(); |
51 GetDocument().View()->SetTracksPaintInvalidations(false); | 51 GetDocument().View()->SetTracksPaintInvalidations(false); |
52 | 52 |
53 ASSERT_EQ(4u, invalidations->size()); | 53 ASSERT_EQ(4u, invalidations->size()); |
54 String s; | 54 String s; |
55 JSONObject::Cast(invalidations->at(0))->Get("object")->AsString(&s); | 55 JSONObject::Cast(invalidations->at(0))->Get("object")->AsString(&s); |
56 EXPECT_EQ(GetLayoutObjectByElementId("container")->DebugName(), s); | 56 EXPECT_EQ(GetLayoutObjectByElementId("container")->DebugName(), s); |
57 JSONObject::Cast(invalidations->at(1))->Get("object")->AsString(&s); | 57 JSONObject::Cast(invalidations->at(1))->Get("object")->AsString(&s); |
58 EXPECT_EQ(GetLayoutObjectByElementId("normal-child")->DebugName(), s); | 58 EXPECT_EQ(GetLayoutObjectByElementId("normal-child")->DebugName(), s); |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
96 EXPECT_TRUE(span->IsPaintInvalidationContainer()); | 96 EXPECT_TRUE(span->IsPaintInvalidationContainer()); |
97 EXPECT_TRUE(span->StyleRef().IsStackingContext()); | 97 EXPECT_TRUE(span->StyleRef().IsStackingContext()); |
98 EXPECT_EQ(composited_container, &target->ContainerForPaintInvalidation()); | 98 EXPECT_EQ(composited_container, &target->ContainerForPaintInvalidation()); |
99 EXPECT_EQ(containing_block_layer, target->PaintingLayer()); | 99 EXPECT_EQ(containing_block_layer, target->PaintingLayer()); |
100 | 100 |
101 // Traversing from target should mark needsRepaint on correct layers. | 101 // Traversing from target should mark needsRepaint on correct layers. |
102 EXPECT_FALSE(containing_block_layer->NeedsRepaint()); | 102 EXPECT_FALSE(containing_block_layer->NeedsRepaint()); |
103 EXPECT_FALSE(composited_container_layer->NeedsRepaint()); | 103 EXPECT_FALSE(composited_container_layer->NeedsRepaint()); |
104 ObjectPaintInvalidator(*target) | 104 ObjectPaintInvalidator(*target) |
105 .InvalidateDisplayItemClientsIncludingNonCompositingDescendants( | 105 .InvalidateDisplayItemClientsIncludingNonCompositingDescendants( |
106 kPaintInvalidationSubtree); | 106 PaintInvalidationReason::kSubtree); |
107 EXPECT_TRUE(containing_block_layer->NeedsRepaint()); | 107 EXPECT_TRUE(containing_block_layer->NeedsRepaint()); |
108 EXPECT_TRUE(composited_container_layer->NeedsRepaint()); | 108 EXPECT_TRUE(composited_container_layer->NeedsRepaint()); |
109 EXPECT_FALSE(span_layer->NeedsRepaint()); | 109 EXPECT_FALSE(span_layer->NeedsRepaint()); |
110 | 110 |
111 GetDocument().View()->UpdateAllLifecyclePhases(); | 111 GetDocument().View()->UpdateAllLifecyclePhases(); |
112 | 112 |
113 // Traversing from span should mark needsRepaint on correct layers for target. | 113 // Traversing from span should mark needsRepaint on correct layers for target. |
114 EXPECT_FALSE(containing_block_layer->NeedsRepaint()); | 114 EXPECT_FALSE(containing_block_layer->NeedsRepaint()); |
115 EXPECT_FALSE(composited_container_layer->NeedsRepaint()); | 115 EXPECT_FALSE(composited_container_layer->NeedsRepaint()); |
116 ObjectPaintInvalidator(*span) | 116 ObjectPaintInvalidator(*span) |
117 .InvalidateDisplayItemClientsIncludingNonCompositingDescendants( | 117 .InvalidateDisplayItemClientsIncludingNonCompositingDescendants( |
118 kPaintInvalidationSubtree); | 118 PaintInvalidationReason::kSubtree); |
119 EXPECT_TRUE(containing_block_layer->NeedsRepaint()); | 119 EXPECT_TRUE(containing_block_layer->NeedsRepaint()); |
120 EXPECT_TRUE(composited_container_layer->NeedsRepaint()); | 120 EXPECT_TRUE(composited_container_layer->NeedsRepaint()); |
121 EXPECT_TRUE(span_layer->NeedsRepaint()); | 121 EXPECT_TRUE(span_layer->NeedsRepaint()); |
122 | 122 |
123 GetDocument().View()->UpdateAllLifecyclePhases(); | 123 GetDocument().View()->UpdateAllLifecyclePhases(); |
124 | 124 |
125 // Traversing from compositedContainer should reach target. | 125 // Traversing from compositedContainer should reach target. |
126 GetDocument().View()->SetTracksPaintInvalidations(true); | 126 GetDocument().View()->SetTracksPaintInvalidations(true); |
127 EXPECT_FALSE(containing_block_layer->NeedsRepaint()); | 127 EXPECT_FALSE(containing_block_layer->NeedsRepaint()); |
128 EXPECT_FALSE(composited_container_layer->NeedsRepaint()); | 128 EXPECT_FALSE(composited_container_layer->NeedsRepaint()); |
129 ObjectPaintInvalidator(*composited_container) | 129 ObjectPaintInvalidator(*composited_container) |
130 .InvalidateDisplayItemClientsIncludingNonCompositingDescendants( | 130 .InvalidateDisplayItemClientsIncludingNonCompositingDescendants( |
131 kPaintInvalidationSubtree); | 131 PaintInvalidationReason::kSubtree); |
132 EXPECT_TRUE(containing_block_layer->NeedsRepaint()); | 132 EXPECT_TRUE(containing_block_layer->NeedsRepaint()); |
133 EXPECT_TRUE(composited_container_layer->NeedsRepaint()); | 133 EXPECT_TRUE(composited_container_layer->NeedsRepaint()); |
134 EXPECT_FALSE(span_layer->NeedsRepaint()); | 134 EXPECT_FALSE(span_layer->NeedsRepaint()); |
135 | 135 |
136 std::unique_ptr<JSONArray> invalidations = | 136 std::unique_ptr<JSONArray> invalidations = |
137 GetDocument().View()->TrackedObjectPaintInvalidationsAsJSON(); | 137 GetDocument().View()->TrackedObjectPaintInvalidationsAsJSON(); |
138 GetDocument().View()->SetTracksPaintInvalidations(false); | 138 GetDocument().View()->SetTracksPaintInvalidations(false); |
139 | 139 |
140 ASSERT_EQ(4u, invalidations->size()); | 140 ASSERT_EQ(4u, invalidations->size()); |
141 String s; | 141 String s; |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
188 EXPECT_TRUE(inner_span->StyleRef().IsStackingContext()); | 188 EXPECT_TRUE(inner_span->StyleRef().IsStackingContext()); |
189 EXPECT_EQ(composited_container, &target->ContainerForPaintInvalidation()); | 189 EXPECT_EQ(composited_container, &target->ContainerForPaintInvalidation()); |
190 EXPECT_EQ(containing_block_layer, target->PaintingLayer()); | 190 EXPECT_EQ(containing_block_layer, target->PaintingLayer()); |
191 | 191 |
192 // Traversing from compositedContainer should reach target. | 192 // Traversing from compositedContainer should reach target. |
193 GetDocument().View()->SetTracksPaintInvalidations(true); | 193 GetDocument().View()->SetTracksPaintInvalidations(true); |
194 EXPECT_FALSE(containing_block_layer->NeedsRepaint()); | 194 EXPECT_FALSE(containing_block_layer->NeedsRepaint()); |
195 EXPECT_FALSE(composited_container_layer->NeedsRepaint()); | 195 EXPECT_FALSE(composited_container_layer->NeedsRepaint()); |
196 ObjectPaintInvalidator(*composited_container) | 196 ObjectPaintInvalidator(*composited_container) |
197 .InvalidateDisplayItemClientsIncludingNonCompositingDescendants( | 197 .InvalidateDisplayItemClientsIncludingNonCompositingDescendants( |
198 kPaintInvalidationSubtree); | 198 PaintInvalidationReason::kSubtree); |
199 EXPECT_TRUE(containing_block_layer->NeedsRepaint()); | 199 EXPECT_TRUE(containing_block_layer->NeedsRepaint()); |
200 EXPECT_TRUE(composited_container_layer->NeedsRepaint()); | 200 EXPECT_TRUE(composited_container_layer->NeedsRepaint()); |
201 EXPECT_FALSE(span_layer->NeedsRepaint()); | 201 EXPECT_FALSE(span_layer->NeedsRepaint()); |
202 EXPECT_FALSE(inner_span_layer->NeedsRepaint()); | 202 EXPECT_FALSE(inner_span_layer->NeedsRepaint()); |
203 | 203 |
204 std::unique_ptr<JSONArray> invalidations = | 204 std::unique_ptr<JSONArray> invalidations = |
205 GetDocument().View()->TrackedObjectPaintInvalidationsAsJSON(); | 205 GetDocument().View()->TrackedObjectPaintInvalidationsAsJSON(); |
206 GetDocument().View()->SetTracksPaintInvalidations(false); | 206 GetDocument().View()->SetTracksPaintInvalidations(false); |
207 | 207 |
208 ASSERT_EQ(4u, invalidations->size()); | 208 ASSERT_EQ(4u, invalidations->size()); |
(...skipping 27 matching lines...) Expand all Loading... |
236 EXPECT_TRUE(span->IsPaintInvalidationContainer()); | 236 EXPECT_TRUE(span->IsPaintInvalidationContainer()); |
237 EXPECT_TRUE(span->StyleRef().IsStackingContext()); | 237 EXPECT_TRUE(span->StyleRef().IsStackingContext()); |
238 EXPECT_EQ(span, &target->ContainerForPaintInvalidation()); | 238 EXPECT_EQ(span, &target->ContainerForPaintInvalidation()); |
239 EXPECT_EQ(target_layer, target->PaintingLayer()); | 239 EXPECT_EQ(target_layer, target->PaintingLayer()); |
240 | 240 |
241 // Traversing from span should reach target. | 241 // Traversing from span should reach target. |
242 GetDocument().View()->SetTracksPaintInvalidations(true); | 242 GetDocument().View()->SetTracksPaintInvalidations(true); |
243 EXPECT_FALSE(span_layer->NeedsRepaint()); | 243 EXPECT_FALSE(span_layer->NeedsRepaint()); |
244 ObjectPaintInvalidator(*span) | 244 ObjectPaintInvalidator(*span) |
245 .InvalidateDisplayItemClientsIncludingNonCompositingDescendants( | 245 .InvalidateDisplayItemClientsIncludingNonCompositingDescendants( |
246 kPaintInvalidationSubtree); | 246 PaintInvalidationReason::kSubtree); |
247 EXPECT_TRUE(span_layer->NeedsRepaint()); | 247 EXPECT_TRUE(span_layer->NeedsRepaint()); |
248 | 248 |
249 std::unique_ptr<JSONArray> invalidations = | 249 std::unique_ptr<JSONArray> invalidations = |
250 GetDocument().View()->TrackedObjectPaintInvalidationsAsJSON(); | 250 GetDocument().View()->TrackedObjectPaintInvalidationsAsJSON(); |
251 GetDocument().View()->SetTracksPaintInvalidations(false); | 251 GetDocument().View()->SetTracksPaintInvalidations(false); |
252 | 252 |
253 ASSERT_EQ(3u, invalidations->size()); | 253 ASSERT_EQ(3u, invalidations->size()); |
254 String s; | 254 String s; |
255 JSONObject::Cast(invalidations->at(0))->Get("object")->AsString(&s); | 255 JSONObject::Cast(invalidations->at(0))->Get("object")->AsString(&s); |
256 EXPECT_EQ(span->DebugName(), s); | 256 EXPECT_EQ(span->DebugName(), s); |
257 JSONObject::Cast(invalidations->at(1))->Get("object")->AsString(&s); | 257 JSONObject::Cast(invalidations->at(1))->Get("object")->AsString(&s); |
258 EXPECT_EQ("LayoutText #text", s); | 258 EXPECT_EQ("LayoutText #text", s); |
259 JSONObject::Cast(invalidations->at(2))->Get("object")->AsString(&s); | 259 JSONObject::Cast(invalidations->at(2))->Get("object")->AsString(&s); |
260 EXPECT_EQ(target->DebugName(), s); | 260 EXPECT_EQ(target->DebugName(), s); |
261 } | 261 } |
262 | 262 |
263 } // namespace blink | 263 } // namespace blink |
OLD | NEW |