Commit ef874c16 authored by Xianzhu Wang's avatar Xianzhu Wang Committed by Commit Bot

[CompositeAfterPaint] Fix backdrop-filters

- Force compositing for backdrop-filters. We probably won't support
  non-composited backdrop-filters because it depends on viz renderers.

- Paint empty display item for backdrop-filter to ensure a paint
  chunk which will create the composited backdrop-filter layer.

Bug: 923429
Change-Id: Ib2afbde2c4ad3a485049b25ee63d6537f675ade6
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1824317
Commit-Queue: Xianzhu Wang <wangxianzhu@chromium.org>
Reviewed-by: default avatarMason Freed <masonfreed@chromium.org>
Cr-Commit-Position: refs/heads/master@{#700376}
parent f7d4453b
...@@ -139,6 +139,9 @@ CompositingReasons CompositingReasonFinder::DirectReasonsForPaintProperties( ...@@ -139,6 +139,9 @@ CompositingReasons CompositingReasonFinder::DirectReasonsForPaintProperties(
if (RequiresCompositingForScrollDependentPosition(*layer)) if (RequiresCompositingForScrollDependentPosition(*layer))
reasons |= CompositingReason::kScrollDependentPosition; reasons |= CompositingReason::kScrollDependentPosition;
if (style.HasBackdropFilter())
reasons |= CompositingReason::kBackdropFilter;
return reasons; return reasons;
} }
......
...@@ -538,13 +538,18 @@ PaintResult PaintLayerPainter::PaintLayerContents( ...@@ -538,13 +538,18 @@ PaintResult PaintLayerPainter::PaintLayerContents(
local_painting_info, paint_flags); local_painting_info, paint_flags);
} }
if (!is_painting_overlay_scrollbars && paint_layer_.PaintsWithFilters() && if (!is_painting_overlay_scrollbars) {
// For filters, if the layer painted nothing, we need to issue a no-op
// display item to ensure the filters won't be ignored. For backdrop
// filters, we issue the display item regardless of other paintings to
// ensure correct bounds of the composited layer for the backdrop filter.
if ((paint_layer_.PaintsWithFilters() &&
display_item_list_size_before_painting == display_item_list_size_before_painting ==
context.GetPaintController().NewDisplayItemList().size()) { context.GetPaintController().NewDisplayItemList().size()) ||
// If a layer with filters painted nothing, we need to issue a no-op paint_layer_.GetLayoutObject().HasBackdropFilter()) {
// display item to ensure the filters won't be ignored.
PaintEmptyContentForFilters(context); PaintEmptyContentForFilters(context);
} }
}
} // FilterPainter block } // FilterPainter block
bool should_paint_mask = is_painting_mask && should_paint_content && bool should_paint_mask = is_painting_mask && should_paint_content &&
...@@ -879,7 +884,8 @@ void PaintLayerPainter::FillMaskingFragment(GraphicsContext& context, ...@@ -879,7 +884,8 @@ void PaintLayerPainter::FillMaskingFragment(GraphicsContext& context,
// Generate a no-op DrawingDisplayItem to ensure a non-empty chunk for the // Generate a no-op DrawingDisplayItem to ensure a non-empty chunk for the
// filter without content. // filter without content.
void PaintLayerPainter::PaintEmptyContentForFilters(GraphicsContext& context) { void PaintLayerPainter::PaintEmptyContentForFilters(GraphicsContext& context) {
DCHECK(paint_layer_.PaintsWithFilters()); DCHECK(paint_layer_.PaintsWithFilters() ||
paint_layer_.GetLayoutObject().HasBackdropFilter());
ScopedPaintChunkProperties paint_chunk_properties( ScopedPaintChunkProperties paint_chunk_properties(
context.GetPaintController(), context.GetPaintController(),
......
...@@ -159,7 +159,7 @@ class PLATFORM_EXPORT CompositingReason { ...@@ -159,7 +159,7 @@ class PLATFORM_EXPORT CompositingReason {
kPerspectiveWith3DDescendants | kPreserve3DWith3DDescendants | kPerspectiveWith3DDescendants | kPreserve3DWith3DDescendants |
kActiveTransformAnimation, kActiveTransformAnimation,
kDirectReasonsForEffectProperty = kActiveOpacityAnimation | kDirectReasonsForEffectProperty = kActiveOpacityAnimation |
kWillChangeOpacity | kWillChangeOpacity | kBackdropFilter |
kActiveBackdropFilterAnimation, kActiveBackdropFilterAnimation,
kDirectReasonsForFilterProperty = kActiveFilterAnimation, kDirectReasonsForFilterProperty = kActiveFilterAnimation,
}; };
......
...@@ -138,9 +138,6 @@ crbug.com/959941 virtual/threaded/fast/scrolling/mouse-scrolling-over-standard-s ...@@ -138,9 +138,6 @@ crbug.com/959941 virtual/threaded/fast/scrolling/mouse-scrolling-over-standard-s
crbug.com/907601 virtual/threaded/fast/scrolling/events/scrollend-event-fired-after-snap.html [ Skip ] crbug.com/907601 virtual/threaded/fast/scrolling/events/scrollend-event-fired-after-snap.html [ Skip ]
# Single pixel difference around one of the radiused borders.
Bug(none) external/wpt/css/filter-effects/backdrop-filter-reference-filter.html [ Failure ]
# Scrolling with the mouse wheel does not work. # Scrolling with the mouse wheel does not work.
crbug.com/979352 virtual/threaded/fast/scrolling/non-composited-scroller-in-scrolled-absolute-scroller.html [ Failure ] crbug.com/979352 virtual/threaded/fast/scrolling/non-composited-scroller-in-scrolled-absolute-scroller.html [ Failure ]
crbug.com/979352 virtual/threaded/fast/scrolling/non-composited-scroller-in-scrolled-position-fixed-scroller.html [ Failure ] crbug.com/979352 virtual/threaded/fast/scrolling/non-composited-scroller-in-scrolled-position-fixed-scroller.html [ Failure ]
...@@ -375,68 +372,10 @@ crbug.com/909749 fast/events/touch/compositor-touch-hit-rects-global.html [ Fail ...@@ -375,68 +372,10 @@ crbug.com/909749 fast/events/touch/compositor-touch-hit-rects-global.html [ Fail
crbug.com/909749 fast/events/touch/compositor-touch-hit-rects-non-composited-scroll.html [ Failure ] crbug.com/909749 fast/events/touch/compositor-touch-hit-rects-non-composited-scroll.html [ Failure ]
# Backdrop filter # Backdrop filter
crbug.com/923429 compositing/layer-creation/fixed-position-out-of-view-with-backdrop-filter.html [ Failure ]
crbug.com/923429 css3/filters/backdrop-filter-basic-blur.html [ Timeout Failure ]
crbug.com/923429 css3/filters/backdrop-filter-boundary.html [ Failure ]
crbug.com/923429 css3/filters/backdrop-filter-browser-zoom.html [ Failure ]
crbug.com/923429 css3/filters/backdrop-filter-border-radius.html [ Failure ]
crbug.com/923429 css3/filters/backdrop-filter-clip-rect-zoom.html [ Failure ]
crbug.com/923429 css3/filters/backdrop-filter-edge-clipping-2.html [ Failure ]
crbug.com/923429 css3/filters/backdrop-filter-rendering.html [ Failure ]
crbug.com/923429 css3/filters/backdrop-filter-rendering-no-background.html [ Failure ]
crbug.com/923429 css3/filters/backdrop-filter-transform.html [ Failure ]
crbug.com/923429 css3/filters/backdrop-filter-edge-pixels.html [ Failure ]
crbug.com/923429 css3/filters/backdrop-filter-clip-radius-zoom.html [ Failure ]
crbug.com/923429 css3/filters/backdrop-filter-plus-mask.html [ Failure ] crbug.com/923429 css3/filters/backdrop-filter-plus-mask.html [ Failure ]
crbug.com/923429 css3/filters/backdrop-filter-plus-mask-large.html [ Failure ] crbug.com/923429 css3/filters/backdrop-filter-plus-mask-large.html [ Failure ]
crbug.com/923429 external/wpt/css/filter-effects/backdrop-filter-basic-background-color.html [ Failure ]
crbug.com/923429 external/wpt/css/filter-effects/backdrop-filter-basic-opacity-2.html [ Failure ]
crbug.com/923429 external/wpt/css/filter-effects/backdrop-filter-basic.html [ Failure ]
crbug.com/923429 external/wpt/css/filter-effects/backdrop-filter-clip-rect.html [ Failure ]
crbug.com/923429 external/wpt/css/filter-effects/backdrop-filter-fixed-clip.html [ Failure ]
crbug.com/923429 external/wpt/css/filter-effects/backdrop-filter-isolation.html [ Failure ]
crbug.com/923429 external/wpt/css/filter-effects/backdrop-filter-isolation-fixed.html [ Failure ]
crbug.com/923429 external/wpt/css/filter-effects/backdrop-filter-isolation-isolate.html [ Failure ]
crbug.com/923429 external/wpt/css/filter-effects/backdrop-filter-update.html [ Failure ]
crbug.com/923429 external/wpt/css/filter-effects/backdrop-filter-clipped.html [ Failure ]
crbug.com/923429 external/wpt/css/filter-effects/backdrop-filter-plus-filter.html [ Failure ]
crbug.com/923429 external/wpt/css/filter-effects/backdrop-filters-brightness.html [ Failure ]
crbug.com/923429 external/wpt/css/filter-effects/backdrop-filters-contrast.html [ Failure ]
crbug.com/923429 external/wpt/css/filter-effects/backdrop-filters-grayscale.html [ Failure ]
crbug.com/923429 external/wpt/css/filter-effects/backdrop-filters-hue-rotate.html [ Failure ]
crbug.com/923429 external/wpt/css/filter-effects/backdrop-filters-invert.html [ Failure ]
crbug.com/923429 external/wpt/css/filter-effects/backdrop-filters-saturate.html [ Failure ]
crbug.com/923429 external/wpt/css/filter-effects/backdrop-filters-sepia.html [ Failure ]
crbug.com/923429 virtual/scalefactor200/css3/filters/backdrop-filter-basic-blur.html [ Failure ]
crbug.com/923429 virtual/scalefactor200/css3/filters/backdrop-filter-border-radius.html [ Failure ]
crbug.com/923429 virtual/scalefactor200/css3/filters/backdrop-filter-boundary.html [ Failure ]
crbug.com/923429 virtual/scalefactor200/css3/filters/backdrop-filter-browser-zoom.html [ Failure ]
crbug.com/923429 virtual/scalefactor200/css3/filters/backdrop-filter-clip-rect-zoom.html [ Failure ]
crbug.com/923429 virtual/scalefactor200/css3/filters/backdrop-filter-edge-pixels.html [ Failure ]
crbug.com/923429 virtual/scalefactor200/css3/filters/backdrop-filter-rendering-no-background.html [ Failure ]
crbug.com/923429 virtual/scalefactor200/css3/filters/backdrop-filter-rendering.html [ Failure ]
crbug.com/923429 virtual/scalefactor200/css3/filters/backdrop-filter-transform.html [ Failure ]
crbug.com/923429 virtual/scalefactor200/css3/filters/backdrop-filter-clip-radius-zoom.html [ Failure ]
crbug.com/923429 virtual/scalefactor200/css3/filters/backdrop-filter-plus-mask.html [ Failure ] crbug.com/923429 virtual/scalefactor200/css3/filters/backdrop-filter-plus-mask.html [ Failure ]
crbug.com/923429 virtual/scalefactor200/css3/filters/backdrop-filter-plus-mask-large.html [ Failure ] crbug.com/923429 virtual/scalefactor200/css3/filters/backdrop-filter-plus-mask-large.html [ Failure ]
crbug.com/923429 virtual/scalefactor200/external/wpt/css/filter-effects/backdrop-filter-basic-background-color.html [ Failure ]
crbug.com/923429 virtual/scalefactor200/external/wpt/css/filter-effects/backdrop-filter-basic-opacity-2.html [ Failure ]
crbug.com/923429 virtual/scalefactor200/external/wpt/css/filter-effects/backdrop-filter-basic.html [ Failure ]
crbug.com/923429 virtual/scalefactor200/external/wpt/css/filter-effects/backdrop-filter-clipped.html [ Failure ]
crbug.com/923429 virtual/scalefactor200/external/wpt/css/filter-effects/backdrop-filter-fixed-clip.html [ Failure ]
crbug.com/923429 virtual/scalefactor200/external/wpt/css/filter-effects/backdrop-filter-isolation-fixed.html [ Failure ]
crbug.com/923429 virtual/scalefactor200/external/wpt/css/filter-effects/backdrop-filter-isolation-isolate.html [ Failure ]
crbug.com/923429 virtual/scalefactor200/external/wpt/css/filter-effects/backdrop-filter-isolation.html [ Failure ]
crbug.com/923429 virtual/scalefactor200/external/wpt/css/filter-effects/backdrop-filter-update.html [ Failure ]
crbug.com/923429 virtual/scalefactor200/external/wpt/css/filter-effects/backdrop-filter-plus-filter.html [ Failure ]
crbug.com/923429 virtual/scalefactor200/external/wpt/css/filter-effects/backdrop-filters-brightness.html [ Failure ]
crbug.com/923429 virtual/scalefactor200/external/wpt/css/filter-effects/backdrop-filters-contrast.html [ Failure ]
crbug.com/923429 virtual/scalefactor200/external/wpt/css/filter-effects/backdrop-filters-grayscale.html [ Failure ]
crbug.com/923429 virtual/scalefactor200/external/wpt/css/filter-effects/backdrop-filters-hue-rotate.html [ Failure ]
crbug.com/923429 virtual/scalefactor200/external/wpt/css/filter-effects/backdrop-filters-invert.html [ Failure ]
crbug.com/923429 virtual/scalefactor200/external/wpt/css/filter-effects/backdrop-filters-saturate.html [ Failure ]
crbug.com/923429 virtual/scalefactor200/external/wpt/css/filter-effects/backdrop-filters-sepia.html [ Failure ]
crbug.com/923429 virtual/scalefactor200/css3/filters/backdrop-filter-edge-clipping-2.html [ Failure ]
crbug.com/940033 virtual/threaded/fast/scrolling/wheel-scrolling-over-custom-scrollbar.html [ Failure ] crbug.com/940033 virtual/threaded/fast/scrolling/wheel-scrolling-over-custom-scrollbar.html [ Failure ]
......
{
"layers": [
{
"name": "Scrolling background of LayoutView #document",
"bounds": [785, 1021],
"contentsOpaque": true,
"backgroundColor": "#FFFFFF"
},
{
"name": "VerticalScrollbar",
"position": [785, 0],
"bounds": [15, 600]
},
{
"name": "LayoutNGBlockFlow (positioned) DIV class='fixed'",
"bounds": [10, 10],
"transform": 1
},
{
"name": "LayoutNGBlockFlow (positioned) DIV class='fixed'",
"bounds": [10, 10],
"transform": 2
},
{
"name": "LayoutNGBlockFlow (positioned) DIV class='fixed'",
"bounds": [10, 10],
"transform": 3
},
{
"name": "LayoutNGBlockFlow (positioned) DIV class='fixed'",
"bounds": [10, 10]
}
],
"transforms": [
{
"id": 1,
"transform": [
[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, 0],
[8, 1013, 0, 1]
]
},
{
"id": 2,
"transform": [
[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, 0],
[8, -100, 0, 1]
]
},
{
"id": 3,
"transform": [
[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, 0],
[1000, 0, 0, 1]
]
}
]
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment