New issue
Advanced search Search tips

Issue 797779 link

Starred by 1 user

Issue metadata

Status: Available
Merged: issue 807382
Owner: ----
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: ----
Pri: 3
Type: Bug



Sign in to add a comment

Replaced elements overflowing in block direction under multicol container are sliced

Project Member Reported by wangxianzhu@chromium.org, Dec 27 2017

Issue description

A frame and its contents can be fragmented if the frame is under a multicol container. For now PaintLayer::EnclosingPaginationContainer() doesn't cross frame boundaries, so the frame contents don't know they are fragmented. This causes multiple subsequences created for the stacking contexts in the frame causing wrong subsequence caching, and bugs like  bug 797491 . 
 
Project Member

Comment 1 by bugdroid1@chromium.org, Dec 27 2017

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

commit f82f583c959661e2f8263d76073ec96e3c906ebd
Author: Xianzhu Wang <wangxianzhu@chromium.org>
Date: Wed Dec 27 22:31:03 2017

[PE] Don't create subseqeunces under fragmented frames

Because for now PaintLayer::PaginationContainer() doesn't cross frame
boundaries, fragmented frame contents don't know they are fragmented
and may create subsequences under multiple fragments.

Now skip cache when painting fragmented frames and don't create
subsequences if we are skipping cache, so that fragmented frame contents
won't create subsequences.

This fixes  bug 797491 , but we need a complete solution for bug 797779.

Bug:  797491 ,797779
Cq-Include-Trybots: master.tryserver.blink:linux_trusty_blink_rel;master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2
Change-Id: Ib6000df445ade0e39c2fbf1c2bd406733ea9d99b
Reviewed-on: https://chromium-review.googlesource.com/844975
Commit-Queue: Xianzhu Wang <wangxianzhu@chromium.org>
Reviewed-by: Chris Harrelson <chrishtr@chromium.org>
Cr-Commit-Position: refs/heads/master@{#526247}
[modify] https://crrev.com/f82f583c959661e2f8263d76073ec96e3c906ebd/third_party/WebKit/Source/core/paint/EmbeddedContentPainter.cpp
[modify] https://crrev.com/f82f583c959661e2f8263d76073ec96e3c906ebd/third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp
[modify] https://crrev.com/f82f583c959661e2f8263d76073ec96e3c906ebd/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.cpp
[modify] https://crrev.com/f82f583c959661e2f8263d76073ec96e3c906ebd/third_party/WebKit/Source/platform/graphics/GraphicsContext.h
[modify] https://crrev.com/f82f583c959661e2f8263d76073ec96e3c906ebd/third_party/WebKit/Source/platform/graphics/paint/PaintController.cpp

Blocking: -771643
With the #c1 CL fragmented frames work for SPv175, though not optimal. Unblock SPv175 from it.
Mergedinto: 807382
Status: Duplicate (was: Available)
I'm combining this into  bug 807382  because I think the root cause is the same: some multicol contents don't know they are fragmented because PaintLayer::EnclosingPaginationContainer() doesn't cross some boundaries.
Cc: mstensho@chromium.org
Owner: wangxianzhu@chromium.org
Status: Assigned (was: Duplicate)
I'm separating this bug from  bug 807382  because they turned out to be very different.

Copied from https://bugs.chromium.org/p/chromium/issues/detail?id=807382#c10:

Firefox doesn't break inside of iframes (as well as many other replaced elements, e.g. img), as if they have break-inside:avoid.

break-inside:avoid seems not working in Chromium for now.

Possible solutions to the fragmentation problem:
a) Support break-inside:avoid, and force it for these elements; or
b) Fix bugs in breaking these elements into fragments.

Discussed with chrishtr@ yesterday and we are inclined to a). My might just leave the work to layout_ng. mstensho@ do you have any suggestions?
break-inside:avoid generally works fine in Chrome, but what doesn't work is overflowing the column boxes. This is due to the flowthread design, which just slices, clips and translates portions of the flowthread, so that it appears like columns.

LayoutNG will fix this. For the current generation, though, we have to live with the flow thread.

b) is not an option, because this type of content is not considered monolithic by the spec [1], and is not supposed to be fragmented.

[1] https://www.w3.org/TR/css-break-3/#end-block
Components: -Blink>Paint Blink>Layout>MultiCol
Labels: -Pri-2 Pri-3
Owner: ----
Status: Available (was: Assigned)
Summary: Replaced elements overflowing in block direction under multicol container are sliced (was: Multiple FragmentData for frames under multicol container)
Thanks mstensho@ for the reply. I would leave this bug to layout_ng. Tried to update the summary to be more accurate.

Sign in to add a comment