From 05d439bae59df4f21124c2bf2e7f96070fd0e796 Mon Sep 17 00:00:00 2001 From: Tien-Ren Chen Date: Wed, 25 Jul 2018 00:23:28 +0000 Subject: [PATCH] [Blink] Unify replaced element clipping Prior to this CL each replaced element type implemented its own clipping. This CL refactors it so that a clip node will be applied in the common path, ReplacedPainter::Paint(), so the specialized XyzPainter::PaintReplaced() won't need to apply their own clips. Note that ImagePainter still mutates its internal painting for changed clip rect. This behavior should be changed in a follow-up CL, and changing only the content box of a replaced element should only result in incremental invalidation. BUG=730284 Cq-Include-Trybots: luci.chromium.try:linux-blink-gen-property-trees;luci.chromium.try:linux_layout_tests_slimming_paint_v2;master.tryserver.blink:linux_trusty_blink_rel Change-Id: Ia5c1412b1bd3182a22849d0b3196f3e72d52248a Reviewed-on: https://chromium-review.googlesource.com/1147617 Commit-Queue: Tien-Ren Chen Reviewed-by: Philip Rogers Cr-Commit-Position: refs/heads/master@{#577741} --- ...s-ring-with-paint-root-offset-expected.png | Bin 0 -> 6171 bytes ...yout-inline-children-replaced-expected.txt | 5 + .../box/box-inline-resize-expected.txt | 9 +- .../invalidation/canvas-resize-expected.txt | 7 +- ...s-resize-no-full-invalidation-expected.txt | 5 + .../clip/clipped-relative-expected.txt | 5 + ...-wrong-incremental-repainting-expected.txt | 5 + ...display-block-to-display-none-expected.txt | 11 +- ...display-none-to-display-block-expected.txt | 11 +- ...ot-paint-below-image-baseline-expected.txt | 5 + .../image/image-resize-expected.txt | 14 +- ...t-size-image-resize-container-expected.txt | 14 +- .../invalidation/list-marker-2-expected.txt | 5 + ...ed-list-offset-change-repaint-expected.txt | 5 + .../selection/selected-replaced-expected.txt | 14 +- .../selection-clear-after-move-expected.txt | 5 + .../transform-replaced-shadows-expected.txt | 10 + .../layers/layer-canvas-log-expected.txt | 50 ++-- ...yout-inline-children-replaced-expected.txt | 5 + .../invalidation/canvas-resize-expected.txt | 7 +- ...s-resize-no-full-invalidation-expected.txt | 5 + ...-wrong-incremental-repainting-expected.txt | 5 + ...repaint-inside-squashed-layer-expected.txt | 5 + ...ot-paint-below-image-baseline-expected.txt | 5 + .../image/image-resize-expected.txt | 14 +- ...t-size-image-resize-container-expected.txt | 14 +- .../selection-clear-after-move-expected.txt | 5 + .../transform-replaced-shadows-expected.txt | 10 + .../selection/selected-replaced-expected.txt | 48 ++++ .../selection-rect-transform-expected.png | Bin 14773 -> 14779 bytes .../box/box-inline-resize-expected.txt | 9 +- ...te-repaint-by-all-imagesource-expected.txt | 220 ++++++++++++++++++ .../overflow-update-transform-expected.png | Bin 5467 -> 5478 bytes .../selection-rect-transform-expected.png | Bin 6624 -> 6637 bytes .../box/box-inline-resize-expected.txt | 9 +- .../clip/clipped-relative-expected.txt | 5 + ...te-repaint-by-all-imagesource-expected.txt | 220 ++++++++++++++++++ .../invalidation/list-marker-2-expected.txt | 5 + ...ed-list-offset-change-repaint-expected.txt | 5 + .../selection/selected-replaced-expected.txt | 14 +- .../overflow-update-transform-expected.png | Bin 5471 -> 5473 bytes .../selection-rect-transform-expected.png | Bin 6534 -> 6546 bytes .../box/box-inline-resize-expected.txt | 9 +- .../clip/clipped-relative-expected.txt | 5 + ...te-repaint-by-all-imagesource-expected.txt | 220 ++++++++++++++++++ .../invalidation/list-marker-2-expected.txt | 5 + ...ed-list-offset-change-repaint-expected.txt | 5 + .../selection/selected-replaced-expected.txt | 14 +- .../core/layout/layout_embedded_content.cc | 8 +- .../core/layout/layout_embedded_content.h | 5 +- .../core/layout/layout_embedded_object.cc | 19 -- .../core/layout/layout_embedded_object.h | 3 - .../core/paint/embedded_content_painter.cc | 98 +------- .../core/paint/embedded_content_painter.h | 5 +- .../core/paint/embedded_object_painter.cc | 6 +- .../core/paint/html_canvas_painter.cc | 23 +- .../paint/object_paint_invalidator_test.cc | 8 +- .../renderer/core/paint/replaced_painter.cc | 74 +++--- .../renderer/core/paint/svg_root_painter.cc | 8 - 59 files changed, 1071 insertions(+), 234 deletions(-) create mode 100644 third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/images/imagemap-focus-ring-with-paint-root-offset-expected.png create mode 100644 third_party/WebKit/LayoutTests/platform/fuchsia/paint/invalidation/selection/selected-replaced-expected.txt diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/images/imagemap-focus-ring-with-paint-root-offset-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/images/imagemap-focus-ring-with-paint-root-offset-expected.png new file mode 100644 index 0000000000000000000000000000000000000000..28fb45c0c18075f7f43a2a44fd980e0ddef9a6bc GIT binary patch literal 6171 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 literal 0 HcmV?d00001 diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/block-layout-inline-children-replaced-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/block-layout-inline-children-replaced-expected.txt index 92df863bf0abc1..bc481cf1e8e161 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/block-layout-inline-children-replaced-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/block-layout-inline-children-replaced-expected.txt @@ -15,6 +15,11 @@ "object": "LayoutImage IMG", "rect": [151, 117, 100, 100], "reason": "appeared" + }, + { + "object": "LayoutImage IMG", + "rect": [151, 117, 100, 100], + "reason": "chunk appeared" } ] } diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/box-inline-resize-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/box-inline-resize-expected.txt index 5b6271d6341cd1..124db376212228 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/box-inline-resize-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/box-inline-resize-expected.txt @@ -9,17 +9,22 @@ { "object": "InlineTextBox 'Chromium'", "rect": [40, 107, 113, 27], - "reason": "geometry" + "reason": "chunk appeared" }, { "object": "InlineTextBox 'Chromium'", "rect": [8, 107, 113, 27], - "reason": "geometry" + "reason": "disappeared" }, { "object": "LayoutImage IMG id='foo'", "rect": [8, 88, 32, 32], "reason": "appeared" + }, + { + "object": "LayoutImage IMG id='foo'", + "rect": [8, 88, 32, 32], + "reason": "chunk appeared" } ] } diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/canvas-resize-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/canvas-resize-expected.txt index 6b8cf635d48cf7..27355c93526739 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/canvas-resize-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/canvas-resize-expected.txt @@ -8,8 +8,13 @@ "paintInvalidations": [ { "object": "LayoutHTMLCanvas (positioned) CANVAS id='canvas'", - "rect": [50, 50, 600, 500], + "rect": [50, 50, 500, 500], "reason": "geometry" + }, + { + "object": "LayoutHTMLCanvas (positioned) CANVAS id='canvas'", + "rect": [550, 50, 100, 500], + "reason": "incremental" } ] } diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/canvas-resize-no-full-invalidation-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/canvas-resize-no-full-invalidation-expected.txt index 55868f55499be8..50388f62f2a2a1 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/canvas-resize-no-full-invalidation-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/canvas-resize-no-full-invalidation-expected.txt @@ -6,6 +6,11 @@ "contentsOpaque": true, "backgroundColor": "#FFFFFF", "paintInvalidations": [ + { + "object": "LayoutHTMLCanvas (positioned) CANVAS id='canvas'", + "rect": [550, 50, 100, 500], + "reason": "incremental" + }, { "object": "LayoutHTMLCanvas (positioned) CANVAS id='canvas'", "rect": [550, 50, 100, 500], diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/clipped-relative-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/clipped-relative-expected.txt index 508311129a2620..6212af9e90f862 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/clipped-relative-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/clipped-relative-expected.txt @@ -11,6 +11,11 @@ "rect": [8, 74, 204, 232], "reason": "geometry" }, + { + "object": "LayoutImage IMG", + "rect": [102, 74, 110, 232], + "reason": "incremental" + }, { "object": "LayoutImage IMG", "rect": [8, 74, 94, 232], diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/replaced-clipped-positioned-not-wrong-incremental-repainting-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/replaced-clipped-positioned-not-wrong-incremental-repainting-expected.txt index d06d0d71f33edb..07485121e26c9c 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/replaced-clipped-positioned-not-wrong-incremental-repainting-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/replaced-clipped-positioned-not-wrong-incremental-repainting-expected.txt @@ -15,6 +15,11 @@ "object": "LayoutImage IMG", "rect": [8, 8, 114, 232], "reason": "geometry" + }, + { + "object": "LayoutImage IMG", + "rect": [122, 8, 80, 232], + "reason": "incremental" } ] } diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/iframe-display-block-to-display-none-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/iframe-display-block-to-display-none-expected.txt index ad626dd290f580..b37ed834b4e56b 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/iframe-display-block-to-display-none-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/iframe-display-block-to-display-none-expected.txt @@ -7,9 +7,14 @@ "backgroundColor": "#FFFFFF", "paintInvalidations": [ { - "object": "LayoutIFrame IFRAME id='iframe'", - "rect": [8, 72, 732, 94], - "reason": "disappeared" + "object": "LayoutBlockFlow HTML", + "rect": [8, 16, 751, 150], + "reason": "chunk disappeared" + }, + { + "object": "LayoutBlockFlow HTML", + "rect": [8, 16, 751, 39], + "reason": "chunk appeared" } ] } diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/iframe-display-none-to-display-block-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/iframe-display-none-to-display-block-expected.txt index b03ea5f7b0bf4d..16e77e0a7d50bf 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/iframe-display-none-to-display-block-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/iframe-display-none-to-display-block-expected.txt @@ -7,9 +7,14 @@ "backgroundColor": "#FFFFFF", "paintInvalidations": [ { - "object": "LayoutIFrame IFRAME id='iframe'", - "rect": [8, 72, 732, 94], - "reason": "appeared" + "object": "LayoutBlockFlow HTML", + "rect": [8, 16, 751, 150], + "reason": "chunk appeared" + }, + { + "object": "LayoutBlockFlow HTML", + "rect": [8, 16, 751, 39], + "reason": "chunk disappeared" } ] } diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/image/do-not-paint-below-image-baseline-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/image/do-not-paint-below-image-baseline-expected.txt index d9caeee3c16aa0..fbc6962a8ef673 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/image/do-not-paint-below-image-baseline-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/image/do-not-paint-below-image-baseline-expected.txt @@ -6,6 +6,11 @@ "contentsOpaque": true, "backgroundColor": "#FFFFFF", "paintInvalidations": [ + { + "object": "LayoutBlockFlow HTML", + "rect": [50, 50, 259, 194], + "reason": "chunk disappeared" + }, { "object": "LayoutImage IMG", "rect": [50, 50, 259, 194], diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/image/image-resize-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/image/image-resize-expected.txt index 0f315334d366c1..33d3e2fb7fce21 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/image/image-resize-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/image/image-resize-expected.txt @@ -8,13 +8,23 @@ "paintInvalidations": [ { "object": "LayoutImage (positioned) IMG", - "rect": [0, 50, 150, 150], + "rect": [0, 50, 100, 200], "reason": "geometry" }, { "object": "LayoutImage (positioned) IMG", - "rect": [0, 50, 100, 200], + "rect": [0, 50, 100, 150], "reason": "geometry" + }, + { + "object": "LayoutImage (positioned) IMG", + "rect": [0, 200, 100, 50], + "reason": "incremental" + }, + { + "object": "LayoutImage (positioned) IMG", + "rect": [100, 50, 50, 150], + "reason": "incremental" } ] } diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/image/percent-size-image-resize-container-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/image/percent-size-image-resize-container-expected.txt index 0f315334d366c1..33d3e2fb7fce21 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/image/percent-size-image-resize-container-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/image/percent-size-image-resize-container-expected.txt @@ -8,13 +8,23 @@ "paintInvalidations": [ { "object": "LayoutImage (positioned) IMG", - "rect": [0, 50, 150, 150], + "rect": [0, 50, 100, 200], "reason": "geometry" }, { "object": "LayoutImage (positioned) IMG", - "rect": [0, 50, 100, 200], + "rect": [0, 50, 100, 150], "reason": "geometry" + }, + { + "object": "LayoutImage (positioned) IMG", + "rect": [0, 200, 100, 50], + "reason": "incremental" + }, + { + "object": "LayoutImage (positioned) IMG", + "rect": [100, 50, 50, 150], + "reason": "incremental" } ] } diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/list-marker-2-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/list-marker-2-expected.txt index 2deb2638208d1b..eb3b86a614489c 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/list-marker-2-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/list-marker-2-expected.txt @@ -11,6 +11,11 @@ "rect": [48, 100, 100, 100], "reason": "geometry" }, + { + "object": "LayoutImage IMG id='target'", + "rect": [48, 150, 100, 50], + "reason": "incremental" + }, { "object": "LayoutListMarker (anonymous)", "rect": [30, 185, 7, 19], diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/positioned-list-offset-change-repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/positioned-list-offset-change-repaint-expected.txt index ab9069925db03f..4e124643fa66ac 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/positioned-list-offset-change-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/positioned-list-offset-change-repaint-expected.txt @@ -15,6 +15,11 @@ "object": "LayoutImage IMG", "rect": [8, 64, 114, 232], "reason": "geometry" + }, + { + "object": "LayoutImage IMG", + "rect": [122, 64, 100, 232], + "reason": "incremental" } ] } diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selected-replaced-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selected-replaced-expected.txt index d4b3f6d6d6f565..93683da31a6a78 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selected-replaced-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selected-replaced-expected.txt @@ -8,13 +8,23 @@ "paintInvalidations": [ { "object": "LayoutImage (relative positioned) IMG id='test' class='moved'", - "rect": [8, 132, 214, 232], + "rect": [8, 52, 214, 232], "reason": "geometry" }, { "object": "LayoutImage (relative positioned) IMG id='test' class='moved'", - "rect": [8, 52, 214, 232], + "rect": [8, 132, 214, 152], "reason": "geometry" + }, + { + "object": "LayoutImage (relative positioned) IMG id='test' class='moved'", + "rect": [8, 284, 214, 80], + "reason": "incremental" + }, + { + "object": "LayoutImage (relative positioned) IMG id='test' class='moved'", + "rect": [8, 52, 214, 80], + "reason": "incremental" } ] } diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selection-clear-after-move-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selection-clear-after-move-expected.txt index efa22d999468e9..3df8e8711d714f 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selection-clear-after-move-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selection-clear-after-move-expected.txt @@ -10,6 +10,11 @@ "object": "LayoutImage IMG", "rect": [100, 300, 50, 50], "reason": "selection" + }, + { + "object": "LayoutImage IMG", + "rect": [100, 300, 50, 50], + "reason": "chunk disappeared" } ] } diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform/transform-replaced-shadows-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform/transform-replaced-shadows-expected.txt index 701b8811128fa6..440289bdc4ab8f 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform/transform-replaced-shadows-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform/transform-replaced-shadows-expected.txt @@ -11,10 +11,20 @@ "rect": [0, 28, 266, 278], "reason": "paint property change" }, + { + "object": "LayoutImage IMG id='box' class='smaller'", + "rect": [28, 28, 200, 200], + "reason": "paint property change" + }, { "object": "LayoutImage IMG id='box' class='smaller'", "rect": [9, 28, 138, 139], "reason": "paint property change" + }, + { + "object": "LayoutImage IMG id='box' class='smaller'", + "rect": [28, 28, 100, 100], + "reason": "paint property change" } ] } diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/layers/layer-canvas-log-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/layers/layer-canvas-log-expected.txt index 3200056f3731ed..121af428d74ade 100644 --- a/third_party/WebKit/LayoutTests/http/tests/devtools/layers/layer-canvas-log-expected.txt +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/layers/layer-canvas-log-expected.txt @@ -58,8 +58,32 @@ Canvas log: } } } + 10 : { + commandIndex : 10 + method : "restore" + params : undefined + } 2 : { commandIndex : 2 + method : "save" + params : undefined + } + 3 : { + commandIndex : 3 + method : "clipRect" + params : { + SkRegion::Op : "kIntersect_Op" + rect : { + bottom : 71 + left : 0 + right : 19 + top : 50 + } + softClipEdgeStyle : true + } + } + 4 : { + commandIndex : 4 method : "drawImageRect" params : { dst : { @@ -97,21 +121,26 @@ Canvas log: } } } - 3 : { - commandIndex : 3 + 5 : { + commandIndex : 5 + method : "restore" + params : undefined + } + 6 : { + commandIndex : 6 method : "save" params : undefined } - 4 : { - commandIndex : 4 + 7 : { + commandIndex : 7 method : "translate" params : { dx : 0 dy : 71 } } - 5 : { - commandIndex : 5 + 8 : { + commandIndex : 8 method : "clipRect" params : { SkRegion::Op : "kIntersect_Op" @@ -124,8 +153,8 @@ Canvas log: softClipEdgeStyle : true } } - 6 : { - commandIndex : 6 + 9 : { + commandIndex : 9 method : "drawRect" params : { paint : { @@ -152,10 +181,5 @@ Canvas log: } } } - 7 : { - commandIndex : 7 - method : "restore" - params : undefined - } } diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/block-layout-inline-children-replaced-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/block-layout-inline-children-replaced-expected.txt index 9341e623551e74..af9d49e7af28ca 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/block-layout-inline-children-replaced-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/block-layout-inline-children-replaced-expected.txt @@ -26,6 +26,11 @@ "object": "LayoutImage IMG", "rect": [151, 117, 100, 100], "reason": "appeared" + }, + { + "object": "LayoutImage IMG", + "rect": [151, 117, 100, 100], + "reason": "chunk appeared" } ] } diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/canvas-resize-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/canvas-resize-expected.txt index 44330626d59dcf..5f18316dd6f9b6 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/canvas-resize-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/canvas-resize-expected.txt @@ -19,8 +19,13 @@ "paintInvalidations": [ { "object": "LayoutHTMLCanvas (positioned) CANVAS id='canvas'", - "rect": [50, 50, 600, 500], + "rect": [50, 50, 500, 500], "reason": "geometry" + }, + { + "object": "LayoutHTMLCanvas (positioned) CANVAS id='canvas'", + "rect": [550, 50, 100, 500], + "reason": "incremental" } ] } diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/canvas-resize-no-full-invalidation-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/canvas-resize-no-full-invalidation-expected.txt index a3132b97ac7489..d4cba972a41e5d 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/canvas-resize-no-full-invalidation-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/canvas-resize-no-full-invalidation-expected.txt @@ -17,6 +17,11 @@ "contentsOpaque": true, "backgroundColor": "#FFFFFF", "paintInvalidations": [ + { + "object": "LayoutHTMLCanvas (positioned) CANVAS id='canvas'", + "rect": [550, 50, 100, 500], + "reason": "incremental" + }, { "object": "LayoutHTMLCanvas (positioned) CANVAS id='canvas'", "rect": [550, 50, 100, 500], diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/clip/replaced-clipped-positioned-not-wrong-incremental-repainting-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/clip/replaced-clipped-positioned-not-wrong-incremental-repainting-expected.txt index 2203bb13c2a244..58396c36d2d774 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/clip/replaced-clipped-positioned-not-wrong-incremental-repainting-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/clip/replaced-clipped-positioned-not-wrong-incremental-repainting-expected.txt @@ -26,6 +26,11 @@ "object": "LayoutImage IMG", "rect": [8, 8, 114, 232], "reason": "geometry" + }, + { + "object": "LayoutImage IMG", + "rect": [122, 8, 80, 232], + "reason": "incremental" } ] } diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/squash-partial-repaint-inside-squashed-layer-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/squash-partial-repaint-inside-squashed-layer-expected.txt index 84a2bcf1d55301..7ab9cdab2fba73 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/squash-partial-repaint-inside-squashed-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/squash-partial-repaint-inside-squashed-layer-expected.txt @@ -33,6 +33,11 @@ "position": [180, 180], "bounds": [262, 200], "paintInvalidations": [ + { + "object": "LayoutImage (positioned) IMG id='repaintdiv' class='repaintdiv'", + "rect": [80, 80, 182, 29], + "reason": "style change" + }, { "object": "LayoutImage (positioned) IMG id='repaintdiv' class='repaintdiv'", "rect": [80, 80, 182, 29], diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/image/do-not-paint-below-image-baseline-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/image/do-not-paint-below-image-baseline-expected.txt index 978d42d295aee4..89d4aba26b27cd 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/image/do-not-paint-below-image-baseline-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/image/do-not-paint-below-image-baseline-expected.txt @@ -17,6 +17,11 @@ "contentsOpaque": true, "backgroundColor": "#FFFFFF", "paintInvalidations": [ + { + "object": "LayoutBlockFlow HTML", + "rect": [50, 50, 259, 194], + "reason": "chunk disappeared" + }, { "object": "LayoutImage IMG", "rect": [50, 50, 259, 194], diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/image/image-resize-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/image/image-resize-expected.txt index fd61bfe8e6a77f..8a2fbab9d4c475 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/image/image-resize-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/image/image-resize-expected.txt @@ -19,13 +19,23 @@ "paintInvalidations": [ { "object": "LayoutImage (positioned) IMG", - "rect": [0, 50, 150, 150], + "rect": [0, 50, 100, 200], "reason": "geometry" }, { "object": "LayoutImage (positioned) IMG", - "rect": [0, 50, 100, 200], + "rect": [0, 50, 100, 150], "reason": "geometry" + }, + { + "object": "LayoutImage (positioned) IMG", + "rect": [0, 200, 100, 50], + "reason": "incremental" + }, + { + "object": "LayoutImage (positioned) IMG", + "rect": [100, 50, 50, 150], + "reason": "incremental" } ] } diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/image/percent-size-image-resize-container-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/image/percent-size-image-resize-container-expected.txt index fd61bfe8e6a77f..8a2fbab9d4c475 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/image/percent-size-image-resize-container-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/image/percent-size-image-resize-container-expected.txt @@ -19,13 +19,23 @@ "paintInvalidations": [ { "object": "LayoutImage (positioned) IMG", - "rect": [0, 50, 150, 150], + "rect": [0, 50, 100, 200], "reason": "geometry" }, { "object": "LayoutImage (positioned) IMG", - "rect": [0, 50, 100, 200], + "rect": [0, 50, 100, 150], "reason": "geometry" + }, + { + "object": "LayoutImage (positioned) IMG", + "rect": [0, 200, 100, 50], + "reason": "incremental" + }, + { + "object": "LayoutImage (positioned) IMG", + "rect": [100, 50, 50, 150], + "reason": "incremental" } ] } diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/selection/selection-clear-after-move-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/selection/selection-clear-after-move-expected.txt index 1544eaa91c167c..5788d968042a71 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/selection/selection-clear-after-move-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/selection/selection-clear-after-move-expected.txt @@ -21,6 +21,11 @@ "object": "LayoutImage IMG", "rect": [100, 300, 50, 50], "reason": "selection" + }, + { + "object": "LayoutImage IMG", + "rect": [100, 300, 50, 50], + "reason": "chunk disappeared" } ] } diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/transform/transform-replaced-shadows-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/transform/transform-replaced-shadows-expected.txt index 8361ae35d8647f..491b6d30c3dd0d 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/transform/transform-replaced-shadows-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/transform/transform-replaced-shadows-expected.txt @@ -22,10 +22,20 @@ "rect": [0, 28, 266, 278], "reason": "paint property change" }, + { + "object": "LayoutImage IMG id='box' class='smaller'", + "rect": [28, 28, 200, 200], + "reason": "paint property change" + }, { "object": "LayoutImage IMG id='box' class='smaller'", "rect": [9, 28, 138, 139], "reason": "paint property change" + }, + { + "object": "LayoutImage IMG id='box' class='smaller'", + "rect": [28, 28, 100, 100], + "reason": "paint property change" } ] } diff --git a/third_party/WebKit/LayoutTests/platform/fuchsia/paint/invalidation/selection/selected-replaced-expected.txt b/third_party/WebKit/LayoutTests/platform/fuchsia/paint/invalidation/selection/selected-replaced-expected.txt new file mode 100644 index 00000000000000..377adb50b44dc8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/fuchsia/paint/invalidation/selection/selected-replaced-expected.txt @@ -0,0 +1,48 @@ +{ + "layers": [ + { + "name": "LayoutView #document", + "bounds": [800, 600], + "drawsContent": false, + "backgroundColor": "#FFFFFF" + }, + { + "name": "Scrolling Layer", + "bounds": [800, 600], + "drawsContent": false + }, + { + "name": "Scrolling Contents Layer", + "bounds": [800, 600], + "contentsOpaque": true, + "backgroundColor": "#FFFFFF", + "paintInvalidations": [ + { + "object": "LayoutImage (relative positioned) IMG id='test' class='moved'", + "rect": [8, 132, 214, 232], + "reason": "geometry" + }, + { + "object": "LayoutImage (relative positioned) IMG id='test' class='moved'", + "rect": [8, 52, 214, 232], + "reason": "geometry" + } + ] + } + ], + "objectPaintInvalidations": [ + { + "object": "LayoutBlockFlow (anonymous)", + "reason": "geometry" + }, + { + "object": "RootInlineBox", + "reason": "geometry" + }, + { + "object": "LayoutImage (relative positioned) IMG id='test' class='moved'", + "reason": "geometry" + } + ] +} + diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/replaced/selection-rect-transform-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/replaced/selection-rect-transform-expected.png index d768bd3addb8d528d9a6bfa69b43d90ba1d25343..8d781f22d24fb16f9fdd33bbe06350079d7a2bac 100644 GIT binary patch literal 14779 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 S57IUSA}J;-nkS3;y3vU-dF literal 14773 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

U|OyokP)K%C4;C9AJ-kDU6gUYZ%|61I0e*-uJ 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 diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/box/box-inline-resize-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/box/box-inline-resize-expected.txt index cb6a48c2044951..ab1843a1b0f14f 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/box/box-inline-resize-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/box/box-inline-resize-expected.txt @@ -20,17 +20,22 @@ { "object": "InlineTextBox 'Chromium'", "rect": [40, 107, 113, 27], - "reason": "geometry" + "reason": "chunk appeared" }, { "object": "InlineTextBox 'Chromium'", "rect": [8, 107, 113, 27], - "reason": "geometry" + "reason": "disappeared" }, { "object": "LayoutImage IMG id='foo'", "rect": [8, 88, 32, 32], "reason": "appeared" + }, + { + "object": "LayoutImage IMG id='foo'", + "rect": [8, 88, 32, 32], + "reason": "chunk appeared" } ] } diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt index e1089d7f83be2e..d4337316b255dc 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt @@ -22,6 +22,16 @@ "rect": [571, 515, 80, 40], "reason": "invalidate paint rectangle" }, + { + "object": "LayoutHTMLCanvas CANVAS id='copyvideo'", + "rect": [571, 515, 80, 40], + "reason": "invalidate paint rectangle" + }, + { + "object": "LayoutHTMLCanvas CANVAS id='destination-atopvideo'", + "rect": [571, 415, 80, 40], + "reason": "invalidate paint rectangle" + }, { "object": "LayoutHTMLCanvas CANVAS id='destination-atopvideo'", "rect": [571, 415, 80, 40], @@ -32,11 +42,26 @@ "rect": [571, 315, 80, 40], "reason": "invalidate paint rectangle" }, + { + "object": "LayoutHTMLCanvas CANVAS id='destination-invideo'", + "rect": [571, 315, 80, 40], + "reason": "invalidate paint rectangle" + }, { "object": "LayoutHTMLCanvas CANVAS id='source-outvideo'", "rect": [571, 165, 80, 40], "reason": "invalidate paint rectangle" }, + { + "object": "LayoutHTMLCanvas CANVAS id='source-outvideo'", + "rect": [571, 165, 80, 40], + "reason": "invalidate paint rectangle" + }, + { + "object": "LayoutHTMLCanvas CANVAS id='source-invideo'", + "rect": [571, 115, 80, 40], + "reason": "invalidate paint rectangle" + }, { "object": "LayoutHTMLCanvas CANVAS id='source-invideo'", "rect": [571, 115, 80, 40], @@ -47,6 +72,16 @@ "rect": [429, 515, 80, 40], "reason": "invalidate paint rectangle" }, + { + "object": "LayoutHTMLCanvas CANVAS id='copycanvas'", + "rect": [429, 515, 80, 40], + "reason": "invalidate paint rectangle" + }, + { + "object": "LayoutHTMLCanvas CANVAS id='destination-atopcanvas'", + "rect": [429, 415, 80, 40], + "reason": "invalidate paint rectangle" + }, { "object": "LayoutHTMLCanvas CANVAS id='destination-atopcanvas'", "rect": [429, 415, 80, 40], @@ -57,6 +92,16 @@ "rect": [429, 315, 80, 40], "reason": "invalidate paint rectangle" }, + { + "object": "LayoutHTMLCanvas CANVAS id='destination-incanvas'", + "rect": [429, 315, 80, 40], + "reason": "invalidate paint rectangle" + }, + { + "object": "LayoutHTMLCanvas CANVAS id='source-outcanvas'", + "rect": [429, 165, 80, 40], + "reason": "invalidate paint rectangle" + }, { "object": "LayoutHTMLCanvas CANVAS id='source-outcanvas'", "rect": [429, 165, 80, 40], @@ -67,6 +112,16 @@ "rect": [429, 115, 80, 40], "reason": "invalidate paint rectangle" }, + { + "object": "LayoutHTMLCanvas CANVAS id='source-incanvas'", + "rect": [429, 115, 80, 40], + "reason": "invalidate paint rectangle" + }, + { + "object": "LayoutHTMLCanvas CANVAS id='copyimage'", + "rect": [287, 515, 80, 40], + "reason": "invalidate paint rectangle" + }, { "object": "LayoutHTMLCanvas CANVAS id='copyimage'", "rect": [287, 515, 80, 40], @@ -77,6 +132,16 @@ "rect": [287, 415, 80, 40], "reason": "invalidate paint rectangle" }, + { + "object": "LayoutHTMLCanvas CANVAS id='destination-atopimage'", + "rect": [287, 415, 80, 40], + "reason": "invalidate paint rectangle" + }, + { + "object": "LayoutHTMLCanvas CANVAS id='destination-inimage'", + "rect": [287, 315, 80, 40], + "reason": "invalidate paint rectangle" + }, { "object": "LayoutHTMLCanvas CANVAS id='destination-inimage'", "rect": [287, 315, 80, 40], @@ -87,11 +152,26 @@ "rect": [287, 165, 80, 40], "reason": "invalidate paint rectangle" }, + { + "object": "LayoutHTMLCanvas CANVAS id='source-outimage'", + "rect": [287, 165, 80, 40], + "reason": "invalidate paint rectangle" + }, { "object": "LayoutHTMLCanvas CANVAS id='source-inimage'", "rect": [287, 115, 80, 40], "reason": "invalidate paint rectangle" }, + { + "object": "LayoutHTMLCanvas CANVAS id='source-inimage'", + "rect": [287, 115, 80, 40], + "reason": "invalidate paint rectangle" + }, + { + "object": "LayoutHTMLCanvas CANVAS id='copysolid color'", + "rect": [145, 515, 80, 40], + "reason": "invalidate paint rectangle" + }, { "object": "LayoutHTMLCanvas CANVAS id='copysolid color'", "rect": [145, 515, 80, 40], @@ -102,6 +182,16 @@ "rect": [145, 415, 80, 40], "reason": "invalidate paint rectangle" }, + { + "object": "LayoutHTMLCanvas CANVAS id='destination-atopsolid color'", + "rect": [145, 415, 80, 40], + "reason": "invalidate paint rectangle" + }, + { + "object": "LayoutHTMLCanvas CANVAS id='destination-insolid color'", + "rect": [145, 315, 80, 40], + "reason": "invalidate paint rectangle" + }, { "object": "LayoutHTMLCanvas CANVAS id='destination-insolid color'", "rect": [145, 315, 80, 40], @@ -112,6 +202,16 @@ "rect": [145, 165, 80, 40], "reason": "invalidate paint rectangle" }, + { + "object": "LayoutHTMLCanvas CANVAS id='source-outsolid color'", + "rect": [145, 165, 80, 40], + "reason": "invalidate paint rectangle" + }, + { + "object": "LayoutHTMLCanvas CANVAS id='source-insolid color'", + "rect": [145, 115, 80, 40], + "reason": "invalidate paint rectangle" + }, { "object": "LayoutHTMLCanvas CANVAS id='source-insolid color'", "rect": [145, 115, 80, 40], @@ -122,6 +222,16 @@ "rect": [601, 565, 50, 40], "reason": "invalidate paint rectangle" }, + { + "object": "LayoutHTMLCanvas CANVAS id='xorvideo'", + "rect": [601, 565, 50, 40], + "reason": "invalidate paint rectangle" + }, + { + "object": "LayoutHTMLCanvas CANVAS id='lightervideo'", + "rect": [601, 465, 50, 40], + "reason": "invalidate paint rectangle" + }, { "object": "LayoutHTMLCanvas CANVAS id='lightervideo'", "rect": [601, 465, 50, 40], @@ -132,6 +242,16 @@ "rect": [601, 365, 50, 40], "reason": "invalidate paint rectangle" }, + { + "object": "LayoutHTMLCanvas CANVAS id='destination-outvideo'", + "rect": [601, 365, 50, 40], + "reason": "invalidate paint rectangle" + }, + { + "object": "LayoutHTMLCanvas CANVAS id='destination-overvideo'", + "rect": [601, 265, 50, 40], + "reason": "invalidate paint rectangle" + }, { "object": "LayoutHTMLCanvas CANVAS id='destination-overvideo'", "rect": [601, 265, 50, 40], @@ -142,11 +262,26 @@ "rect": [601, 215, 50, 40], "reason": "invalidate paint rectangle" }, + { + "object": "LayoutHTMLCanvas CANVAS id='source-atopvideo'", + "rect": [601, 215, 50, 40], + "reason": "invalidate paint rectangle" + }, { "object": "LayoutHTMLCanvas CANVAS id='source-overvideo'", "rect": [601, 65, 50, 40], "reason": "invalidate paint rectangle" }, + { + "object": "LayoutHTMLCanvas CANVAS id='source-overvideo'", + "rect": [601, 65, 50, 40], + "reason": "invalidate paint rectangle" + }, + { + "object": "LayoutHTMLCanvas CANVAS id='xorcanvas'", + "rect": [459, 565, 50, 40], + "reason": "invalidate paint rectangle" + }, { "object": "LayoutHTMLCanvas CANVAS id='xorcanvas'", "rect": [459, 565, 50, 40], @@ -157,6 +292,16 @@ "rect": [459, 465, 50, 40], "reason": "invalidate paint rectangle" }, + { + "object": "LayoutHTMLCanvas CANVAS id='lightercanvas'", + "rect": [459, 465, 50, 40], + "reason": "invalidate paint rectangle" + }, + { + "object": "LayoutHTMLCanvas CANVAS id='destination-outcanvas'", + "rect": [459, 365, 50, 40], + "reason": "invalidate paint rectangle" + }, { "object": "LayoutHTMLCanvas CANVAS id='destination-outcanvas'", "rect": [459, 365, 50, 40], @@ -167,6 +312,16 @@ "rect": [459, 265, 50, 40], "reason": "invalidate paint rectangle" }, + { + "object": "LayoutHTMLCanvas CANVAS id='destination-overcanvas'", + "rect": [459, 265, 50, 40], + "reason": "invalidate paint rectangle" + }, + { + "object": "LayoutHTMLCanvas CANVAS id='source-atopcanvas'", + "rect": [459, 215, 50, 40], + "reason": "invalidate paint rectangle" + }, { "object": "LayoutHTMLCanvas CANVAS id='source-atopcanvas'", "rect": [459, 215, 50, 40], @@ -177,6 +332,16 @@ "rect": [459, 65, 50, 40], "reason": "invalidate paint rectangle" }, + { + "object": "LayoutHTMLCanvas CANVAS id='source-overcanvas'", + "rect": [459, 65, 50, 40], + "reason": "invalidate paint rectangle" + }, + { + "object": "LayoutHTMLCanvas CANVAS id='xorimage'", + "rect": [317, 565, 50, 40], + "reason": "invalidate paint rectangle" + }, { "object": "LayoutHTMLCanvas CANVAS id='xorimage'", "rect": [317, 565, 50, 40], @@ -187,6 +352,16 @@ "rect": [317, 465, 50, 40], "reason": "invalidate paint rectangle" }, + { + "object": "LayoutHTMLCanvas CANVAS id='lighterimage'", + "rect": [317, 465, 50, 40], + "reason": "invalidate paint rectangle" + }, + { + "object": "LayoutHTMLCanvas CANVAS id='destination-outimage'", + "rect": [317, 365, 50, 40], + "reason": "invalidate paint rectangle" + }, { "object": "LayoutHTMLCanvas CANVAS id='destination-outimage'", "rect": [317, 365, 50, 40], @@ -197,11 +372,26 @@ "rect": [317, 265, 50, 40], "reason": "invalidate paint rectangle" }, + { + "object": "LayoutHTMLCanvas CANVAS id='destination-overimage'", + "rect": [317, 265, 50, 40], + "reason": "invalidate paint rectangle" + }, { "object": "LayoutHTMLCanvas CANVAS id='source-atopimage'", "rect": [317, 215, 50, 40], "reason": "invalidate paint rectangle" }, + { + "object": "LayoutHTMLCanvas CANVAS id='source-atopimage'", + "rect": [317, 215, 50, 40], + "reason": "invalidate paint rectangle" + }, + { + "object": "LayoutHTMLCanvas CANVAS id='source-overimage'", + "rect": [317, 65, 50, 40], + "reason": "invalidate paint rectangle" + }, { "object": "LayoutHTMLCanvas CANVAS id='source-overimage'", "rect": [317, 65, 50, 40], @@ -212,6 +402,16 @@ "rect": [175, 565, 50, 40], "reason": "invalidate paint rectangle" }, + { + "object": "LayoutHTMLCanvas CANVAS id='xorsolid color'", + "rect": [175, 565, 50, 40], + "reason": "invalidate paint rectangle" + }, + { + "object": "LayoutHTMLCanvas CANVAS id='lightersolid color'", + "rect": [175, 465, 50, 40], + "reason": "invalidate paint rectangle" + }, { "object": "LayoutHTMLCanvas CANVAS id='lightersolid color'", "rect": [175, 465, 50, 40], @@ -222,6 +422,16 @@ "rect": [175, 365, 50, 40], "reason": "invalidate paint rectangle" }, + { + "object": "LayoutHTMLCanvas CANVAS id='destination-outsolid color'", + "rect": [175, 365, 50, 40], + "reason": "invalidate paint rectangle" + }, + { + "object": "LayoutHTMLCanvas CANVAS id='destination-oversolid color'", + "rect": [175, 265, 50, 40], + "reason": "invalidate paint rectangle" + }, { "object": "LayoutHTMLCanvas CANVAS id='destination-oversolid color'", "rect": [175, 265, 50, 40], @@ -232,6 +442,16 @@ "rect": [175, 215, 50, 40], "reason": "invalidate paint rectangle" }, + { + "object": "LayoutHTMLCanvas CANVAS id='source-atopsolid color'", + "rect": [175, 215, 50, 40], + "reason": "invalidate paint rectangle" + }, + { + "object": "LayoutHTMLCanvas CANVAS id='source-oversolid color'", + "rect": [175, 65, 50, 40], + "reason": "invalidate paint rectangle" + }, { "object": "LayoutHTMLCanvas CANVAS id='source-oversolid color'", "rect": [175, 65, 50, 40], diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/overflow/overflow-update-transform-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/overflow/overflow-update-transform-expected.png index 023d81179e3fe5e0d037beb6affad2893afdc7a4..09d2264c62e89b53ea7879c5e3a64902518b53ad 100644 GIT binary patch literal 5478 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

)KFvi;Uh<^Y+YO53Q{T;MaqZRWfw2< zHFcrr*$LIE+uQk3TS+DOp=OVTE$ce1hPVFrDFK!ZkNyJpn}A;MuS>7~_;tkL~?Gt^P@4 z{J&qES2|U%YyYOXhxoj)y}?zooRFdUzH98I^*HNhf2$Y78%77sE-x z3DAmo=%$q=BQ0HcOCb8C4p%NH(NNmGW}v;j-GzMc1y-Kr2AAU2^cM+Wd53uIdb?!tD0P^ujJ<{JKaihu1;G>}4`ENLL*O zcH<_fO)CvOme;3=^n#~8;1Y(Sa8zF`Cl;mbg-8G=AExYg{XF1cc5 ziwdrhu>jey&x8tv!HcsQgpqwbADDioU^;CPGv&Z_Pd72zvx{wBg9jJL*G=J)gYtTQ zgVQ!lP6lW(f$apCD|jaa*gJ=n$4P_HT?5!CFJfK6NkNLkK_JKcQ$4Y|S1@IE-4{bT zY~xXdNo=;YZ1DTB4$GXk9ilxa3PQA5a|rQUniv-1;}iM6DLL@;e)GC^=-dOiD0f{P zE|M_GX-C`$E{RDXj5Nov1lkN7ai{a-u)0P-TFG0Nz*3gK#&jOl52BPgL4dq8X$Vl7 z0$u^F*z{aXk5NQ0Q+r62d-?=s8V;sjJzK$45$ev_OT{MW00CHR;)9vK#7wQ6G1Hx3 zs@S_7GmQaLo8ApzI)`aM+Ozf5gU>A_B_*(`r^?VwyMF<3k)*f!u%Y3Uj^G-m5S`!w zYzQy+(Ti9V*A)?d-&o?U3rVOvlkp&AvjkBIi1XQl-FGlMDWJCh)@WounwOudgp@ zZA+Xq{#D=AeoeP%;%-ta%i z@%>1aEIE#H?BRn{ToV59g)5@bD|OZUpy9m#Z2tdP$^I`j?EWYep@761N6dTRGbK7< LXl78M&xrjGYGwkX diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/replaced/selection-rect-transform-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/replaced/selection-rect-transform-expected.png index 537ad07973c9088dd9f7a14d9cd6e043f873855d..df00a174469da3570f8388d77e474c116893312b 100644 GIT binary patch literal 6637 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 Hh}-`Hr#%6J literal 6624 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 literal 5471 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 Ihfvr537amS-T(jq diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/box/box-inline-resize-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/box/box-inline-resize-expected.txt index 43f833bb0d8c2c..898a81bdf695d5 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/box/box-inline-resize-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/box/box-inline-resize-expected.txt @@ -20,17 +20,22 @@ { "object": "InlineTextBox 'Chromium'", "rect": [40, 107, 111, 28], - "reason": "geometry" + "reason": "chunk appeared" }, { "object": "InlineTextBox 'Chromium'", "rect": [8, 107, 111, 28], - "reason": "geometry" + "reason": "disappeared" }, { "object": "LayoutImage IMG id='foo'", "rect": [8, 88, 32, 32], "reason": "appeared" + }, + { + "object": "LayoutImage IMG id='foo'", + "rect": [8, 88, 32, 32], + "reason": "chunk appeared" } ] } diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/clip/clipped-relative-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/clip/clipped-relative-expected.txt index 4ba8da10a263b2..f1221fa5ada273 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/clip/clipped-relative-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/clip/clipped-relative-expected.txt @@ -22,6 +22,11 @@ "rect": [8, 74, 204, 232], "reason": "geometry" }, + { + "object": "LayoutImage IMG", + "rect": [102, 74, 110, 232], + "reason": "incremental" + }, { "object": "LayoutImage IMG", "rect": [8, 74, 94, 232], diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt index e62a20cc4b3a5f..be9955c571af5a 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt @@ -22,6 +22,16 @@ "rect": [569, 515, 80, 40], "reason": "invalidate paint rectangle" }, + { + "object": "LayoutHTMLCanvas CANVAS id='copyvideo'", + "rect": [569, 515, 80, 40], + "reason": "invalidate paint rectangle" + }, + { + "object": "LayoutHTMLCanvas CANVAS id='destination-atopvideo'", + "rect": [569, 415, 80, 40], + "reason": "invalidate paint rectangle" + }, { "object": "LayoutHTMLCanvas CANVAS id='destination-atopvideo'", "rect": [569, 415, 80, 40], @@ -32,11 +42,26 @@ "rect": [569, 315, 80, 40], "reason": "invalidate paint rectangle" }, + { + "object": "LayoutHTMLCanvas CANVAS id='destination-invideo'", + "rect": [569, 315, 80, 40], + "reason": "invalidate paint rectangle" + }, { "object": "LayoutHTMLCanvas CANVAS id='source-outvideo'", "rect": [569, 165, 80, 40], "reason": "invalidate paint rectangle" }, + { + "object": "LayoutHTMLCanvas CANVAS id='source-outvideo'", + "rect": [569, 165, 80, 40], + "reason": "invalidate paint rectangle" + }, + { + "object": "LayoutHTMLCanvas CANVAS id='source-invideo'", + "rect": [569, 115, 80, 40], + "reason": "invalidate paint rectangle" + }, { "object": "LayoutHTMLCanvas CANVAS id='source-invideo'", "rect": [569, 115, 80, 40], @@ -47,6 +72,16 @@ "rect": [427, 515, 80, 40], "reason": "invalidate paint rectangle" }, + { + "object": "LayoutHTMLCanvas CANVAS id='copycanvas'", + "rect": [427, 515, 80, 40], + "reason": "invalidate paint rectangle" + }, + { + "object": "LayoutHTMLCanvas CANVAS id='destination-atopcanvas'", + "rect": [427, 415, 80, 40], + "reason": "invalidate paint rectangle" + }, { "object": "LayoutHTMLCanvas CANVAS id='destination-atopcanvas'", "rect": [427, 415, 80, 40], @@ -57,6 +92,16 @@ "rect": [427, 315, 80, 40], "reason": "invalidate paint rectangle" }, + { + "object": "LayoutHTMLCanvas CANVAS id='destination-incanvas'", + "rect": [427, 315, 80, 40], + "reason": "invalidate paint rectangle" + }, + { + "object": "LayoutHTMLCanvas CANVAS id='source-outcanvas'", + "rect": [427, 165, 80, 40], + "reason": "invalidate paint rectangle" + }, { "object": "LayoutHTMLCanvas CANVAS id='source-outcanvas'", "rect": [427, 165, 80, 40], @@ -67,6 +112,16 @@ "rect": [427, 115, 80, 40], "reason": "invalidate paint rectangle" }, + { + "object": "LayoutHTMLCanvas CANVAS id='source-incanvas'", + "rect": [427, 115, 80, 40], + "reason": "invalidate paint rectangle" + }, + { + "object": "LayoutHTMLCanvas CANVAS id='copyimage'", + "rect": [285, 515, 80, 40], + "reason": "invalidate paint rectangle" + }, { "object": "LayoutHTMLCanvas CANVAS id='copyimage'", "rect": [285, 515, 80, 40], @@ -77,6 +132,16 @@ "rect": [285, 415, 80, 40], "reason": "invalidate paint rectangle" }, + { + "object": "LayoutHTMLCanvas CANVAS id='destination-atopimage'", + "rect": [285, 415, 80, 40], + "reason": "invalidate paint rectangle" + }, + { + "object": "LayoutHTMLCanvas CANVAS id='destination-inimage'", + "rect": [285, 315, 80, 40], + "reason": "invalidate paint rectangle" + }, { "object": "LayoutHTMLCanvas CANVAS id='destination-inimage'", "rect": [285, 315, 80, 40], @@ -87,11 +152,26 @@ "rect": [285, 165, 80, 40], "reason": "invalidate paint rectangle" }, + { + "object": "LayoutHTMLCanvas CANVAS id='source-outimage'", + "rect": [285, 165, 80, 40], + "reason": "invalidate paint rectangle" + }, { "object": "LayoutHTMLCanvas CANVAS id='source-inimage'", "rect": [285, 115, 80, 40], "reason": "invalidate paint rectangle" }, + { + "object": "LayoutHTMLCanvas CANVAS id='source-inimage'", + "rect": [285, 115, 80, 40], + "reason": "invalidate paint rectangle" + }, + { + "object": "LayoutHTMLCanvas CANVAS id='copysolid color'", + "rect": [143, 515, 80, 40], + "reason": "invalidate paint rectangle" + }, { "object": "LayoutHTMLCanvas CANVAS id='copysolid color'", "rect": [143, 515, 80, 40], @@ -102,6 +182,16 @@ "rect": [143, 415, 80, 40], "reason": "invalidate paint rectangle" }, + { + "object": "LayoutHTMLCanvas CANVAS id='destination-atopsolid color'", + "rect": [143, 415, 80, 40], + "reason": "invalidate paint rectangle" + }, + { + "object": "LayoutHTMLCanvas CANVAS id='destination-insolid color'", + "rect": [143, 315, 80, 40], + "reason": "invalidate paint rectangle" + }, { "object": "LayoutHTMLCanvas CANVAS id='destination-insolid color'", "rect": [143, 315, 80, 40], @@ -112,6 +202,16 @@ "rect": [143, 165, 80, 40], "reason": "invalidate paint rectangle" }, + { + "object": "LayoutHTMLCanvas CANVAS id='source-outsolid color'", + "rect": [143, 165, 80, 40], + "reason": "invalidate paint rectangle" + }, + { + "object": "LayoutHTMLCanvas CANVAS id='source-insolid color'", + "rect": [143, 115, 80, 40], + "reason": "invalidate paint rectangle" + }, { "object": "LayoutHTMLCanvas CANVAS id='source-insolid color'", "rect": [143, 115, 80, 40], @@ -122,6 +222,16 @@ "rect": [599, 565, 50, 40], "reason": "invalidate paint rectangle" }, + { + "object": "LayoutHTMLCanvas CANVAS id='xorvideo'", + "rect": [599, 565, 50, 40], + "reason": "invalidate paint rectangle" + }, + { + "object": "LayoutHTMLCanvas CANVAS id='lightervideo'", + "rect": [599, 465, 50, 40], + "reason": "invalidate paint rectangle" + }, { "object": "LayoutHTMLCanvas CANVAS id='lightervideo'", "rect": [599, 465, 50, 40], @@ -132,6 +242,16 @@ "rect": [599, 365, 50, 40], "reason": "invalidate paint rectangle" }, + { + "object": "LayoutHTMLCanvas CANVAS id='destination-outvideo'", + "rect": [599, 365, 50, 40], + "reason": "invalidate paint rectangle" + }, + { + "object": "LayoutHTMLCanvas CANVAS id='destination-overvideo'", + "rect": [599, 265, 50, 40], + "reason": "invalidate paint rectangle" + }, { "object": "LayoutHTMLCanvas CANVAS id='destination-overvideo'", "rect": [599, 265, 50, 40], @@ -142,11 +262,26 @@ "rect": [599, 215, 50, 40], "reason": "invalidate paint rectangle" }, + { + "object": "LayoutHTMLCanvas CANVAS id='source-atopvideo'", + "rect": [599, 215, 50, 40], + "reason": "invalidate paint rectangle" + }, { "object": "LayoutHTMLCanvas CANVAS id='source-overvideo'", "rect": [599, 65, 50, 40], "reason": "invalidate paint rectangle" }, + { + "object": "LayoutHTMLCanvas CANVAS id='source-overvideo'", + "rect": [599, 65, 50, 40], + "reason": "invalidate paint rectangle" + }, + { + "object": "LayoutHTMLCanvas CANVAS id='xorcanvas'", + "rect": [457, 565, 50, 40], + "reason": "invalidate paint rectangle" + }, { "object": "LayoutHTMLCanvas CANVAS id='xorcanvas'", "rect": [457, 565, 50, 40], @@ -157,6 +292,16 @@ "rect": [457, 465, 50, 40], "reason": "invalidate paint rectangle" }, + { + "object": "LayoutHTMLCanvas CANVAS id='lightercanvas'", + "rect": [457, 465, 50, 40], + "reason": "invalidate paint rectangle" + }, + { + "object": "LayoutHTMLCanvas CANVAS id='destination-outcanvas'", + "rect": [457, 365, 50, 40], + "reason": "invalidate paint rectangle" + }, { "object": "LayoutHTMLCanvas CANVAS id='destination-outcanvas'", "rect": [457, 365, 50, 40], @@ -167,6 +312,16 @@ "rect": [457, 265, 50, 40], "reason": "invalidate paint rectangle" }, + { + "object": "LayoutHTMLCanvas CANVAS id='destination-overcanvas'", + "rect": [457, 265, 50, 40], + "reason": "invalidate paint rectangle" + }, + { + "object": "LayoutHTMLCanvas CANVAS id='source-atopcanvas'", + "rect": [457, 215, 50, 40], + "reason": "invalidate paint rectangle" + }, { "object": "LayoutHTMLCanvas CANVAS id='source-atopcanvas'", "rect": [457, 215, 50, 40], @@ -177,6 +332,16 @@ "rect": [457, 65, 50, 40], "reason": "invalidate paint rectangle" }, + { + "object": "LayoutHTMLCanvas CANVAS id='source-overcanvas'", + "rect": [457, 65, 50, 40], + "reason": "invalidate paint rectangle" + }, + { + "object": "LayoutHTMLCanvas CANVAS id='xorimage'", + "rect": [315, 565, 50, 40], + "reason": "invalidate paint rectangle" + }, { "object": "LayoutHTMLCanvas CANVAS id='xorimage'", "rect": [315, 565, 50, 40], @@ -187,6 +352,16 @@ "rect": [315, 465, 50, 40], "reason": "invalidate paint rectangle" }, + { + "object": "LayoutHTMLCanvas CANVAS id='lighterimage'", + "rect": [315, 465, 50, 40], + "reason": "invalidate paint rectangle" + }, + { + "object": "LayoutHTMLCanvas CANVAS id='destination-outimage'", + "rect": [315, 365, 50, 40], + "reason": "invalidate paint rectangle" + }, { "object": "LayoutHTMLCanvas CANVAS id='destination-outimage'", "rect": [315, 365, 50, 40], @@ -197,11 +372,26 @@ "rect": [315, 265, 50, 40], "reason": "invalidate paint rectangle" }, + { + "object": "LayoutHTMLCanvas CANVAS id='destination-overimage'", + "rect": [315, 265, 50, 40], + "reason": "invalidate paint rectangle" + }, { "object": "LayoutHTMLCanvas CANVAS id='source-atopimage'", "rect": [315, 215, 50, 40], "reason": "invalidate paint rectangle" }, + { + "object": "LayoutHTMLCanvas CANVAS id='source-atopimage'", + "rect": [315, 215, 50, 40], + "reason": "invalidate paint rectangle" + }, + { + "object": "LayoutHTMLCanvas CANVAS id='source-overimage'", + "rect": [315, 65, 50, 40], + "reason": "invalidate paint rectangle" + }, { "object": "LayoutHTMLCanvas CANVAS id='source-overimage'", "rect": [315, 65, 50, 40], @@ -212,6 +402,16 @@ "rect": [173, 565, 50, 40], "reason": "invalidate paint rectangle" }, + { + "object": "LayoutHTMLCanvas CANVAS id='xorsolid color'", + "rect": [173, 565, 50, 40], + "reason": "invalidate paint rectangle" + }, + { + "object": "LayoutHTMLCanvas CANVAS id='lightersolid color'", + "rect": [173, 465, 50, 40], + "reason": "invalidate paint rectangle" + }, { "object": "LayoutHTMLCanvas CANVAS id='lightersolid color'", "rect": [173, 465, 50, 40], @@ -222,6 +422,16 @@ "rect": [173, 365, 50, 40], "reason": "invalidate paint rectangle" }, + { + "object": "LayoutHTMLCanvas CANVAS id='destination-outsolid color'", + "rect": [173, 365, 50, 40], + "reason": "invalidate paint rectangle" + }, + { + "object": "LayoutHTMLCanvas CANVAS id='destination-oversolid color'", + "rect": [173, 265, 50, 40], + "reason": "invalidate paint rectangle" + }, { "object": "LayoutHTMLCanvas CANVAS id='destination-oversolid color'", "rect": [173, 265, 50, 40], @@ -232,6 +442,16 @@ "rect": [173, 215, 50, 40], "reason": "invalidate paint rectangle" }, + { + "object": "LayoutHTMLCanvas CANVAS id='source-atopsolid color'", + "rect": [173, 215, 50, 40], + "reason": "invalidate paint rectangle" + }, + { + "object": "LayoutHTMLCanvas CANVAS id='source-oversolid color'", + "rect": [173, 65, 50, 40], + "reason": "invalidate paint rectangle" + }, { "object": "LayoutHTMLCanvas CANVAS id='source-oversolid color'", "rect": [173, 65, 50, 40], diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/list-marker-2-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/list-marker-2-expected.txt index e7355168c172fc..66306cabf8c335 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/list-marker-2-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/list-marker-2-expected.txt @@ -22,6 +22,11 @@ "rect": [48, 100, 100, 100], "reason": "geometry" }, + { + "object": "LayoutImage IMG id='target'", + "rect": [48, 150, 100, 50], + "reason": "incremental" + }, { "object": "LayoutListMarker (anonymous)", "rect": [30, 185, 7, 19], diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/position/positioned-list-offset-change-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/position/positioned-list-offset-change-repaint-expected.txt index e319b61848bc4e..829cd3691b41f4 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/position/positioned-list-offset-change-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/position/positioned-list-offset-change-repaint-expected.txt @@ -26,6 +26,11 @@ "object": "LayoutImage IMG", "rect": [8, 64, 114, 232], "reason": "geometry" + }, + { + "object": "LayoutImage IMG", + "rect": [122, 64, 100, 232], + "reason": "incremental" } ] } diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/selected-replaced-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/selected-replaced-expected.txt index 377adb50b44dc8..812b604d1995e1 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/selected-replaced-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/selected-replaced-expected.txt @@ -19,13 +19,23 @@ "paintInvalidations": [ { "object": "LayoutImage (relative positioned) IMG id='test' class='moved'", - "rect": [8, 132, 214, 232], + "rect": [8, 52, 214, 232], "reason": "geometry" }, { "object": "LayoutImage (relative positioned) IMG id='test' class='moved'", - "rect": [8, 52, 214, 232], + "rect": [8, 132, 214, 152], "reason": "geometry" + }, + { + "object": "LayoutImage (relative positioned) IMG id='test' class='moved'", + "rect": [8, 284, 214, 80], + "reason": "incremental" + }, + { + "object": "LayoutImage (relative positioned) IMG id='test' class='moved'", + "rect": [8, 52, 214, 80], + "reason": "incremental" } ] } diff --git a/third_party/blink/renderer/core/layout/layout_embedded_content.cc b/third_party/blink/renderer/core/layout/layout_embedded_content.cc index 9b1a6882638a89..b34ce05206b718 100644 --- a/third_party/blink/renderer/core/layout/layout_embedded_content.cc +++ b/third_party/blink/renderer/core/layout/layout_embedded_content.cc @@ -271,14 +271,10 @@ void LayoutEmbeddedContent::UpdateLayout() { ClearNeedsLayout(); } -void LayoutEmbeddedContent::Paint(const PaintInfo& paint_info) const { - EmbeddedContentPainter(*this).Paint(paint_info); -} - -void LayoutEmbeddedContent::PaintContents( +void LayoutEmbeddedContent::PaintReplaced( const PaintInfo& paint_info, const LayoutPoint& paint_offset) const { - EmbeddedContentPainter(*this).PaintContents(paint_info, paint_offset); + EmbeddedContentPainter(*this).PaintReplaced(paint_info, paint_offset); } CursorDirective LayoutEmbeddedContent::GetCursor(const LayoutPoint& point, diff --git a/third_party/blink/renderer/core/layout/layout_embedded_content.h b/third_party/blink/renderer/core/layout/layout_embedded_content.h index 03a429008ef891..dd85f9b148fc0d 100644 --- a/third_party/blink/renderer/core/layout/layout_embedded_content.h +++ b/third_party/blink/renderer/core/layout/layout_embedded_content.h @@ -63,8 +63,6 @@ class CORE_EXPORT LayoutEmbeddedContent : public LayoutReplaced { void UpdateGeometry(EmbeddedContentView&); bool IsLayoutEmbeddedContent() const final { return true; } - virtual void PaintContents(const PaintInfo&, - const LayoutPoint& paint_offset) const; bool IsThrottledFrameView() const; @@ -73,7 +71,8 @@ class CORE_EXPORT LayoutEmbeddedContent : public LayoutReplaced { void StyleDidChange(StyleDifference, const ComputedStyle* old_style) final; void UpdateLayout() override; - void Paint(const PaintInfo&) const override; + void PaintReplaced(const PaintInfo&, + const LayoutPoint& paint_offset) const override; CursorDirective GetCursor(const LayoutPoint&, Cursor&) const final; bool CanBeSelectionLeafInternal() const final { return true; } diff --git a/third_party/blink/renderer/core/layout/layout_embedded_object.cc b/third_party/blink/renderer/core/layout/layout_embedded_object.cc index 696c65e019fb8c..7baf19bcf23b7a 100644 --- a/third_party/blink/renderer/core/layout/layout_embedded_object.cc +++ b/third_party/blink/renderer/core/layout/layout_embedded_object.cc @@ -83,25 +83,6 @@ bool LayoutEmbeddedObject::ShowsUnavailablePluginIndicator() const { return plugin_availability_ != kPluginAvailable; } -void LayoutEmbeddedObject::PaintContents( - const PaintInfo& paint_info, - const LayoutPoint& paint_offset) const { - Element* element = ToElement(GetNode()); - if (!IsHTMLPlugInElement(element)) - return; - - LayoutEmbeddedContent::PaintContents(paint_info, paint_offset); -} - -void LayoutEmbeddedObject::Paint(const PaintInfo& paint_info) const { - if (ShowsUnavailablePluginIndicator()) { - LayoutReplaced::Paint(paint_info); - return; - } - - LayoutEmbeddedContent::Paint(paint_info); -} - void LayoutEmbeddedObject::PaintReplaced( const PaintInfo& paint_info, const LayoutPoint& paint_offset) const { diff --git a/third_party/blink/renderer/core/layout/layout_embedded_object.h b/third_party/blink/renderer/core/layout/layout_embedded_object.h index 88d4ea15a1aabe..8ee32cd7923cc8 100644 --- a/third_party/blink/renderer/core/layout/layout_embedded_object.h +++ b/third_party/blink/renderer/core/layout/layout_embedded_object.h @@ -50,11 +50,8 @@ class LayoutEmbeddedObject final : public LayoutEmbeddedContent { } private: - void PaintContents(const PaintInfo&, - const LayoutPoint& paint_offset) const final; void PaintReplaced(const PaintInfo&, const LayoutPoint& paint_offset) const final; - void Paint(const PaintInfo&) const final; PaintInvalidationReason InvalidatePaint( const PaintInvalidatorContext&) const final; diff --git a/third_party/blink/renderer/core/paint/embedded_content_painter.cc b/third_party/blink/renderer/core/paint/embedded_content_painter.cc index ca814c2d8f4f51..e75323dcb9e8de 100644 --- a/third_party/blink/renderer/core/paint/embedded_content_painter.cc +++ b/third_party/blink/renderer/core/paint/embedded_content_painter.cc @@ -20,104 +20,12 @@ namespace blink { -bool EmbeddedContentPainter::IsSelected() const { - SelectionState s = layout_embedded_content_.GetSelectionState(); - if (s == SelectionState::kNone) - return false; - - return true; -} - -void EmbeddedContentPainter::Paint(const PaintInfo& paint_info) { - // TODO(crbug.com/797779): For now embedded contents don't know whether - // they are painted in a fragmented context and may do something bad in a - // fragmented context, e.g. creating subsequences. Skip cache to avoid that. - // This will be unnecessary when the contents are fragment aware. - base::Optional cache_skipper; - DCHECK(layout_embedded_content_.HasLayer()); - if (layout_embedded_content_.Layer()->EnclosingPaginationLayer()) - cache_skipper.emplace(paint_info.context); - - AdjustPaintOffsetScope adjustment(layout_embedded_content_, paint_info); - const auto& local_paint_info = adjustment.GetPaintInfo(); - auto paint_offset = adjustment.PaintOffset(); - if (!ReplacedPainter(layout_embedded_content_) - .ShouldPaint(local_paint_info, paint_offset)) - return; - - if (layout_embedded_content_.HasBoxDecorationBackground() && - (local_paint_info.phase == PaintPhase::kForeground || - local_paint_info.phase == PaintPhase::kSelection)) { - BoxPainter(layout_embedded_content_) - .PaintBoxDecorationBackground(local_paint_info, paint_offset); - } - - if (local_paint_info.phase == PaintPhase::kMask) { - BoxPainter(layout_embedded_content_) - .PaintMask(local_paint_info, paint_offset); - return; - } - - if (ShouldPaintSelfOutline(local_paint_info.phase)) { - ObjectPainter(layout_embedded_content_) - .PaintOutline(local_paint_info, paint_offset); - } - - if (local_paint_info.phase != PaintPhase::kForeground) - return; - - if (layout_embedded_content_.GetEmbeddedContentView()) { - LayoutRect border_rect(paint_offset, layout_embedded_content_.Size()); - if (border_rect.IsEmpty()) - return; - - base::Optional scoped_paint_chunk_properties; - const auto* fragment = - local_paint_info.FragmentToPaint(layout_embedded_content_); - if (!fragment) - return; - const auto* properties = fragment->PaintProperties(); - - if (properties && properties->OverflowClip()) { - scoped_paint_chunk_properties.emplace( - local_paint_info.context.GetPaintController(), - properties->OverflowClip(), layout_embedded_content_, - DisplayItem::PaintPhaseToDrawingType(local_paint_info.phase)); - } - - layout_embedded_content_.PaintContents(local_paint_info, paint_offset); - } - - // Paint a partially transparent wash over selected EmbeddedContentViews. - if (IsSelected() && !local_paint_info.IsPrinting() && - !DrawingRecorder::UseCachedDrawingIfPossible(local_paint_info.context, - layout_embedded_content_, - local_paint_info.phase)) { - LayoutRect rect = layout_embedded_content_.LocalSelectionRect(); - rect.MoveBy(paint_offset); - IntRect selection_rect = PixelSnappedIntRect(rect); - DrawingRecorder recorder(local_paint_info.context, layout_embedded_content_, - local_paint_info.phase); - Color selection_bg = SelectionPaintingUtils::SelectionBackgroundColor( - layout_embedded_content_.GetDocument(), - layout_embedded_content_.StyleRef(), - layout_embedded_content_.GetNode()); - local_paint_info.context.FillRect(selection_rect, selection_bg); - } - - if (layout_embedded_content_.CanResize()) { - ScrollableAreaPainter( - *layout_embedded_content_.Layer()->GetScrollableArea()) - .PaintResizer(local_paint_info.context, RoundedIntPoint(paint_offset), - local_paint_info.GetCullRect()); - } -} - -void EmbeddedContentPainter::PaintContents(const PaintInfo& paint_info, +void EmbeddedContentPainter::PaintReplaced(const PaintInfo& paint_info, const LayoutPoint& paint_offset) { EmbeddedContentView* embedded_content_view = layout_embedded_content_.GetEmbeddedContentView(); - CHECK(embedded_content_view); + if (!embedded_content_view) + return; IntPoint paint_location(RoundedIntPoint( paint_offset + diff --git a/third_party/blink/renderer/core/paint/embedded_content_painter.h b/third_party/blink/renderer/core/paint/embedded_content_painter.h index ea101cd1d3e8b0..b72a09dc1f5cc2 100644 --- a/third_party/blink/renderer/core/paint/embedded_content_painter.h +++ b/third_party/blink/renderer/core/paint/embedded_content_painter.h @@ -20,12 +20,9 @@ class EmbeddedContentPainter { EmbeddedContentPainter(const LayoutEmbeddedContent& layout_embedded_content) : layout_embedded_content_(layout_embedded_content) {} - void Paint(const PaintInfo&); - void PaintContents(const PaintInfo&, const LayoutPoint& paint_offset); + void PaintReplaced(const PaintInfo&, const LayoutPoint& paint_offset); private: - bool IsSelected() const; - const LayoutEmbeddedContent& layout_embedded_content_; }; diff --git a/third_party/blink/renderer/core/paint/embedded_object_painter.cc b/third_party/blink/renderer/core/paint/embedded_object_painter.cc index 2b2790e7d06c10..99c1b77a7f65d8 100644 --- a/third_party/blink/renderer/core/paint/embedded_object_painter.cc +++ b/third_party/blink/renderer/core/paint/embedded_object_painter.cc @@ -7,6 +7,7 @@ #include "third_party/blink/renderer/core/frame/settings.h" #include "third_party/blink/renderer/core/layout/layout_embedded_object.h" #include "third_party/blink/renderer/core/layout/layout_theme.h" +#include "third_party/blink/renderer/core/paint/embedded_content_painter.h" #include "third_party/blink/renderer/core/paint/paint_info.h" #include "third_party/blink/renderer/platform/fonts/font.h" #include "third_party/blink/renderer/platform/fonts/font_selector.h" @@ -37,8 +38,11 @@ static Font ReplacementTextFont() { void EmbeddedObjectPainter::PaintReplaced(const PaintInfo& paint_info, const LayoutPoint& paint_offset) { - if (!layout_embedded_object_.ShowsUnavailablePluginIndicator()) + if (!layout_embedded_object_.ShowsUnavailablePluginIndicator()) { + EmbeddedContentPainter(layout_embedded_object_) + .PaintReplaced(paint_info, paint_offset); return; + } if (paint_info.phase == PaintPhase::kSelection) return; diff --git a/third_party/blink/renderer/core/paint/html_canvas_painter.cc b/third_party/blink/renderer/core/paint/html_canvas_painter.cc index be38ebb0e883d3..a5692927314b46 100644 --- a/third_party/blink/renderer/core/paint/html_canvas_painter.cc +++ b/third_party/blink/renderer/core/paint/html_canvas_painter.cc @@ -33,8 +33,6 @@ void HTMLCanvasPainter::PaintReplaced(const PaintInfo& paint_info, const LayoutPoint& paint_offset) { GraphicsContext& context = paint_info.context; - LayoutRect content_rect = layout_html_canvas_.ContentBoxRect(); - content_rect.MoveBy(paint_offset); LayoutRect paint_rect = layout_html_canvas_.ReplacedContentRect(); paint_rect.MoveBy(paint_offset); @@ -45,7 +43,7 @@ void HTMLCanvasPainter::PaintReplaced(const PaintInfo& paint_info, canvas->RenderingContext() && canvas->RenderingContext()->IsComposited()) { if (cc::Layer* layer = canvas->RenderingContext()->CcLayer()) { - IntRect pixel_snapped_rect = PixelSnappedIntRect(content_rect); + IntRect pixel_snapped_rect = PixelSnappedIntRect(paint_rect); layer->SetBounds(static_cast(pixel_snapped_rect.Size())); layer->SetIsDrawable(true); RecordForeignLayer( @@ -60,22 +58,9 @@ void HTMLCanvasPainter::PaintReplaced(const PaintInfo& paint_info, return; DrawingRecorder recorder(context, layout_html_canvas_, paint_info.phase); - - bool clip = !content_rect.Contains(paint_rect); - if (clip) { - context.Save(); - // TODO(chrishtr): this should be pixel-snapped. - context.Clip(FloatRect(content_rect)); - } - - { - ScopedInterpolationQuality interpolation_quality_scope( - context, InterpolationQualityForCanvas(layout_html_canvas_.StyleRef())); - canvas->Paint(context, paint_rect); - } - - if (clip) - context.Restore(); + ScopedInterpolationQuality interpolation_quality_scope( + context, InterpolationQualityForCanvas(layout_html_canvas_.StyleRef())); + canvas->Paint(context, paint_rect); } } // namespace blink diff --git a/third_party/blink/renderer/core/paint/object_paint_invalidator_test.cc b/third_party/blink/renderer/core/paint/object_paint_invalidator_test.cc index 30701f663e6e61..7b7a39ede81ee7 100644 --- a/third_party/blink/renderer/core/paint/object_paint_invalidator_test.cc +++ b/third_party/blink/renderer/core/paint/object_paint_invalidator_test.cc @@ -337,9 +337,11 @@ TEST_F(ObjectPaintInvalidatorTest, Selection) { const auto* graphics_layer = GetLayoutView().Layer()->GraphicsLayerBacking(); const auto* invalidations = &graphics_layer->GetRasterInvalidationTracking()->Invalidations(); - ASSERT_EQ(1u, invalidations->size()); + ASSERT_EQ(2u, invalidations->size()); EXPECT_EQ(IntRect(8, 8, 100, 100), (*invalidations)[0].rect); EXPECT_EQ(PaintInvalidationReason::kSelection, (*invalidations)[0].reason); + EXPECT_EQ(IntRect(8, 8, 100, 100), (*invalidations)[1].rect); + EXPECT_EQ(PaintInvalidationReason::kChunkAppeared, (*invalidations)[1].reason); EXPECT_EQ(LayoutRect(8, 8, 100, 100), target->SelectionVisualRect()); GetDocument().View()->SetTracksPaintInvalidations(false); @@ -359,9 +361,11 @@ TEST_F(ObjectPaintInvalidatorTest, Selection) { GetDocument().View()->UpdateAllLifecyclePhases(); invalidations = &graphics_layer->GetRasterInvalidationTracking()->Invalidations(); - ASSERT_EQ(1u, invalidations->size()); + ASSERT_EQ(2u, invalidations->size()); EXPECT_EQ(IntRect(8, 8, 100, 100), (*invalidations)[0].rect); EXPECT_EQ(PaintInvalidationReason::kSelection, (*invalidations)[0].reason); + EXPECT_EQ(IntRect(8, 8, 100, 100), (*invalidations)[1].rect); + EXPECT_EQ(PaintInvalidationReason::kChunkDisappeared, (*invalidations)[1].reason); EXPECT_EQ(LayoutRect(), target->SelectionVisualRect()); GetDocument().View()->SetTracksPaintInvalidations(false); } diff --git a/third_party/blink/renderer/core/paint/replaced_painter.cc b/third_party/blink/renderer/core/paint/replaced_painter.cc index 820d3cedc69387..923bb72c01ca51 100644 --- a/third_party/blink/renderer/core/paint/replaced_painter.cc +++ b/third_party/blink/renderer/core/paint/replaced_painter.cc @@ -15,13 +15,26 @@ #include "third_party/blink/renderer/core/paint/paint_info.h" #include "third_party/blink/renderer/core/paint/paint_layer.h" #include "third_party/blink/renderer/core/paint/rounded_inner_rect_clipper.h" +#include "third_party/blink/renderer/core/paint/scrollable_area_painter.h" #include "third_party/blink/renderer/core/paint/selection_painting_utils.h" +#include "third_party/blink/renderer/platform/graphics/paint/display_item_cache_skipper.h" #include "third_party/blink/renderer/platform/graphics/paint/drawing_recorder.h" #include "third_party/blink/renderer/platform/graphics/paint/scoped_paint_chunk_properties.h" namespace blink { void ReplacedPainter::Paint(const PaintInfo& paint_info) { + // TODO(crbug.com/797779): For now embedded contents don't know whether + // they are painted in a fragmented context and may do something bad in a + // fragmented context, e.g. creating subsequences. Skip cache to avoid that. + // This will be unnecessary when the contents are fragment aware. + base::Optional cache_skipper; + if (layout_replaced_.IsLayoutEmbeddedContent()) { + DCHECK(layout_replaced_.HasLayer()); + if (layout_replaced_.Layer()->EnclosingPaginationLayer()) + cache_skipper.emplace(paint_info.context); + } + AdjustPaintOffsetScope adjustment(layout_replaced_, paint_info); const auto& local_paint_info = adjustment.GetPaintInfo(); auto paint_offset = adjustment.PaintOffset(); @@ -32,7 +45,7 @@ void ReplacedPainter::Paint(const PaintInfo& paint_info) { LayoutRect border_rect(paint_offset, layout_replaced_.Size()); if (ShouldPaintSelfBlockBackground(local_paint_info.phase)) { - if (layout_replaced_.Style()->Visibility() == EVisibility::kVisible && + if (layout_replaced_.StyleRef().Visibility() == EVisibility::kVisible && layout_replaced_.HasBoxDecorationBackground()) { if (layout_replaced_.HasLayer() && layout_replaced_.Layer()->GetCompositingState() == @@ -42,8 +55,8 @@ void ReplacedPainter::Paint(const PaintInfo& paint_info) { ->DrawsBackgroundOntoContentLayer()) return; - layout_replaced_.PaintBoxDecorationBackground(local_paint_info, - paint_offset); + BoxPainter(layout_replaced_) + .PaintBoxDecorationBackground(local_paint_info, paint_offset); } // We're done. We don't bother painting any children. if (local_paint_info.phase == PaintPhase::kSelfBlockBackgroundOnly) @@ -51,7 +64,7 @@ void ReplacedPainter::Paint(const PaintInfo& paint_info) { } if (local_paint_info.phase == PaintPhase::kMask) { - layout_replaced_.PaintMask(local_paint_info, paint_offset); + BoxPainter(layout_replaced_).PaintMask(local_paint_info, paint_offset); return; } @@ -70,38 +83,37 @@ void ReplacedPainter::Paint(const PaintInfo& paint_info) { layout_replaced_.GetSelectionState() == SelectionState::kNone) return; - { + bool skip_clip = layout_replaced_.IsSVGRoot() && + !ToLayoutSVGRoot(layout_replaced_).ShouldApplyViewportClip(); + if (skip_clip || !layout_replaced_.ContentBoxRect().IsEmpty()) { base::Optional chunk_properties; - bool completely_clipped_out = false; - - if (layout_replaced_.Style()->HasBorderRadius() && border_rect.IsEmpty()) - completely_clipped_out = true; - - if (!layout_replaced_.IsSVGRoot()) { - if (const auto* fragment = paint_info.FragmentToPaint(layout_replaced_)) { - if (const auto* paint_properties = fragment->PaintProperties()) { - // Check filter for optimized image policy violation highlights, which - // may be applied locally. - if (paint_properties->Filter() && - (!layout_replaced_.HasLayer() || - !layout_replaced_.Layer()->IsSelfPaintingLayer())) { - chunk_properties.emplace( - local_paint_info.context.GetPaintController(), - fragment->ContentsProperties(), layout_replaced_, - DisplayItem::PaintPhaseToDrawingType(local_paint_info.phase)); - } else if (layout_replaced_.Style()->HasBorderRadius()) { - DCHECK(paint_properties->OverflowClip()); - chunk_properties.emplace( - local_paint_info.context.GetPaintController(), - paint_properties->OverflowClip(), layout_replaced_, - DisplayItem::PaintPhaseToDrawingType(local_paint_info.phase)); - } + if (const auto* fragment = paint_info.FragmentToPaint(layout_replaced_)) { + if (const auto* paint_properties = fragment->PaintProperties()) { + // Check filter for optimized image policy violation highlights, which + // may be applied locally. + if (paint_properties->Filter() && + (!layout_replaced_.HasLayer() || + !layout_replaced_.Layer()->IsSelfPaintingLayer())) { + chunk_properties.emplace( + local_paint_info.context.GetPaintController(), + fragment->ContentsProperties(), layout_replaced_, + paint_info.DisplayItemTypeForClipping()); + } else if (paint_properties->OverflowClip()) { + chunk_properties.emplace( + local_paint_info.context.GetPaintController(), + paint_properties->OverflowClip(), layout_replaced_, + paint_info.DisplayItemTypeForClipping()); } } } - if (!completely_clipped_out) - layout_replaced_.PaintReplaced(local_paint_info, paint_offset); + layout_replaced_.PaintReplaced(local_paint_info, paint_offset); + } + + if (layout_replaced_.CanResize()) { + ScrollableAreaPainter(*layout_replaced_.Layer()->GetScrollableArea()) + .PaintResizer(local_paint_info.context, RoundedIntPoint(paint_offset), + local_paint_info.GetCullRect()); } // The selection tint never gets clipped by border-radius rounding, since we diff --git a/third_party/blink/renderer/core/paint/svg_root_painter.cc b/third_party/blink/renderer/core/paint/svg_root_painter.cc index 448e42aed97de2..a4976a0a95e444 100644 --- a/third_party/blink/renderer/core/paint/svg_root_painter.cc +++ b/third_party/blink/renderer/core/paint/svg_root_painter.cc @@ -7,7 +7,6 @@ #include "base/optional.h" #include "third_party/blink/renderer/core/layout/svg/layout_svg_root.h" #include "third_party/blink/renderer/core/layout/svg/svg_layout_support.h" -#include "third_party/blink/renderer/core/paint/box_clipper.h" #include "third_party/blink/renderer/core/paint/box_painter.h" #include "third_party/blink/renderer/core/paint/object_paint_properties.h" #include "third_party/blink/renderer/core/paint/paint_info.h" @@ -51,13 +50,6 @@ void SVGRootPainter::PaintReplaced(const PaintInfo& paint_info, if (svg->HasEmptyViewBox()) return; - // Apply initial viewport clip. - base::Optional box_clipper; - if (layout_svg_root_.ShouldApplyViewportClip()) { - // TODO(pdr): Clip the paint info cull rect here. - box_clipper.emplace(layout_svg_root_, paint_info); - } - PaintInfo paint_info_before_filtering(paint_info); AffineTransform transform_to_border_box = TransformToPixelSnappedBorderBox(paint_offset);