Under invalidation of descendants under separate self-painting layers when ancestor filter changes |
|||
Issue description
Slightly modified test case from fast/repaint/filter-invalidation-after-display.html:
<!DOCTYPE html>
<style>
.green {
background-color: green;
}
.box {
width: 200px;
height: 200px;
-webkit-filter: drop-shadow(350px 50px 10px green);
/* position: absolute;
left: 300px;*/
}
.drop-shadowed {
-webkit-filter: drop-shadow(600px 100px 10px red);
}
</style>
<!--
This test checks that we correctly invalidate filters when they are removed.
There should be no red below.
-->
<div class="green box" id="box">
<div style="backface-visibility: hidden; position: absolute; top: 400px; left: 600px; width: 100px; height: 100px; background-color: blue"></div>
</div>
<script src="resources/text-based-repaint.js"></script>
<script>
function repaintTest() {
var box = document.getElementById('box');
box.classList.toggle('drop-shadowed');
}
window.onload = runRepaintTest;
</script>
We can make filter a special case when calculating visual overflow rect to include descendant visual overflow including self-painting descendants (but not composited descendants).
,
Apr 29 2016
"backface-visibility: hidden" should be removed from the test case to reproduce under-invalidation bug.
,
Apr 29 2016
It's not necessary to include whole filter visual effect into the object having filter, just like the way we deal with opacity. The actual issue is that we don't inflate the paint invalidation rect descendants under separate self-painting layers for filter.
,
May 4 2016
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/05fb4239a14a319f2a76de26b1f5a5413bb71ed1 commit 05fb4239a14a319f2a76de26b1f5a5413bb71ed1 Author: wangxianzhu <wangxianzhu@chromium.org> Date: Wed May 04 16:06:53 2016 Ensure filter and reflection outsets are applied on paint invalidation rect Previously filter and reflection outsets are applied in mapToVisualRectInAncestorSpace along the container chain. This missed filters/reflections between the object and its container. BUG= 607989 TEST=fast/repaint/filter-invalidation-positioned-child.html TEST=fast/repaint/reflection-invalidation-positioned-child.html Review-Url: https://codereview.chromium.org/1934833002 Cr-Commit-Position: refs/heads/master@{#391525} [add] https://crrev.com/05fb4239a14a319f2a76de26b1f5a5413bb71ed1/third_party/WebKit/LayoutTests/fast/repaint/filter-invalidation-positioned-child-expected.txt [add] https://crrev.com/05fb4239a14a319f2a76de26b1f5a5413bb71ed1/third_party/WebKit/LayoutTests/fast/repaint/filter-invalidation-positioned-child.html [add] https://crrev.com/05fb4239a14a319f2a76de26b1f5a5413bb71ed1/third_party/WebKit/LayoutTests/fast/repaint/reflection-invalidation-positioned-child-expected.txt [add] https://crrev.com/05fb4239a14a319f2a76de26b1f5a5413bb71ed1/third_party/WebKit/LayoutTests/fast/repaint/reflection-invalidation-positioned-child.html [modify] https://crrev.com/05fb4239a14a319f2a76de26b1f5a5413bb71ed1/third_party/WebKit/Source/core/layout/LayoutBox.cpp [modify] https://crrev.com/05fb4239a14a319f2a76de26b1f5a5413bb71ed1/third_party/WebKit/Source/core/layout/LayoutBox.h [modify] https://crrev.com/05fb4239a14a319f2a76de26b1f5a5413bb71ed1/third_party/WebKit/Source/core/layout/LayoutInline.cpp [modify] https://crrev.com/05fb4239a14a319f2a76de26b1f5a5413bb71ed1/third_party/WebKit/Source/core/layout/LayoutObject.cpp [modify] https://crrev.com/05fb4239a14a319f2a76de26b1f5a5413bb71ed1/third_party/WebKit/Source/core/layout/LayoutObject.h [modify] https://crrev.com/05fb4239a14a319f2a76de26b1f5a5413bb71ed1/third_party/WebKit/Source/core/style/ComputedStyle.cpp
,
May 4 2016
|
|||
►
Sign in to add a comment |
|||
Comment 1 by wangxianzhu@chromium.org
, Apr 29 2016