New issue
Advanced search Search tips

Issue 673197 link

Starred by 1 user

Issue metadata

Status: Fixed
Owner:
Closed: Dec 2016
Cc:
Components:
EstimatedDays: ----
NextAction: 2016-12-26
OS: All
Pri: 2
Type: Bug-Regression



Sign in to add a comment

Google Music background images don't repaint when scrolling and instead result in banding

Project Member Reported by esprehn@chromium.org, Dec 12 2016

Issue description

Google Chrome	54.0.2840.101 (Official Build) (64-bit)
Revision	0
Platform	8743.85.0 (Official Build) stable-channel samus
ARC	3487238

This is on a Pixel 2 (retina).

What steps will reproduce the problem?
(1) Load a Google Music album: https://play.google.com/music/listen?u=0#/album/Bmqiewom4slsr5wznoubry5a4la/Watsky/Cardboard+Castles
(2) Scroll to the bottom.
(3) Scroll up slowly.
(4) Note the background banding into slices.

The background doesn't repaint properly, you end up with slices of the background from previous background positions left behind.

 
Screenshot 2016-12-11 at 6.19.54 PM.png
206 KB View Download
Screenshot 2016-12-11 at 6.19.29 PM.png
284 KB View Download
Screenshot 2016-12-11 at 6.23.49 PM.png
36.7 KB View Download
Components: -Blink>Paint Blink>Paint>Invalidation
The image is an <iron-image> that's being transformed with translateY up and down.

<iron-image id="material-hero-image" preload="true" fade="true" sizing="cover" position="top" class="x-scope iron-image-0" style="transform: translateY(-118px);">
...
  </iron-image>

Looking at the paint invalidation flashing this is a non-composited transform moving the background image up and down. We're not issuing the paint invalidation rects in the right spots so the previous location in the layer is left with old content.
Screenshot 2016-12-11 at 6.29.41 PM.png
1.2 MB View Download
I didn't reproduce the issue on Pixel 1 (55.0.2883.87 beta) and Linux (bisecting from r414002) with or without --enable-prefer-compositing-to-lcd text.

I saw a different UI than yours. See the attachment. Is the difference because play music changed their web site?
Screenshot 2016-12-11 at 8.06.15 PM.png
1.9 MB View Download
Labels: Needs-Feedback
NextAction: 2016-12-26
Anyone have a Pixel 2 to verify on?

Comment 4 by pdr@chromium.org, Dec 12 2016

Labels: -Pri-2 Pri-1
I also wasn't able to reproduce, but I also don't have a pixel 2. I can try on my retina macbook later today.

@esprehn, can you check chrome://gpu to see if you have any flags enabled?
@pdr are you seeing the same UI as mine (with an album cover on top of the background image, and "Other artists on this station") or esprehn's (with a song list)?

Comment 6 by pdr@chromium.org, Dec 12 2016

I am getting roughly the UI Elliott is. I think you may need to click play and possibly click on a specific song. You may need an account to do this :/

Comment 7 by pdr@google.com, Dec 12 2016

I was able to repro this with this url: https://play.google.com/music/listen?u=0#/ps/Iy7ltzd4ghvrrmilysh7y52qzkq

Steps to reproduce:
1) go to url
2) scroll up

There were flags set on this device but I disabled them and this still reproduces.

Comment 8 by pdr@chromium.org, Dec 12 2016

Owner: pdr@chromium.org
Status: Assigned (was: Untriaged)
Assigning to myself to look into this further on a retina mac.

Comment 9 by pdr@chromium.org, Dec 13 2016

Labels: -Needs-Feedback Needs-Bisect OS-Mac
I was able to confirm this on a Retina mac, even in dev. This regression exists as far back as at least M48.

@Testers, can you please bisect this on a retina mac?

Comment 10 by pdr@chromium.org, Dec 14 2016

Labels: -Type-Bug -Needs-Bisect Type-Bug-Regression
Status: Available (was: Assigned)
To bisect this, I used "--enable-prefer-compositing-to-lcd-text" on linux. I manually bisected this to:
https://chromium.googlesource.com/chromium/blink/+log/0ee3fcb..8f8d2bb

I think this is one of these, likely the first:
https://chromium.googlesource.com/chromium/blink/+/8f8d2bb1e41a8779f9e15d0e8d56b95a5c969831
https://chromium.googlesource.com/chromium/blink/+/b5f009ecf7a71738f8b121738c9ea8a07d3e135b

I also managed to get my chromium account locked due to re-logging in for every bisect point. Don't do that.

Comment 11 by pdr@chromium.org, Dec 14 2016

Owner: ----
Cc: chrishtr@chromium.org
Labels: -Pri-1 -OS-Mac OS-All Pri-2
Owner: wangxianzhu@chromium.org
Status: Assigned (was: Available)
--user-data-dir=/tmp/a might help to avoid re-logging-ins for every bisect point.

I logged in but still saw the UI like in #2. Do I need to subscribe Google Music?

I am not sure how https://chromium.googlesource.com/chromium/blink/+/8f8d2bb1e41a8779f9e15d0e8d56b95a5c969831 caused the bug, but the logic seems incomplete. We should update not only previous paint invalidation rects but also previous locations, for not only layers but also all scrolled objects. I think we should just force a subtree paint invalidation here instead of trying to adjust the previous paint invalidation rects.

Lowering priority because it's an old regression.

Comment 13 by pdr@chromium.org, Dec 14 2016

Did you try this url? https://play.google.com/music/listen?u=0#/ps/Iy7ltzd4ghvrrmilysh7y52qzkq

Good point about using a tmp user data dir.
This URL works for me to reproduce the bug. Thanks!
Note this bug was fixed by Music (http://b/33548244) by adding will-change: transform which removes the repainting. If you remove that it'll come back. Could someone make a reduction and attach it to this issue?
Owner: chrishtr@chromium.org
Almost there on a reduction..
Reduced testcase attached.
testcase.html
1.0 KB View Download
Owner: wangxianzhu@chromium.org
Reproduces on 57.0.2954.0 / Mac Retina.
Project Member

Comment 19 by bugdroid1@chromium.org, Dec 27 2016

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

commit 03444642622ffcecb8197bf40d6a21495d694240
Author: wangxianzhu <wangxianzhu@chromium.org>
Date: Tue Dec 27 18:02:15 2016

Replace adjustment of previous visual rects on scroll with normal paint invalidation

Previously the adjustment of previous visual rects on scroll was not
complete: it ignored non-layered objects, and didn't adjust location
in backing.

Now set paint invalidation flag on scroll if needed, and all required
adjustments will be done during paint invalidation.

BUG= 673197 
CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2

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

[modify] https://crrev.com/03444642622ffcecb8197bf40d6a21495d694240/third_party/WebKit/LayoutTests/paint/invalidation/overflow-hidden-yet-scrolled-with-custom-scrollbar-expected.txt
[modify] https://crrev.com/03444642622ffcecb8197bf40d6a21495d694240/third_party/WebKit/Source/core/frame/FrameView.cpp
[modify] https://crrev.com/03444642622ffcecb8197bf40d6a21495d694240/third_party/WebKit/Source/core/frame/FrameView.h
[modify] https://crrev.com/03444642622ffcecb8197bf40d6a21495d694240/third_party/WebKit/Source/core/layout/LayoutObject.cpp
[modify] https://crrev.com/03444642622ffcecb8197bf40d6a21495d694240/third_party/WebKit/Source/core/layout/LayoutObject.h
[modify] https://crrev.com/03444642622ffcecb8197bf40d6a21495d694240/third_party/WebKit/Source/core/paint/PaintLayer.cpp
[modify] https://crrev.com/03444642622ffcecb8197bf40d6a21495d694240/third_party/WebKit/Source/core/paint/PaintLayer.h
[modify] https://crrev.com/03444642622ffcecb8197bf40d6a21495d694240/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp
[modify] https://crrev.com/03444642622ffcecb8197bf40d6a21495d694240/third_party/WebKit/Source/core/paint/PaintLayerTest.cpp
[modify] https://crrev.com/03444642622ffcecb8197bf40d6a21495d694240/third_party/WebKit/Source/platform/scroll/ScrollAnimatorBase.h

Fixed?
Status: Fixed (was: Assigned)

Sign in to add a comment