| 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 |