Closed Bug 1471107 Opened 7 years ago Closed 7 years ago

Intermittent Assertion failure: mActiveSuppressDisplayport >= 0, at layout/base/PresShell.cpp:8575

Categories

(Core :: Graphics, defect, P5)

defect

Tracking

()

RESOLVED FIXED
mozilla63
Tracking Status
firefox-esr52 --- unaffected
firefox-esr60 --- unaffected
firefox61 --- unaffected
firefox62 --- unaffected
firefox63 --- fixed

People

(Reporter: intermittent-bug-filer, Assigned: mconley)

References

Details

(Keywords: assertion, intermittent-failure, regression)

Attachments

(1 file, 1 obsolete file)

Filed by: nerli [at] mozilla.com https://treeherder.mozilla.org/logviewer.html#?job_id=184824159&repo=autoland https://queue.taskcluster.net/v1/task/Cn0sXUbYQdOpC0M4deX0nQ/runs/0/artifacts/public/logs/live_backing.log 17:48:26 INFO - GECKO(977) | --DOCSHELL 0x121366000 == 5 [pid = 982] [id = {2f3db714-6ff4-1741-822e-2a67d39c206b}] 17:48:26 INFO - GECKO(977) | --DOCSHELL 0x12506b800 == 4 [pid = 982] [id = {2b5ca041-b525-b240-8c8e-51ccdab2c18e}] 17:48:26 INFO - GECKO(977) | --DOMWINDOW == 17 (0x12125aa00) [pid = 982] [serial = 22] [outer = 0x0] [url = about:blank] 17:48:26 INFO - GECKO(977) | --DOMWINDOW == 16 (0x12125d200) [pid = 982] [serial = 25] [outer = 0x0] [url = http://mochi.test:8888/browser/browser/components/sessionstore/test/browser_463206_sample.html] 17:48:26 INFO - GECKO(977) | --DOMWINDOW == 15 (0x12125e600) [pid = 982] [serial = 41] [outer = 0x0] [url = about:blank] 17:48:26 INFO - GECKO(977) | --DOMWINDOW == 14 (0x121a38600) [pid = 982] [serial = 38] [outer = 0x0] [url = about:blank] 17:48:26 INFO - GECKO(977) | --DOCSHELL 0x119f44000 == 3 [pid = 982] [id = {30c03e5c-9f51-284d-9152-cd4cd1b81a87}] 17:48:26 INFO - GECKO(977) | --DOMWINDOW == 13 (0x12125da00) [pid = 982] [serial = 46] [outer = 0x0] [url = about:blank] 17:48:26 INFO - GECKO(977) | --DOMWINDOW == 12 (0x12125d600) [pid = 982] [serial = 44] [outer = 0x0] [url = about:blank] 17:48:27 INFO - GECKO(977) | Assertion failure: mActiveSuppressDisplayport >= 0, at /builds/worker/workspace/build/src/layout/base/PresShell.cpp:8575 17:48:27 INFO - GECKO(977) | ###!!! [Parent][RunMessage] Error: Channel error: cannot send/recv 17:48:27 INFO - GECKO(977) | ###!!! [Parent][RunMessage] Error: Channel error: cannot send/recv 17:48:27 INFO - GECKO(977) | ###!!! [Parent][RunMessage] Error: Channel error: cannot send/recv 17:48:27 INFO - GECKO(977) | ###!!! [Parent][RunMessage] Error: Channel error: cannot send/recv 17:48:27 INFO - GECKO(977) | ###!!! [Parent][MessageChannel] Error: (msgtype=0x160001,name=PBrowser::Msg_AsyncMessage) Channel error: cannot send/recv 17:48:27 INFO - GECKO(977) | JavaScript error: resource:///modules/sessionstore/TabStateFlusher.jsm, line 85: NS_ERROR_UNEXPECTED: 17:48:27 INFO - GECKO(977) | ###!!! [Parent][MessageChannel] Error: (msgtype=0x160063,name=PBrowser::Msg_ParentActivated) Channel error: cannot send/recv 17:48:27 INFO - GECKO(977) | ###!!! [Parent][MessageChannel] Error: (msgtype=0x160063,name=PBrowser::Msg_ParentActivated) Channel error: cannot send/recv 17:48:27 INFO - GECKO(977) | ###!!! [Parent][MessageChannel] Error: (msgtype=0x2D0053,name=PContent::Msg_Deactivate) Channel error: cannot send/recv 17:48:27 INFO - GECKO(977) | ###!!! [Parent][MessageChannel] Error: (msgtype=0x160065,name=PBrowser::Msg_StopIMEStateManagement) Channel error: cannot send/recv 17:48:27 INFO - GECKO(977) | ###!!! [Parent][MessageChannel] Error: (msgtype=0x160080,name=PBrowser::Msg_Destroy) Channel error: cannot send/recv 17:48:27 INFO - GECKO(977) | ###!!! [Parent][MessageChannel] Error: (msgtype=0x160080,name=PBrowser::Msg_Destroy) Channel error: cannot send/recv
Keywords: assertion
Summary: Intermittent browser/components/sessionstore/test/browser_477657.js | Test timed out - after Assertion failure: mActiveSuppressDisplayport >= 0, at /builds/worker/workspace/build/src/layout/base/PresShell.cpp:8575 → Intermittent Assertion failure: mActiveSuppressDisplayport >= 0, at layout/base/PresShell.cpp:8575
Flags: needinfo?(mconley)
It's possible to suppress a displayport on a PresShell multiple times, and then for that PresShell to be destroyed. If the TabChild tries to unsuppress the displayport for its top-level PresShell, and it has already been destroyed, it will attempt to create a new one and unsuppress. However, unsuppressing the displayport on a brand new PresShell shouldn't be possible because PresShells don't start suppressed.
Assignee: nobody → mconley
Flags: needinfo?(mconley)
Hey kats, I think I understand what's happening here. It looks like we call TabParent::SuppressDisplayport(true) here: https://searchfox.org/mozilla-central/rev/28daa2806c89684b3dfa4f0b551db1d099dda7c2/dom/ipc/TabParent.cpp#3589 and TabParent::SuppressDisplayport(false) here: https://searchfox.org/mozilla-central/rev/28daa2806c89684b3dfa4f0b551db1d099dda7c2/dom/ipc/TabParent.cpp#3589 and it seems like it's possible in between those two calls for the underlying PresShell to get destroyed and replaced. So I think we have a few options: 1. Somehow cache the previous mActiveSuppressDisplayport when destroying a PresShell, and if a new one gets created, copy it into the new one. 2. Do suppression tracking at a higher-level - over something that can't get swapped out and replaced. Does the PresShell have something like an outer window? Maybe the DocumentViewer? 3. Get rid of the assertion in the PresShell and ignore attempts to unsuppress when the suppression level is 0. Do you have an opinion, kats?
Flags: needinfo?(bugmail)
Component: Session Restore → Graphics
Product: Firefox → Core
I'm leaning towards option 3. It's the simplest to do. The downside is that in these scenarios the new content loaded into the tab will not have a displayport suppressed, but it's a rare case (tab loads new content while the user is resizing the window) and I'm not too concerned about that. Is there any way that a presshell could get detached from a TabChild and still be used somewhere else? If so that would be more concerning because if that happened during a live resize then that presshell would get stuck in a suppressed state.
Flags: needinfo?(bugmail)
(In reply to Kartikaya Gupta (email:kats@mozilla.com) from comment #8) > Is there any way that a presshell could get detached from a TabChild and > still be used somewhere else? If so that would be more concerning because if > that happened during a live resize then that presshell would get stuck in a > suppressed state. Oh, geez, good question. Maybe? The only place I can think where that _might_ happen is when we're saving presentation state in the bfcache... Hey mrbkap, do you know the answer to kats' question?
Flags: needinfo?(mrbkap)
Or maybe nika? I think you've had some dealings with bfcache recently.
Flags: needinfo?(nika)
I am unfortunately not sure what's going on here off the top of my head :-/. Haven't actually interacted with PresShell that much.
Flags: needinfo?(nika)
Okay, thanks nika. Maybe ehsan knows the answer to kats' question? (See comment 9)
Flags: needinfo?(ehsan)
(In reply to Mike Conley (:mconley) (:⚙️) (PTO Jul 24th-Aug 6th)) from comment #12) > Okay, thanks nika. > > Maybe ehsan knows the answer to kats' question? (See comment 9) I can't think of any such case off the top of my head...
Flags: needinfo?(ehsan)
Flags: needinfo?(mrbkap)
Attachment #8990473 - Attachment is obsolete: true
Comment on attachment 8991981 [details] Bug 1471107 - Get rid of assertion and handle the already-unsuppressed displayport case in PresShell. r?kats Kartikaya Gupta (email:kats@mozilla.com) has approved the revision. https://phabricator.services.mozilla.com/D2130
Attachment #8991981 - Flags: review+
Pushed by mconley@mozilla.com: https://hg.mozilla.org/integration/autoland/rev/2adb01963b2d Get rid of assertion and handle the already-unsuppressed displayport case in PresShell. r=kats
Status: NEW → RESOLVED
Closed: 7 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla63
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: