Closed Bug 1693616 Opened 3 years ago Closed 2 years ago

Hang during reflow, with multi-column and "box-decoration-break: clone"

Categories

(Core :: Layout: Columns, defect)

defect

Tracking

()

RESOLVED FIXED
99 Branch
Tracking Status
firefox87 --- wontfix
firefox99 --- fixed

People

(Reporter: tsmith, Assigned: TYLin)

References

(Blocks 2 open bugs)

Details

(Keywords: hang, testcase, Whiteboard: [fuzzblocker], [wptsync upstream])

Attachments

(6 files)

Hang/Slow Test

The attached test case causes the browser to become unresponsive for more than a short period of time.

Why is this a problem?

Temporary unresponsiveness or complete hangs have a negative impact on the user experience. These issues also have a negative impact on the efficiency and effectiveness of test suites and fuzzers.

False Positive?

Fuzzers can generate unrealistic test cases which for example may pass large values to APIs leading to slow downs or hangs. Please review the code in question to verify no further optimizations can be made and reasonable limits are in place.

Details

This test case only reproduces the issue consistently when run with Xvfb. This is how most of our fuzzers are run.

To reproduce the issue with Grizzly:
python3 -m grizzly.replay <browser-bin> testcase.html --ignore memory -t 60 --xvfb

A Pernosco session is available here: https://pernos.co/debug/s0090rv3PN-AtOXwl78i_g/index.html

In this trace SIGABRT is sent to the busiest process after 90 seconds.

Attached file testcase.html

Never mind, that didn't really regress this. bug 1656004 changed the default padding for option elements; and I can reproduce the hang in much older builds (e.g. Nightly 2016-01-01) if I simply specify some padding on the option element in the testcase.

Nightly 2015-01-01 is fine, though, so this does still seem to be an (old) regression.

No longer regressed by: 1656004

Regression range for testcase 2:
https://hg.mozilla.org/mozilla-central/pushloghtml?fromchange=2cb22c058add&tochange=3094601af679

...but if I add an additional 1px of border-padding (coming up as testcase 3), then this hang goes back further, to when we enabled the box-decoration:break pref by default. And if I run mozregression with that pref manually set to true, then this goes back to bug 998535.

Basically, this seems to be multicol column-height-balancing getting confused with box-decoration-break:clone.

(one last testcase which reproduces the issue in current Nightly without needing any option elements; just div.)

TYLin, maybe you could take a look if you get a chance?

Flags: needinfo?(aethanyc)
Summary: Hang during reflow → Hang during reflow, with multi-column and "box-decoration-break: clone"
Severity: -- → S3
Keywords: regressionhang

Thanks Daniel. You reduced the testcase further so that the issue is very easy identified.

The problem is that with box-decoration-break: clone, we need to replicate border and padding in every column. However, the available block-size is too short, and the block-size of the border and padding is already saturated the available block-size. We end up not consuming any content block-size of the block to be fragmented, trapping in nsColumnSetFrame::ReflowChildren and creating the column contents forever.

We have an incomplete attempt here, but it's not helpful regardless of the box-decoration-break value with a large border and padding.

Whiteboard: [fuzzblocker]
Blocks: domino

The hang during reflow is fixed by bug 1754598.

firefox-bug1693616-001-crash.html and firefox-bug1693616-002-crash.html are
adapted from bug 1693616 testcase 4 and 5, respectively.

WARNING: All the tests added in patch can hang the Firefox builds without the
patch in bug 1754598.

Depends on D138967

Assignee: nobody → aethanyc
Status: NEW → ASSIGNED
Depends on: 1754598
Flags: needinfo?(aethanyc)
Pushed by aethanyc@gmail.com:
https://hg.mozilla.org/integration/autoland/rev/8f076bbafd0b
Add wpt reftest and crashtests for box-decoration-break:clone. r=dholbert
Created web-platform-tests PR https://github.com/web-platform-tests/wpt/pull/32913 for changes under testing/web-platform/tests
Whiteboard: [fuzzblocker] → [fuzzblocker], [wptsync upstream]
Status: ASSIGNED → RESOLVED
Closed: 2 years ago
Resolution: --- → FIXED
Target Milestone: --- → 99 Branch
Upstream PR merged by moz-wptsync-bot
Flags: in-testsuite+
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: