[CSS Containment] contain: paint conflicts with will-change: transform
Reported by
a...@scirra.com,
Apr 25 2016
|
||||||||||
Issue descriptionUserAgent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2715.0 Safari/537.36 Example URL: https://dl.dropboxusercontent.com/u/15217362/bugs/contain-paint-bug.html Steps to reproduce the problem: Visit the URL. It demonstrates 3 scrolling boxes. Scroll the third box (Case 3: contain: paint; will-change: transform). What is the expected behavior? The text should still be visible, as per in case 2 (contain: paint only). What went wrong? When you scroll case 3, text not in the initial viewport is not drawn. Does it occur on multiple sites: Yes Is it a problem with a plugin? No Did this work before? No Does this work in other browsers? N/A Chrome version: 52.0.2715.0 Channel: canary OS Version: 10.0 Flash Version: Shockwave Flash 21.0 r0 If you click and try to select text in case 3, it does a partial repaint. Sometimes all the text appears to come back too, but if you scroll again the same problem has happened, the rest of the text is still invisible.
,
Apr 25 2016
I can repro this on Linux when the CSSContainment feature is turned on.
,
Apr 25 2016
If an overflow:auto object with contains:paint is composited, then we incorrectly apply a clip to its overflow contents.
,
Apr 25 2016
Doesn't repro on Mac.
,
Apr 26 2016
Actually it does, but only with lo-DPI. Also: selecting the text causes the text to appear. This seems like a paint invalidation bug?
,
Apr 26 2016
I can repro on linux even with --enable-blink-features=CSSContainment --enable-prefer-compositing-to-lcd-text
,
May 10 2016
,
May 16 2016
This is the last remaining blocker for shipping CSS Containment. I plan to start looking into it tomorrow, if you have any pointers as to where we apply the clip I'd appreciate it.
,
May 16 2016
I think the problem is at https://code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/Source/core/paint/PaintLayerClipper.cpp&rcl=1463411924&l=215: if ((layoutObject.hasOverflowClip() && shouldRespectOverflowClip(context)) || (layoutObject.styleRef().containsPaint() && layoutObject.isBox())) { // apply overflow clip. When the object containsPaint, we don't respect the IgnoreOverflowClip flag passed from CompositedLayerMapping for the composited scrolling box. Will upload a patch soon.
,
May 16 2016
,
May 17 2016
,
May 17 2016
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/580ba30eac72aa1c0bf2b93d31a0843211deba92 commit 580ba30eac72aa1c0bf2b93d31a0843211deba92 Author: wangxianzhu <wangxianzhu@chromium.org> Date: Tue May 17 20:24:08 2016 Don't clip composited scrolling contain:paint BUG= 606342 TEST=fast/css/containment/contain-paint-composited-scroll.html Review-Url: https://codereview.chromium.org/1985933002 Cr-Commit-Position: refs/heads/master@{#394213} [add] https://crrev.com/580ba30eac72aa1c0bf2b93d31a0843211deba92/third_party/WebKit/LayoutTests/fast/css/containment/contain-paint-composited-scroll-expected.html [add] https://crrev.com/580ba30eac72aa1c0bf2b93d31a0843211deba92/third_party/WebKit/LayoutTests/fast/css/containment/contain-paint-composited-scroll.html [modify] https://crrev.com/580ba30eac72aa1c0bf2b93d31a0843211deba92/third_party/WebKit/Source/core/paint/BoxClipper.cpp [modify] https://crrev.com/580ba30eac72aa1c0bf2b93d31a0843211deba92/third_party/WebKit/Source/core/paint/PaintLayerClipper.cpp |
||||||||||
►
Sign in to add a comment |
||||||||||
Comment 1 by jianli@chromium.org
, Apr 25 2016Labels: Needs-TestConfirmation