GeckoSession.goBack() can be unresponsive during a heavy page load.
Categories
(GeckoView :: General, enhancement, P1)
Tracking
(Performance Impact:?, geckoview62 wontfix, firefox-esr60 wontfix, firefox63 wontfix, firefox64 wontfix, firefox66 wontfix, firefox67 wontfix, firefox68 fixed)
People
(Reporter: rbarker, Assigned: squib)
References
(Depends on 1 open bug, Blocks 1 open bug)
Details
(Whiteboard: [geckoview:fxr:p1])
Attachments
(4 files, 16 obsolete files)
Reporter | ||
Updated•6 years ago
|
Reporter | ||
Comment 2•6 years ago
|
||
Comment 3•6 years ago
|
||
Reporter | ||
Comment 4•6 years ago
|
||
Comment 5•6 years ago
|
||
Comment 6•6 years ago
|
||
Updated•6 years ago
|
Comment 7•6 years ago
|
||
Comment 8•6 years ago
|
||
Comment 9•6 years ago
|
||
Updated•6 years ago
|
Comment 10•6 years ago
|
||
Comment 11•6 years ago
|
||
Comment 12•6 years ago
|
||
Comment 13•6 years ago
|
||
Comment 14•6 years ago
|
||
Comment 15•6 years ago
|
||
Comment 16•6 years ago
|
||
Comment 17•6 years ago
|
||
Assignee | ||
Updated•6 years ago
|
Comment 18•6 years ago
|
||
Comment 19•6 years ago
|
||
Assignee | ||
Comment 20•6 years ago
|
||
Comment 21•6 years ago
|
||
Reporter | ||
Updated•6 years ago
|
Assignee | ||
Comment 22•6 years ago
|
||
Comment 23•6 years ago
|
||
Assignee | ||
Comment 24•6 years ago
|
||
Assignee | ||
Updated•6 years ago
|
Comment 25•6 years ago
|
||
Assignee | ||
Comment 26•6 years ago
|
||
Comment 27•6 years ago
|
||
Assignee | ||
Comment 28•6 years ago
|
||
Updated•6 years ago
|
Assignee | ||
Comment 30•6 years ago
|
||
Assignee | ||
Comment 31•6 years ago
|
||
Assignee | ||
Comment 32•6 years ago
|
||
Comment 33•6 years ago
|
||
Comment 34•6 years ago
|
||
Comment 35•6 years ago
|
||
Assignee | ||
Comment 36•6 years ago
|
||
(In reply to Olli Pettay [:smaug] from comment #33)
I think initially we should handle only top level page session history
loads, since stopping scripts when dealing with iframes could easily break
pages. So go*() functions should check the type of the load.
Is there a good way to check the type of load? I was thinking of checking session history, but I can't do that from the chrome process due to bug 1233803 (or at least, I don't know how to do it). Otherwise, I'd add the check in RemoteWebNavigation.js
Maybe I could check in HangMonitorChild::RecvCancelContentJSExecutionIfRunning
? I'd have to tell that function how the user navigated though (back, forward, going to a particular index in history)...
Comment 37•6 years ago
|
||
Hmm, parent process should know the history, since back-forward button, when pressed long time, shows it.
Firefox UI folks would know that better. Perhaps jaws?
If parent side doesn't have enough information, then we'd need to basically send back/forward commands as the interrupt message using HangMonitor channel, but interrupt JS run only after checking that session history navigation is cross-page. And then dispatch a runnable to trigger back/forward asynchronously.
Assignee | ||
Comment 38•6 years ago
|
||
:mconley, you worked on bug 1233803, which moved sessionHistory stuff from the chrome process. Do you know what the right way to get an item from session history would be here? I'm starting in RemoteWebNavigation.js
, so something in the chrome process would be the easiest for me. All I really need to know is: "When navigating through history, is the next page going to be a top-level load?" Eventually, the messages in this patch end up going through the HangMonitor, so I could check in a child process via HangMonitorChild
. However, that's a lot more plumbing than just doing it in the chrome process. :)
Assignee | ||
Comment 39•6 years ago
|
||
Comment 40•6 years ago
|
||
Fission should make this easier by moving session history state back into the parent process here in bug 1438272.
The way the back and forward longpress/context menu currently does this is by asking SessionStore:
This relies on the parent having an up-to-date snapshot of the tab's session history state - and those updates get batched and set up every 2 seconds or so when they change. So that's a thing to keep in mind.
So here's what I suggest:
-
See how far along the Fission team is to moving this stuff into the parent process. I suspect it's still a ways out - but we can ask. If the timeline is reasonable, use that.
-
Assuming you need to do this check in native code, we might have to expose an XPCOM hack to let C++ talk to SessionStore to get that information out, and do that until the Fission stuff is ready (and then switch over and remove the hack).
Hey nika, what's story with bug 1438272 - can we assume that's still a ways out?
Comment 41•6 years ago
|
||
mconley, we're almost getting started with SessionHistory now, so no progress to report just yet.
Assignee | ||
Comment 42•6 years ago
|
||
:mconley, thanks for the info! I'll have to see whether it'd be better to do this in C++ or JS once I get this working on GeckoView as well (I'm guessing it'll be easier to do in JS though...)
Assignee | ||
Comment 43•6 years ago
|
||
:snorp, smaug suggested I ping you about how to hook up the patch in attachment 9035176 [details] [diff] [review] to GeckoView. I had thought I could call TabParent::interruptScript()
here:
similar to what I do in toolkit/components/remotebrowserutils/RemoteWebNavigation.js
. However, it doesn't seem to work. I'm still debugging stuff on my end, but is there anything in particular I should know about differences in GeckoView's architecture compared to desktop here?
Just as a quick summary of the patch, on desktop, I start by calling TabParent::interruptScript()
, which calls ContentParent::CancelContentJSExecutionIfRunning()
, which calls the ProcessHangMonitor
, eventually setting a flag on XPCJSContext
that terminates the content JS so the chrome JS for our back button can run.
Comment 44•6 years ago
•
|
||
(In reply to Jim Porter (:squib) from comment #43)
:snorp, smaug suggested I ping you about how to hook up the patch in attachment 9035176 [details] [diff] [review] to GeckoView. I had thought I could call
TabParent::interruptScript()
here:similar to what I do in
toolkit/components/remotebrowserutils/RemoteWebNavigation.js
. However, it doesn't seem to work. I'm still debugging stuff on my end, but is there anything in particular I should know about differences in GeckoView's architecture compared to desktop here?
GeckoView is just using a <browser>
, which should already be using RemoteWebNavigation.js, so you should only have to add your interruptScript()
stuff in the one place. But no, I don't think we're really doing anything special there.
Just as a quick summary of the patch, on desktop, I start by calling
TabParent::interruptScript()
, which callsContentParent::CancelContentJSExecutionIfRunning()
, which calls theProcessHangMonitor
, eventually setting a flag onXPCJSContext
that terminates the content JS so the chrome JS for our back button can run.
That seems like it should work, I guess? Are things getting dropped along the way somewhere?
Assignee | ||
Comment 45•6 years ago
|
||
(In reply to James Willcox (:snorp) (jwillcox@mozilla.com) from comment #44)
That seems like it should work, I guess? Are things getting dropped along the way somewhere?
I dug into this a bit more and it turns out there's no hang monitor in ContentParent
with GeckoView (at least in GeckoView-example), so we can't actually pass the message along. I don't know if this is just a part of GeckoView that hasn't been implemented yet or if there's some other way we should do things in this case. Any ideas?
Assignee | ||
Comment 46•6 years ago
|
||
I've been thinking over how to determine whether something will be a top-level load, and there are a few subtleties that I think we'd need to handle. The biggest one is that we need to be able to cancel content JS not only when you go back/forward, but when you navigate to an arbitrary point in the session history (e.g. go back 3 pages). It's unlikely, but certainly possible that you'd have a session history like this:
Page A, iframe A1
Page B
Page A, iframe A2
Page A, iframe A3 (current)
I'm not 100% sure how the actual load would be handled, but I'd expect "go back 3 pages" from the current to trigger a top-level load, even though the top-level pages are the same. That means we'd have to check every session history item between the start and the end to ensure that the top-level page never changes. This seems like something complex enough that we'd want to have a special SessionHistory function that asks "would navigating to the following item in history trigger a top-level load"? Then we could just expose that function to chrome somehow, rather than doing a workaround while we wait for bug 1438272. It's even possible such a function already exists; I'm not super-familiar with the session history code.
Does the above sound reasonable, :mconley? Is there anything else I should factor in that I've missed?
(In reply to Jim Porter (:squib) from comment #45)
(In reply to James Willcox (:snorp) (jwillcox@mozilla.com) from comment #44)
That seems like it should work, I guess? Are things getting dropped along the way somewhere?
I dug into this a bit more and it turns out there's no hang monitor in
ContentParent
with GeckoView (at least in GeckoView-example), so we can't actually pass the message along. I don't know if this is just a part of GeckoView that hasn't been implemented yet or if there's some other way we should do things in this case. Any ideas?
That looks like an oversight. I filed bug 1521087 and put up a patch. We still don't get the slow script warning (bug 1521094), but the right events should be emitted now.
Comment 48•6 years ago
|
||
(In reply to Jim Porter (:squib) from comment #46)
Does the above sound reasonable, :mconley? Is there anything else I should factor in that I've missed?
Tentatively reasonable... so, one thing I'll note is that nsISHEntry, which is what eventually gets serialized via SessionHistory.jsm in the content process and sent up to the parent, has a isSubFrame property this is sent with it.
So I guess the "is top-level" check could look at the starting index, and work its way back to the target index, and if it ever sees an entry where isSubFrame is false, then bam, I guess we know we need a top-level load.
Hey qDot, I hate to rope you into this, but I know you've been down in the guts of DocShell lately... do you have any additional thoughts on this, or things we might be missing?
Comment 49•6 years ago
|
||
(In reply to Mike Conley (:mconley) (:⚙️) from comment #48)
Tentatively reasonable... so, one thing I'll note is that nsISHEntry, which is what eventually gets serialized via SessionHistory.jsm in the content process and sent up to the parent, has a isSubFrame property this is sent with it.
So I guess the "is top-level" check could look at the starting index, and work its way back to the target index, and if it ever sees an entry where isSubFrame is false, then bam, I guess we know we need a top-level load.
:qDot has roped me in to help out with this ^_^
Hmm, so the decision as to whether or not to do a "short-circuited load" is done here: https://searchfox.org/mozilla-central/rev/39265dd58298c40bed029617ad408bf806cce761/docshell/base/nsDocShell.cpp#9089-9106
This depends on knowing which nsISEntryShared is being used by each of these entries. To my knowledge this isn't stored in the SessionStore's understanding of session history. We'd also need to know whether the entry is due to a frame load, but that's already available in the parent.
Comment 50•6 years ago
|
||
If we send down the InnerWindowID for the nsISHEntryShared for each entry and store it in SessionStore, we may be able to determine whether a short-circuited load is occurring? We'd need to add that information to each entry when serializing it here: https://searchfox.org/mozilla-central/rev/39265dd58298c40bed029617ad408bf806cce761/toolkit/modules/sessionstore/SessionHistory.jsm#142
Assignee | ||
Comment 51•6 years ago
|
||
Here are my thoughts about how to do this:
First, should we ask the DocShell directly whether a load is short-circuited? Or would it be ok/better to ask session history? (Maybe the above check for short-circuited loads should just be moved into the session history code so the logic is shared?)
Second, I'm worried about using the SessionStore's representation of history (i.e. in the parent process), since per comment 40, this is synced every 2 seconds or so. In the case where a user clicks on a link and then immediately tries to go back, we'd be working with an outdated version of the session history, which could lead to us doing the wrong thing here.
Finally, the big question I still have is where to do the check to determine if the load is short-circuited. With bug 1438272, I think it would make sense to put this in the parent process (e.g. in RemoteWebNavigation.js). However, in the short term, I think we'd need to do the check in the content process (see my second point above). One way to do this is to make a new interface for the parent process that just asks the content process whether a load would be short-circuited; this would be async for now, but perhaps could become synchronous when bug 1438272 lands. Another way would be to pass the navigation we're doing (e.g. "go back 3 pages") down to the content process and do the "is short-circuited" check down there. The latter means that we'd have to make bigger changes to this code when bug 1438272 lands, but it might also be easier to do now. Since we'd like to eventually enable this patch for all loads, including short-circuited ones, maybe we don't need to think too far into the future with this; the check might go away entirely in the medium term.
What do people think about these options?
(I'm sort of leaning towards making a special session history function to check if a load should be short-circuited, and then exposing an API for that in both the content process (for the DocShell) and the parent process (for this patch), and then doing my check in RemoteWebNavigation.js. However, I'm not entirely sure this is the right way to do things.)
Comment 52•6 years ago
|
||
A quick note on how this happens at the moment in the content process on a new load.
I'm currently refactoring short circuited loads out of nsDocShell::InternalLoad as part of Bug 1471711, specifically https://phabricator.services.mozilla.com/D17018. To get to that part of the check in the new short circuiting function, we currently need:
- Current URI
- URI we're going to
- Load Type
- A SHEntry to check against
- Whether or not this load has a post data stream attached
And that's about it. All of these are currently attached to a DocShellLoadState object. We could probably shuffle the "are we even doing a short circuited load" logic somewhere else if we need to access it outside of actually running the history load.
Comment 53•6 years ago
|
||
(In reply to Jim Porter (:squib) from comment #51)
Second, I'm worried about using the SessionStore's representation of history (i.e. in the parent process), since per comment 40, this is synced every 2 seconds or so. In the case where a user clicks on a link and then immediately tries to go back, we'd be working with an outdated version of the session history, which could lead to us doing the wrong thing here.
- I agree with that worry.
- Right now, GeckoView doesn't even have something comparable to the Desktop session store.
Comment 54•6 years ago
|
||
(In reply to Jan Henning [:JanH] from comment #53)
(In reply to Jim Porter (:squib) from comment #51)
Second, I'm worried about using the SessionStore's representation of history (i.e. in the parent process), since per comment 40, this is synced every 2 seconds or so. In the case where a user clicks on a link and then immediately tries to go back, we'd be working with an outdated version of the session history, which could lead to us doing the wrong thing here.
- I agree with that worry.
- Right now, GeckoView doesn't even have something comparable to the Desktop session store.
In that case, we're in a bit of an awkward situation. The parent process currently doesn't have any reflection of session history which is super reliable (although we're working on it in bug 1467221). Without that information, it isn't really possible for us to correctly invoke the check to see if we have a same-document load from OOP.
We'd have to bounce into content, interrupt script execution, and do a check there to see what the behaviour would be.
Assignee | ||
Comment 55•6 years ago
|
||
(In reply to :Nika Layzell from comment #54)
We'd have to bounce into content, interrupt script execution, and do a check there to see what the behaviour would be.
Hmm, that does seem bad, given that we'd essentially be interrupting script execution to see if we should, well, interrupt script execution.
Now, maybe there's a way to simply pause the content script so that our chrome JS can run and then resume the content script where it left off, but then I don't think we'd need to check for short-circuited loads anyway: we'd just pause the content script to let the chrome JS do its navigation stuff and then, if the content JS is still around (as in a short-circuited load), resume it. I'm not sure if there's a way to do this though...
Assignee | ||
Comment 56•6 years ago
|
||
Kannan: I just wanted to check... is there a good way to pause the content JS and resume it later (so that our chrome JS can do its thing)? That would probably solve our issue here a lot more neatly than cancelling the content JS entirely...
Comment 57•6 years ago
|
||
Why can't we send "back" (or forward) message to child process via HangMonitor channel. If we detect that we can stop processing JS, stop. Any in any case, dispatch a runnable to the main thread to actually do 'back' action.
Comment 58•6 years ago
|
||
Interrupting JS is not difficult, but interrupting JS to run other JS in the same runtime is not really feasible with the current setup - as far as I know.
Can setting an interrupt and waiting until the next event loop fire (at which point executing more JS should be fine) not work?
Updated•6 years ago
|
Assignee | ||
Comment 59•6 years ago
|
||
(In reply to Kannan Vijayan [:djvj] from comment #58)
Interrupting JS is not difficult, but interrupting JS to run other JS in the same runtime is not really feasible with the current setup - as far as I know.
Can setting an interrupt and waiting until the next event loop fire (at which point executing more JS should be fine) not work?
I'm not totally clear on the differences between your first paragraph and your second. What you've said in the first paragraph is how I understood things to be; is there a different way to set an interrupt that would help here?
Currently, I'm looking into doing something more like what :smaug suggested in comment 57, though I'm not sure how much I can rely on the HangMonitor being around. From bug bug 1521087, I can see that the HangMonitor can be disabled with a pref, and so at minimum, we'd want to use a non-HangMonitor way of passing the goBack message when it's preffed off. I'm not sure we want even more code paths for handling these messages though...
Updated•6 years ago
|
Assignee | ||
Comment 60•6 years ago
|
||
Quick update: I have a proof of concept that checks session history via the HangMonitor and only cancels content JS on non-short-circuited loads. It still needs some cleanup (in particular, I'm only handling the back button now, not arbitrary history navigation).
What remains after this:
- Figure out how aggressive this patch should be; we don't want to trigger this except when necessary, since we're removing the current page from the BF cache when we cancel its JS.
- Tests
- Reviews!
Assignee | ||
Comment 61•6 years ago
|
||
Assignee | ||
Comment 62•6 years ago
|
||
In this part, I pass along the navigation type (and index for when using the dropdown on the back/forward buttons). This allows us to check if there's a top-level load "between" the start and end pages. The patch might look a bit strange, since we're passing the navigation operation to two places from RemoteWebNavigation.js (the normal message passing that existed before this patch and the HangMonitor channel in this patch). This is primarily to make it easier to stop passing the navigation info along the HangMonitor channel once session history is uplifted into the parent process. At that point, the check for whether there's a top-level load could happen in TabParent (I think).
Comment 63•6 years ago
|
||
Assignee | ||
Comment 64•6 years ago
|
||
Uploaded the correct patch this time!
Comment 65•6 years ago
|
||
Comment 66•6 years ago
|
||
Comment 67•6 years ago
|
||
I'd assume the part 2 asserted on debug builds about wrong thread.
Comment 68•6 years ago
|
||
Assignee | ||
Comment 69•6 years ago
|
||
This is my attempt to convert the navigationType to an enum. It doesn't work though, since I don't know how to get the enum definition to be imported into PProcessHangMonitor.ipdl
. Is there something obvious I'm missing? I looked through the m-c source and didn't find any examples I could copy from...
Assignee | ||
Comment 70•6 years ago
|
||
This is the same as the previous version of part 1, but without debug printfs
Assignee | ||
Comment 71•6 years ago
|
||
As above, but without the failed attempt to merge. :(
Assignee | ||
Comment 72•6 years ago
|
||
This moves the call to CanCancelContentJS
to the interrupt callback. It seems a little strange to request another interrupt inside the interrupt callback though; should I move all the change from XPCJSContext::InterruptCallback
to HangMonitorChild::InterruptCallback
? (I think we'd end up moving it back when session history is in the main process though.)
Assignee | ||
Updated•6 years ago
|
Comment 73•6 years ago
|
||
Comment 74•6 years ago
|
||
Comment 75•6 years ago
|
||
https://searchfox.org/mozilla-central/rev/3e0f1d95fcf8832413457e3bec802113bdd1f8e8/docshell/base/nsDocShell.cpp#8829
can be useful to check the shentry navigation between documents.
(in-documents navigations can happen with fragment navigation or push/replaceState)
Assignee | ||
Comment 76•6 years ago
|
||
Assignee | ||
Comment 77•6 years ago
|
||
smaug: One more (hopefully quick!) question: do you have any ideas on what I should do here for automated tests? I was hoping to base tests here on ones from bug 1279086, but that bug doesn't appear to have any tests! Are automated tests not needed for something like this? (It sure would make my job easier if they aren't, although I tend to prefer having tests so we don't regress things accidentally.)
![]() |
||
Comment 78•6 years ago
|
||
Comment 79•6 years ago
|
||
Automated test could be a browser test perhaps. Since this behavior should be behind a pref,
perhaps test first pref off, going back, and then forward and check that when going forward, pageshow.persisted should be true (to tell that bfcache wasn't disabled) and then enable the pref and do the same again and pageshow.persisted should be false.
Assignee | ||
Comment 80•6 years ago
|
||
This fixes things so we actually use an enum. Thanks for the pointer, :froydnj! It required a lot of changes to the moz.build files, which worries me a bit, but maybe it's not really an issue in practice. I'm going to take a look at history pushState stuff and on logging how often we block the bfcache with this patch (if it's too often, we'll probably have to be less aggressive with cancelling content JS). At that point, this should be pretty much ready for review.
Assignee | ||
Comment 81•6 years ago
|
||
This is the same patch as before, but I exported it with the commit message. I'll try to figure out how to submit this stuff through Phabricator (I think that's what it's called...) tomorrow. :)
Assignee | ||
Comment 82•6 years ago
|
||
This patch only cancels content JS when the host+port changes between SH entries. If you think it makes sense, I could merge this and part 1 before landing.
Assignee | ||
Comment 83•6 years ago
|
||
This patch passes a message through the HangMonitor channel when navigating
through history to cancel content JS that could hang the chrome JS in the
content process responsible for history navigation. If the content JS is
actually canceled, this also disables the BF cache for the current page, since
it could end up in an inconsistent state due to the JS cancellation.
Assignee | ||
Comment 84•6 years ago
|
||
In this part, we pass along the navigation type (and index for when using the
dropdown on the back/forward buttons). This allows us to check if there's a
top-level load "between" the start and end pages.
The patch might look a bit strange, since we're passing the navigation
operation to two places from RemoteWebNavigation.js (the normal message passing
that existed before this patch and the HangMonitor channel in this patch). This
is primarily to make it easier to stop passing the navigation info along the
HangMonitor channel once session history is uplifted into the parent process.
At that point, the check for whether there's a top-level load could happen in
TabParent (I think).
Depends on D23089
Assignee | ||
Updated•6 years ago
|
Assignee | ||
Updated•6 years ago
|
Assignee | ||
Comment 85•6 years ago
|
||
Patches are rebased onto latest m-c (52b03bc34899) and submitted through Phabricator.
Assignee | ||
Comment 86•6 years ago
|
||
I updated both patches, though I'm not sure what the right way to fix your comments for part 1 is. I also haven't fixed the issue with the user manually typing in a URL fragment in the location bar for part 2 yet; that's coming up next.
Assignee | ||
Comment 87•6 years ago
|
||
This patch adds an ID to ensure that we avoid canceling content JS if the next
page already started loading by the time we're ready to try canceling the JS.
Depends on D23090
Assignee | ||
Comment 89•6 years ago
|
||
Add tests to verify the behavior of the previous patches.
Depends on D25164
Assignee | ||
Comment 90•6 years ago
|
||
I kicked off a try build here: https://treeherder.mozilla.org/#/jobs?repo=try&revision=d3c04e29eaa87e8df7842f39fc6bdeb04596eb05.
Updated•6 years ago
|
Updated•6 years ago
|
Updated•6 years ago
|
Updated•6 years ago
|
Assignee | ||
Comment 91•6 years ago
|
||
Try build with fixes to Windows builds (looks pretty green!): https://treeherder.mozilla.org/#/jobs?repo=try&revision=4ecd8d6cabd1c40074061cd361745242c09d5b85
Comment 92•6 years ago
|
||
Comment 93•6 years ago
|
||
Backed out for browser-chrome failures
Backout: https://hg.mozilla.org/integration/autoland/rev/06cc9cecc881b931bf5275f1b7b25adb1af9c56d
Failure push: https://treeherder.mozilla.org/#/jobs?repo=autoland&revision=62ee0aed9e59a3b157b04a19177c4039d1d494e6
Failure log: https://treeherder.mozilla.org/logviewer.html#/jobs?job_id=241490893&repo=autoland&lineNumber=6855
20:37:04 INFO - TEST-OK | toolkit/components/normandy/test/browser/browser_actions_ShowHeartbeatAction.js | took 167ms
20:37:04 INFO - checking window state
20:37:06 INFO - GECKO(1880) | Completed ShutdownLeaks collections in process 10264
20:37:06 INFO - GECKO(1880) | Completed ShutdownLeaks collections in process 3644
20:37:06 INFO - GECKO(1880) | Completed ShutdownLeaks collections in process 1328
20:37:06 INFO - GECKO(1880) | Completed ShutdownLeaks collections in process 7552
20:37:06 INFO - GECKO(1880) | Completed ShutdownLeaks collections in process 7412
20:37:07 INFO - GECKO(1880) | Completed ShutdownLeaks collections in process 11228
20:37:07 INFO - TEST-START | Shutdown
20:37:07 INFO - Browser Chrome Test Summary
20:37:07 INFO - Passed: 1200
20:37:07 INFO - Failed: 0
20:37:07 INFO - Todo: 1
20:37:07 INFO - Mode: e10s
20:37:07 INFO - *** End BrowserChrome Test Results ***
20:40:13 INFO - GECKO(1880) | Exiting due to channel error.
20:40:13 INFO - GECKO(1880) | Exiting due to channel error.
20:40:14 INFO - TEST-INFO | Main app process: exit 80000003
20:40:14 INFO - Buffered messages finished
20:40:14 ERROR - TEST-UNEXPECTED-FAIL | Last test finished | application terminated with exit code 2147483651
20:40:14 INFO - runtests.py | Application ran for: 0:03:37.510000
20:40:14 INFO - zombiecheck | Reading PID log: c:\users\task_1555700576\appdata\local\temp\tmpuvfkpmpidlog
20:40:14 INFO - ==> process 11228 launched child process 4936 ("Z:\task_1555700576\build\application\firefox\firefox.exe" -contentproc --channel="11228.0.1276749770\1876179686" -parentBuildID 20190419163916 -greomni "Z:\task_1555700576\build\application\firefox\omni.ja" -appomni "Z:\task_1555700576\build\application\firefox\browser\omni.ja" -appdir "Z:\task_1555700576\build\application\firefox\browser" - 11228 gpu)
20:40:14 INFO - ==> process 11228 launched child process 3644 ("Z:\task_1555700576\build\application\firefox\firefox.exe" -contentproc --channel="11228.6.1984891992\433242137" -childID 1 -isForBrowser -prefsHandle 2808 -prefMapHandle 2804 -prefsLen 1 -prefMapSize 197180 -parentBuildID 20190419163916 -greomni "Z:\task_1555700576\build\application\firefox\omni.ja" -appomni "Z:\task_1555700576\build\application\firefox\browser\omni.ja" -appdir "Z:\task_1555700576\build\application\firefox\browser" - 11228 tab)
20:40:14 INFO - ==> process 11228 launched child process 7552 ("Z:\task_1555700576\build\application\firefox\firefox.exe" -contentproc --channel="11228.13.1722184701\1549202633" -childID 2 -isForBrowser -prefsHandle 2980 -prefMapHandle 2976 -prefsLen 98 -prefMapSize 197180 -parentBuildID 20190419163916 -greomni "Z:\task_1555700576\build\application\firefox\omni.ja" -appomni "Z:\task_1555700576\build\application\firefox\browser\omni.ja" -appdir "Z:\task_1555700576\build\application\firefox\browser" - 11228 tab)
20:40:14 INFO - ==> process 11228 launched child process 7412 ("Z:\task_1555700576\build\application\firefox\firefox.exe" -contentproc --channel="11228.20.1795948229\1932126039" -childID 3 -isForBrowser -prefsHandle 3224 -prefMapHandle 3232 -prefsLen 159 -prefMapSize 197180 -parentBuildID 20190419163916 -greomni "Z:\task_1555700576\build\application\firefox\omni.ja" -appomni "Z:\task_1555700576\build\application\firefox\browser\omni.ja" -appdir "Z:\task_1555700576\build\application\firefox\browser" - 11228 tab)
20:40:14 INFO - ==> process 11228 launched child process 1328 ("Z:\task_1555700576\build\application\firefox\firefox.exe" -contentproc --channel="11228.27.1629263259\218627492" -childID 4 -isForBrowser -prefsHandle 4320 -prefMapHandle 4240 -prefsLen 9327 -prefMapSize 197180 -parentBuildID 20190419163916 -greomni "Z:\task_1555700576\build\application\firefox\omni.ja" -appomni "Z:\task_1555700576\build\application\firefox\browser\omni.ja" -appdir "Z:\task_1555700576\build\application\firefox\browser" - 11228 tab)
20:40:14 INFO - ==> process 11228 launched child process 10264 ("Z:\task_1555700576\build\application\firefox\firefox.exe" -contentproc --channel="11228.34.749569842\354085081" -childID 5 -isForBrowser -prefsHandle 4184 -prefMapHandle 4312 -prefsLen 9407 -prefMapSize 197180 -parentBuildID 20190419163916 -greomni "Z:\task_1555700576\build\application\firefox\omni.ja" -appomni "Z:\task_1555700576\build\application\firefox\browser\omni.ja" -appdir "Z:\task_1555700576\build\application\firefox\browser" - 11228 tab)
20:40:14 INFO - zombiecheck | Checking for orphan process with PID: 7552
20:40:14 INFO - zombiecheck | Checking for orphan process with PID: 4936
20:40:14 INFO - zombiecheck | Checking for orphan process with PID: 1328
20:40:14 INFO - zombiecheck | Checking for orphan process with PID: 7412
20:40:14 INFO - zombiecheck | Checking for orphan process with PID: 10264
20:40:14 INFO - zombiecheck | Checking for orphan process with PID: 3644
20:40:14 INFO - Stopping web server
20:40:14 INFO - Stopping web socket server
20:40:14 INFO - Stopping ssltunnel
20:40:14 WARNING - leakcheck | refcount logging is off, so leaks can't be detected!
20:40:14 INFO - runtests.py | Running tests: end.
20:40:14 INFO - Buffered messages finished
20:40:14 INFO - Running manifest: toolkit\components\pictureinpicture\tests\browser.ini
20:40:14 INFO - The following extra prefs will be set:
20:40:14 INFO - media.videocontrols.picture-in-picture.enabled=true
20:40:14 INFO - INFO | runtests.py | ASan using symbolizer at Z:\task_1555700576\build\application\firefox\llvm-symbolizer.exe
20:40:14 INFO - INFO | runtests.py | ASan running in default memory configuration
20:40:15 INFO - Z:\task_1555700576\build\tests\bin\pk12util.exe: PKCS12 IMPORT SUCCESSFUL
20:40:15 INFO - Increasing default timeout to 90 seconds
20:40:15 INFO - INFO | runtests.py | ASan using symbolizer at Z:\task_1555700576\build\application\firefox\llvm-symbolizer.exe
20:40:15 INFO - INFO | runtests.py | ASan running in default memory configuration
20:40:15 INFO - INFO | runtests.py | ASan using symbolizer at Z:\task_1555700576\build\application\firefox\llvm-symbolizer.exe
20:40:15 INFO - INFO | runtests.py | ASan running in default memory configuration
20:40:15 INFO - MochitestServer : launching [u'Z:\task_1555700576\build\tests\bin\xpcshell.exe', '-g', 'Z:\task_1555700576\build\application\firefox', '-f', 'Z:\task_1555700576\build\tests\bin\components\httpd.js', '-e', "const _PROFILE_PATH = 'c:\\users\\task_1555700576\\appdata\\local\\temp\\tmp2hpbgl.mozrunner'; const _SERVER_PORT = '8888'; const _SERVER_ADDR = '127.0.0.1'; const _TEST_PREFIX = undefined; const _DISPLAY_RESULTS = false;", '-f', 'Z:\task_1555700576\build\tests\mochitest\server.js']
20:40:15 INFO - runtests.py | Server pid: 1968
20:40:15 INFO - runtests.py | Websocket server pid: 1476
20:40:15 INFO - INFO | runtests.py | ASan using symbolizer at Z:\task_1555700576\build\application\firefox\llvm-symbolizer.exe
20:40:15 INFO - INFO | runtests.py | ASan running in default memory configuration
20:40:15 INFO - runtests.py | SSL tunnel pid: 10196
20:40:15 INFO - runtests.py | Running with scheme: http
20:40:15 INFO - runtests.py | Running with e10s: True
20:40:15 INFO - runtests.py | Running with serviceworker_e10s: False
20:40:15 INFO - runtests.py | Running with socketprocess_e10s: False
20:40:15 INFO - runtests.py | Running tests: start.
20:40:15 INFO -
20:40:15 INFO - Application command: Z:\task_1555700576\build\application\firefox\firefox.exe -marionette --wait-for-browser -foreground -profile c:\users\task_1555700576\appdata\local\temp\tmp2hpbgl.mozrunner
20:40:15 INFO - runtests.py | Application pid: 10820
20:40:15 INFO - TEST-INFO | started process GECKO(10820)
Assignee | ||
Comment 94•6 years ago
|
||
Bas: Do you have any idea what's going on here, or know of anyone who could help? It's not really clear to me what the issue is, aside from some sort of IPC error.
Comment 95•6 years ago
|
||
Here are the failures, green on the backout:
https://treeherder.mozilla.org/#/jobs?repo=autoland&searchStr=windows%2C10%2Cx64%2Casan%2Cmochitests%2Ctest-windows10-64-asan%2Fopt-mochitest-browser-chrome-e10s-3%2Cm%28bc3%29&tochange=d023d7f7dd80b4c65ed85b75c3a2327391d4b535&fromchange=f0c2b4af4d6dd3d69455e184bbbd635a3de48e42&selectedJob=241499967
But, looking on other trees https://treeherder.mozilla.org/#/jobs?repo=mozilla-inbound&searchStr=windows%2C10%2Cx64%2Casan%2Cmochitests%2Ctest-windows10-64-asan%2Fopt-mochitest-browser-chrome-e10s-6%2Cm%28bc6%29&selectedJob=241408042 where failed, the retriggers failed too.
Assignee | ||
Comment 96•6 years ago
|
||
Strange, I re-pushed this to try and everything's green: https://treeherder.mozilla.org/#/jobs?repo=try&revision=4108d557cac4c2b42797305b275414b58dcec2ed
The previous logs looked like it was failing 100% of the time, so I'm surprised that it passes here. Am I missing something? Did some other patch resolve this?
Assignee | ||
Comment 97•6 years ago
|
||
(In reply to Cristina Coroiu [:ccoroiu] from comment #95)
Here are the failures, green on the backout:
https://treeherder.mozilla.org/#/jobs?repo=autoland&searchStr=windows%2C10%2Cx64%2Casan%2Cmochitests%2Ctest-windows10-64-asan%2Fopt-mochitest-browser-chrome-e10s-3%2Cm%28bc3%29&tochange=d023d7f7dd80b4c65ed85b75c3a2327391d4b535&fromchange=f0c2b4af4d6dd3d69455e184bbbd635a3de48e42&selectedJob=241499967
I've been having a hard time reproducing this, so I took a closer look at these logs. It seems that the backout commit has the same failures as in comment 93; however, they ended up in bc5 instead of bc3: https://treeherder.mozilla.org/#/jobs?repo=autoland&searchStr=windows%2C10%2Cx64%2Casan%2Cmochitests%2Ctest-windows10-64-asan%2Fopt-mochitest-browser-chrome-e10s&tochange=d023d7f7dd80b4c65ed85b75c3a2327391d4b535&fromchange=f0c2b4af4d6dd3d69455e184bbbd635a3de48e42&selectedJob=241517009
I'm not totally sure why these tests moved to a different batch (maybe just from the new tests in part 4 of my patch?), but if I'm reading the logs right, that test fails after my patch was backed out, as well as before (see commit 30b70a449280 in the link above, a few rows below my initial landing); the only difference is that my patch moved the failing tests to bc3 from bc5. Does that look right, or am I missing something?
![]() |
||
Updated•6 years ago
|
Comment 98•6 years ago
|
||
Comment 99•6 years ago
|
||
bugherder |
https://hg.mozilla.org/mozilla-central/rev/5c3bff8f45d6
https://hg.mozilla.org/mozilla-central/rev/a7fa3041bff0
https://hg.mozilla.org/mozilla-central/rev/100acc204e5e
https://hg.mozilla.org/mozilla-central/rev/9a0ce3016f03
Comment 100•6 years ago
|
||
67=wontfix because we don't need to uplift this to 67 Beta.
Updated•5 years ago
|
Updated•4 years ago
|
Updated•3 years ago
|
Description
•