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

Issue 616596 link

Starred by 22 users

Issue metadata

Status: Fixed
Owner:
NOT IN USE
Closed: Jul 2017
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: ----
Pri: 3
Type: Bug



Sign in to add a comment

Adding or removing a transform-related property does not properly update multicolumn layout

Project Member Reported by chrishtr@chromium.org, Jun 1 2016

Issue description

To repro: try clicking to add and remove will-change: transform on the
composited layers in this test:

fast/multicol/composited-layer-multiple-fragments.html

The rendering will be broken when will-change: transform is present a second
time.

If layout is forced by also tweaking a layout property like width/height on
the element in a no-op way, everything is reset to a good state.

I think layout needs to be dirtied for this case in StyleDifference or in
LayoutBoxModelObject::styleDidChange.
 
Project Member

Comment 1 by sheriffbot@chromium.org, Jun 2 2017

Labels: Hotlist-Recharge-Cold
Status: Untriaged (was: Available)
This issue has been Available for over a year. If it's no longer important or seems unlikely to be fixed, please consider closing it out. If it is important, please re-triage the issue.

Sorry for the inconvenience if the bug really should have been left as Available. If you change it back, also remove the "Hotlist-Recharge-Cold" label.

For more details visit https://www.chromium.org/issue-tracking/autotriage - Your friendly Sheriffbot

Comment 2 by e...@chromium.org, Jun 5 2017

Owner: msten...@opera.com
Status: Assigned (was: Untriaged)

Comment 3 by msten...@opera.com, Jun 19 2017

tc.html
747 bytes View Download

Comment 4 by msten...@opera.com, Jun 19 2017

Also happens when setting will-change to "opacity" or "z-index" (not just "transform"). So I suspect that it happens because we suddenly establish a stacking context without updating layout properly.

Comment 5 by msten...@opera.com, Jun 19 2017

It's correct that StyleWillChange() / StyleDidChange() doesn't mark for re-layout in this case, but that's probably fine, actually.

I'm looking into a fix where we no longer call UpdateLayerPositionsAfterLayout() when we have established a new layer and come to the conclusion that we're not going to lay out. Since we're starting this update somewhere in the middle of the tree, the mechanism that normally takes care of storing PaintLayer::rare_data_->enclosing_pagination_layer doesn't work. So I'll add specialized code for this, just like the FIXME in LayoutBoxModelObject suggests.
Cc: msten...@opera.com wangxianzhu@chromium.org kavvaru@chromium.org
 Issue 177556  has been merged into this issue.
Project Member

Comment 7 by bugdroid1@chromium.org, Jul 21 2017

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

commit 337a726cfe4d5e935985fe209e0711058faa1f1a
Author: Morten Stenshorne <mstensho@opera.com>
Date: Fri Jul 21 22:01:39 2017

Always relayout when an object gets or loses a PaintLayer.

This rids us of some crufty code, and also fixes bugs. The approach was also
broken for multicol, because we started UpdatePaginationRecursive() in the
middle of the tree without looking for a containing flow thread (pagination
layer). This would result in the new layer erroneously not becoming paginated.

Also had to update a unit test, to satisfy its requirement that the style change
won't trigger layout.

BUG= 616596 

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2
Change-Id: I50ed61a7174e360259b7b786bab01cf74616fc32
Reviewed-on: https://chromium-review.googlesource.com/542915
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Reviewed-by: Steve Kobes <skobes@chromium.org>
Cr-Commit-Position: refs/heads/master@{#488768}
[modify] https://crrev.com/337a726cfe4d5e935985fe209e0711058faa1f1a/third_party/WebKit/LayoutTests/FlagExpectations/enable-slimming-paint-v2
[add] https://crrev.com/337a726cfe4d5e935985fe209e0711058faa1f1a/third_party/WebKit/LayoutTests/fast/multicol/dynamic/add-will-change-transform-expected.html
[add] https://crrev.com/337a726cfe4d5e935985fe209e0711058faa1f1a/third_party/WebKit/LayoutTests/fast/multicol/dynamic/add-will-change-transform.html
[modify] https://crrev.com/337a726cfe4d5e935985fe209e0711058faa1f1a/third_party/WebKit/Source/core/layout/LayoutBoxModelObject.cpp
[modify] https://crrev.com/337a726cfe4d5e935985fe209e0711058faa1f1a/third_party/WebKit/Source/core/paint/PaintInvalidationTest.cpp

Comment 8 by msten...@opera.com, Jul 24 2017

Status: Fixed (was: Assigned)

Sign in to add a comment