Closed Bug 1262432 Opened 9 years ago Closed 9 years ago

browser_device_width.js crashes at nsLayoutUtils::HasDisplayPort(content) on e10s debug

Categories

(Core :: Panning and Zooming, defect, P1)

48 Branch
defect

Tracking

()

RESOLVED FIXED
mozilla48
Iteration:
48.3 - Apr 25
Tracking Status
e10s + ---
firefox48 --- fixed

People

(Reporter: jryans, Assigned: kats)

References

(Blocks 1 open bug)

Details

(Keywords: assertion, crash, Whiteboard: [multiviewport] [mvp-rdm])

Attachments

(1 file)

This crash seems to be permanent. We'll need to investigate this in more detail. It's a bit surprising that it appears on only one platform, so it may be some kind of async race. Example log: https://treeherder.mozilla.org/logviewer.html#?job_id=19011621&repo=try
Flags: qe-verify?
Priority: -- → P2
Whiteboard: [multiviewport][triage] → [multiviewport] [mvp-rdm]
Blocks: e10s-tests
tracking-e10s: --- → +
This is frequent on Linux and OSX as well on the Ash repo (where we run e10s tests across all platforms). https://treeherder.mozilla.org/logviewer.html#?job_id=163545&repo=ash
Keywords: assertion
Summary: browser_device_width.js crashes at nsLayoutUtils::HasDisplayPort(content) on Windows 7 e10s debug → browser_device_width.js crashes at nsLayoutUtils::HasDisplayPort(content) on e10s debug
I caught this in rr, investigating.
Assignee: nobody → bugmail.mozilla
Great, thanks for checking it out :kats!
So the assertion was added in bug 1208780, but I'm not sure that it's a valid assertion. It seems to assert that the first time we get a repaint request for a root scrollable, it will already have displayport margins set on it. That's true in a lot of cases, but not all. In particular, in this case, I'm seeing that the root content element is getting a scrollid via the code at [1], and that doesn't set any margins. The APZ sends a repaint request which is the first time that the element gets margins, and that causes the assertion to fail. :tnikkel, do you recall why you added that assertion? [1] http://mxr.mozilla.org/mozilla-central/source/layout/base/nsDisplayList.cpp?rev=62a953a61527#1759
Flags: needinfo?(tnikkel)
It looks like bug 1208780 comment 24 through to comment 26 has some discussion on this. I think the assumption was incorrect (or maybe it has become incorrect since that code was written), and we should be ok to take out the assertion. The call to APZCCallbackHelper::SetDisplayPortMargins already handles the case where there is no displayport, and sets zero-margins on the ancestors. (Although the root frame shouldn't have any ancestors, so it should be a no-op).
(got mid-aired, but this is what I wrote) (In reply to Kartikaya Gupta (email:kats@mozilla.com) from comment #6) > :tnikkel, do you recall why you added that assertion? > > [1] > http://mxr.mozilla.org/mozilla-central/source/layout/base/nsDisplayList. > cpp?rev=62a953a61527#1759 I think this is the link you mean http://mxr.mozilla.org/mozilla-central/source/gfx/layers/apz/util/APZCCallbackHelper.cpp?rev=84f8d2e0106c#259 See https://bugzilla.mozilla.org/show_bug.cgi?id=1208780#c24 If we create a displayport then we want to make sure every async scrollable ancestor also has a displayport (a zero margin one). In that bug I determined (wrongly it seems) that UpdateRootFrame couldn't create a displayport, only modify one. So I added that assert. If we can create a displayport there then we should call SetZeroMarginDisplayPortOnAsyncScrollableAncestors. But I guess that will have no effect because it is the root? So assert that?
Flags: needinfo?(tnikkel)
(In reply to Timothy Nikkel (:tnikkel) from comment #8) > (got mid-aired, but this is what I wrote) > > [1] > > http://mxr.mozilla.org/mozilla-central/source/layout/base/nsDisplayList. > > cpp?rev=62a953a61527#1759 > > I think this is the link you mean > > http://mxr.mozilla.org/mozilla-central/source/gfx/layers/apz/util/ > APZCCallbackHelper.cpp?rev=84f8d2e0106c#259 > That's the link to the assertion. The link I had was where the content element gets a scrollId (therefore an APZ) without getting displayport margins. > See > https://bugzilla.mozilla.org/show_bug.cgi?id=1208780#c24 > > If we create a displayport then we want to make sure every async scrollable > ancestor also has a displayport (a zero margin one). In that bug I > determined (wrongly it seems) that UpdateRootFrame couldn't create a > displayport, only modify one. So I added that assert. Ok, makes sense. > If we can create a > displayport there then we should call > SetZeroMarginDisplayPortOnAsyncScrollableAncestors. This should already be happening via the call to APZCCallbackHelper::SetDisplayPortMargins. > But I guess that will > have no effect because it is the root? So assert that? I'm not really sure what assertion can capture that? I'd rather just leave out the assertion and let the SetZeroMarginDisplayPortOnAsyncScrollableAncestors do its job if it's needed.
Component: Developer Tools: Responsive Design Mode → Panning and Zooming
Product: Firefox → Core
Version: Trunk → 48 Branch
Comment on attachment 8740536 [details] MozReview Request: Bug 1262432 - Remove assertion that may be legitimately false sometimes. r?tnikkel https://reviewboard.mozilla.org/r/45829/#review42427
Attachment #8740536 - Flags: review?(tnikkel) → review+
RyanVM, should I go ahead and re-enable the test right away, or do you want to let my fix merge to Ash and bake for a bit first?
Flags: needinfo?(ryanvm)
We have Win7 debug devtools test coverage on inbound, so go ahead and re-enable whenever.
Flags: needinfo?(ryanvm)
Status: NEW → RESOLVED
Closed: 9 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla48
Hi Ryan, will this bug need verification?
Iteration: --- → 48.3 - Apr 25
Flags: needinfo?(jryans)
Priority: P2 → P1
(In reply to Marco Mucci [:MarcoM] from comment #17) > Hi Ryan, will this bug need verification? No, we should know enough from just the automated test results.
Flags: qe-verify?
Flags: qe-verify-
Flags: needinfo?(jryans)
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: