New issue
Advanced search Search tips

Issue 636392 link

Starred by 2 users

Issue metadata

Status: Verified
Owner:
Closed: Nov 2016
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Linux , Chrome
Pri: 2
Type: Bug

Blocking:
issue 307091



Sign in to add a comment

Resizing window on Linux causes overlay scrollbar to appear/disappear

Project Member Reported by bokan@chromium.org, Aug 10 2016

Issue description

Version: 54.0.2824.0
OS: Linux

What steps will reproduce the problem?
(1) Enable chrome://flags/#overlay-scrollbars
(2) visit bokan.ca/iframe.html
(3) Resize the window horizontally

What is the expected output?
The <div> inside the iframe (the one that says "DIV") should always have a scrollbar

What do you see instead?
The <div>'s scrollbar will disappear or reappear depending on the window width.

See attached screenshot, the scrollbar is missing.
 
Components: -UI>Shell Blink>Scroll
No attached screenshot. I'm seeing the scrollbar flicker on and off just with mouse movement inside the window.

Could someone familiar with the expected UI of overlay scrollbars explain what is supposed to happen here? It's not clear if this is paint or layout - seems hard to explain either way.

Comment 2 by bokan@chromium.org, Aug 10 2016

Components: UI>Shell
Sorry, forgot the screenshot +attach. I suspect it's paint since it only happens with overlay scrollbars.

+UI>Shell since this is being tracked as part of shipping overlay scrollbars.
Screenshot from 2016-08-10 10:39:51.png
174 KB View Download
Cc: skobes@chromium.org
Labels: Hotlist-Input-Dev

Comment 5 by bokan@chromium.org, Sep 22 2016

Owner: bokan@chromium.org

Comment 6 by bokan@chromium.org, Oct 20 2016

Labels: OS-Chrome
Note that the launch target for overlay scrollbars is m56. I would favor making this one of our high priority bugs.
But note this is just one of many blocking bugs for 307091.

Comment 9 by bokan@chromium.org, Oct 20 2016

Labels: -Pri-3 Pri-2
Agreed, this is one of our launch blockers and I'll be getting to it soon. FYI, here's a Googler-only list of remaining bugs and prioritization: https://docs.google.com/spreadsheets/d/13pt4tM4Prm7WSVL_bAtdGN6XKHPhvEYoYSvjwH-CGTU/edit#gid=0&vpid=A1

Comment 10 by bokan@chromium.org, Oct 21 2016

Cc: bokan@chromium.org
Owner: chaopeng@chromium.org
Actually, Chao, now that you've touched some of the scrollbar painting code, see if you can diagnose the cause of this. If it gets too involved you can punt it back to me but maybe it's a simple problem (and you can learn a bit more about the rendering pipeline).

Comment 11 by bokan@chromium.org, Oct 26 2016

Cc: -bokan@chromium.org chaopeng@chromium.org
Owner: bokan@chromium.org
PaintLayerPainter::paintOverlayScrollbars - https://cs.chromium.org/chromium/src/third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp?cl=GROK&gsn=setContainsDirtyOverlayScrollbars&rcl=1477480817&l=1069

This is the place skipped the overlay scrollbar paint. After the first paint the scrollbar m_containsDirtyOverlayScrollbars set false. Only calls ScrollableAreaPainter::paintOverflowControls can make it true. And only phase == PaintPhaseBlockBackground || phase == PaintPhaseSelfBlockBackgroundOnly (https://cs.chromium.org/chromium/src/third_party/WebKit/Source/core/paint/PaintPhase.h?sq=package:chromium&dr&rcl=1477480817&l=95) will call ScrollableAreaPainter::paintOverflowControls. call stack:

#1 0x7ffabe2b2ecc blink::ScrollableAreaPainter::paintOverflowControls()
#2 0x7ffabe20c900 blink::BlockPainter::paintOverflowControlsIfNeeded()
#3 0x7ffabe20c513 blink::BlockPainter::paint()
#4 0x7ffabded16b5 blink::LayoutBlock::paint()
#5 0x7ffabe274d8c blink::PaintLayerPainter::paintFragmentWithPhase()
#6 0x7ffabe27346b blink::PaintLayerPainter::paintBackgroundForFragments()
#7 0x7ffabe272b97 blink::PaintLayerPainter::paintLayerContents()
#8 0x7ffabe271b36 blink::PaintLayerPainter::paintLayerContentsCompositingAllPhases()
Project Member

Comment 13 by bugdroid1@chromium.org, Nov 19 2016

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

commit 4fa58f16e52436c1b547ae6843611ec5cca0f364
Author: bokan <bokan@chromium.org>
Date: Sat Nov 19 00:26:30 2016

Set scrollbar enabled state for overflow:auto.

PaintLayerScrollableArea code previously assumed it needed to setEnabled only
on scrollbars for overflow:scroll elements. This was because the only time we
would have a disabled scrollbar was for an overflow:scroll areas without enough
overflow. An overflow:auto area simply wouldn't have created the scrollbar.

This changes for overlay scrollbars because we fade out the scrollbars by
disabling them, causing painting code to avoid painting.

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

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

[modify] https://crrev.com/4fa58f16e52436c1b547ae6843611ec5cca0f364/third_party/WebKit/LayoutTests/TestExpectations
[modify] https://crrev.com/4fa58f16e52436c1b547ae6843611ec5cca0f364/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/scrollbars-changed-expected.txt
[add] https://crrev.com/4fa58f16e52436c1b547ae6843611ec5cca0f364/third_party/WebKit/LayoutTests/scrollbars/auto-scrollbar-fades-out-expected.html
[add] https://crrev.com/4fa58f16e52436c1b547ae6843611ec5cca0f364/third_party/WebKit/LayoutTests/scrollbars/auto-scrollbar-fades-out.html
[modify] https://crrev.com/4fa58f16e52436c1b547ae6843611ec5cca0f364/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp

Comment 14 by bokan@chromium.org, Nov 29 2016

Status: Fixed (was: Available)
Status: Verified (was: Fixed)

Sign in to add a comment