New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 607565 link

Starred by 9 users

Issue metadata

Status: Fixed
Owner:
Closed: May 2016
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Mac
Pri: 2
Type: Compat



Sign in to add a comment

position:fixed header, with <input> left:-10000px, disappears when document scrolled in a transform:scaled iframe

Reported by joel@fullstory.com, Apr 28 2016

Issue description

UserAgent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.86 Safari/537.36

Example URL:

Steps to reproduce the problem:
1. Open compositor_bug.html
2. Scroll the document in the iframe down a bit.
3. Watch the fixed header disappear

What is the expected behavior?

What went wrong?
The following all seem to be required to reproduce the issue:
- The header's position:fixed.
- It contains an <input> with left:-10000px.
- The whole document's contained in an iframe that's transform:scaled down.

It renders properly if any of the above is not true. If you watch carefully, you can see what looks like some compositor tiling artifacts when the fixed header disappears. A rough hypothesis would be that the layer's getting thrown out because all of its children are "off-screen" (I haven't looked at the render-tree/layer code in a very long time, so this could be way off the mark).

This works properly in Firefox and Safari. Since this works in Safari's WebKit, I'd tend to suspect the bits that have changed more in Chromium since the Blink fork, such as compositing.

Does it occur on multiple sites: N/A

Is it a problem with a plugin? No 

Did this work before? N/A 

Does this work in other browsers? Yes 

Chrome version: 50.0.2661.86  Channel: stable
OS Version: OS X 10.11.4
Flash Version:
 
compositor_bug.html
326 bytes View Download
compositor_bug.inner.html
4.1 KB View Download
Cc: brajkumar@chromium.org
Labels: Needs-Feedback
Unable to reproduce the issue on MacBook Air 10.11.4 using chrome latest stable M50-50.0.2661.94. Observed the fixed header is seen and no artifacts while scrolling the compositor_bug.html file.

joel@ - Could you please recheck this issue on latest chrome stable by creating a new profile under chrome://settings with no apps or extensions in your browser. If issue still persists on latest stable please try it on incognito mode as well. Attaching screen-cast from our end, please have a look on it and let us know if we are missing anything from our end.

Thanks!
Recording #7.mp4
3.0 MB Download

Comment 2 by joel@fullstory.com, Apr 29 2016

Thanks for looking into this. I'm starting to fear it may be a GPU-specific issue. I was running on the previous stable release, but I just updated to 50.0.2661.94, and the issue still appears (see attached .mov).

Note that I'm on a Late 2013 15" MacBook Pro with an nVidia GeForce GT 750M. This issue was reported to me by a customer who's also running Chrome/Mac, but unfortunately I don't have any information on his GPU.
607565.mov
23.5 MB Download
Project Member

Comment 3 by sheriffbot@chromium.org, Apr 30 2016

Labels: -Needs-Feedback Needs-Review
Owner: brajkumar@chromium.org
Thank you for providing more feedback. Adding requester "brajkumar@chromium.org" for another review and adding "Needs-Review" label for tracking.

For more details visit https://www.chromium.org/issue-tracking/autotriage - Your friendly Sheriffbot
Components: Blink
Components: -Blink Blink>Scroll
Cc: flackr@chromium.org vollick@chromium.org majidvp@chromium.org
Components: Blink>Compositing
Labels: Hotlist-Threaded-Rendering
Status: Available (was: Unconfirmed)
I can confirm this is happening.
Interesting enough, the issue happens only when input has left position that is < -3996px! 

I suspect this may be because CC thinks that the layer is outside of the region where it has to be painted. This can explain why it happens only when the page is scrolled.
3996px is 4096px - 100px. While I don't believe the original repro I posted had anything precisely 100px wide, that still seems suspicious. Might that have some subtle interaction with the size of tiles, or an assumed maximum resolution? I haven't looked at the Chrome rendering code in ages, or I'd go look for that myself.
Owner: chrishtr@chromium.org
Status: Assigned (was: Available)
It's probably the interest rect calculation being wrong. Will look.

https://code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.cpp&q=compositedlayermapping.cpp&sq=package:chromium&type=cs&l=2189
It's not the interest rect.
Take that back, it is the interest rect. If I adjust the kPixelDistanceToRecord
constant, the magic left: padding value for the input changes.
Status: Started (was: Assigned)
Fix in progress.
Project Member

Comment 13 by bugdroid1@chromium.org, May 20 2016

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/2ea2924dc159391166a1b42008f576a501e42ea3

commit 2ea2924dc159391166a1b42008f576a501e42ea3
Author: chrishtr <chrishtr@chromium.org>
Date: Fri May 20 00:17:25 2016

Apply scroll offset and content box offset before recursing in mapAncestorToLocal

The way mapAncestorToLocal works is to compute a localToAncestor transform, then
invert it at the end. Thus the incremental pieces of the transforms must be applied
bottom-up.

Also clean up a few places where scrollOffset() is simpler to use than scrollPosition.

BUG= 607565 

Review-Url: https://codereview.chromium.org/1994203003
Cr-Commit-Position: refs/heads/master@{#394922}

[modify] https://crrev.com/2ea2924dc159391166a1b42008f576a501e42ea3/third_party/WebKit/Source/core/dom/IntersectionObservation.cpp
[modify] https://crrev.com/2ea2924dc159391166a1b42008f576a501e42ea3/third_party/WebKit/Source/core/layout/LayoutView.cpp
[modify] https://crrev.com/2ea2924dc159391166a1b42008f576a501e42ea3/third_party/WebKit/Source/core/layout/MapCoordinatesTest.cpp

Status: Fixed (was: Started)

Comment 15 by joel@fullstory.com, May 20 2016

Thanks for fixing this so quickly!

Sign in to add a comment