Closed
Bug 1156957
Opened 10 years ago
Closed 9 years ago
Fix gamepad mochitests to work on e10s
Categories
(Core :: DOM: Device Interfaces, defect)
Core
DOM: Device Interfaces
Tracking
()
RESOLVED
FIXED
mozilla48
People
(Reporter: qdot, Assigned: qdot)
References
(Blocks 1 open bug)
Details
Attachments
(1 file, 3 obsolete files)
21.28 KB,
patch
|
ted
:
review+
|
Details | Diff | Splinter Review |
Gamepad mochitests need a forwarder for the GamepadServiceTest object, so e10s can be fully tested. See https://bugzilla.mozilla.org/show_bug.cgi?id=852944#c33
Updated•10 years ago
|
Blocks: e10s-tests
Updated•10 years ago
|
tracking-e10s:
--- → +
Comment 1•9 years ago
|
||
Kyle, is this something you'd be able to look at in the next month or so? Thanks.
Blocks: 1218958
Flags: needinfo?(kyle)
Assignee | ||
Comment 2•9 years ago
|
||
WIP of e10s compatible gamepad tests. Having some problems with it trying to send sync messages?
Assignee: nobody → kyle
Flags: needinfo?(kyle)
Assignee | ||
Comment 3•9 years ago
|
||
(In reply to Andrew McCreight [:mccr8] from comment #1)
> Kyle, is this something you'd be able to look at in the next month or so?
> Thanks.
Should hopefully have it done this week. Mostly there, just trying to figure out why nsISyncMessageManager::SendSyncMessage is getting called in some cases and also why that's failing.
Assignee | ||
Comment 4•9 years ago
|
||
Problem with sync messages was that proxy script doesn't work in non-e10s cases, so we only use proxy for e10s, directly use GamepadServiceTest otherwise.
Attachment #8682901 -
Attachment is obsolete: true
Attachment #8683257 -
Flags: review?(ted)
Assignee | ||
Comment 5•9 years ago
|
||
Ted, can you review this soon? Wanted this in for e10s completeness sake.
Flags: needinfo?(ted)
Comment 6•9 years ago
|
||
Ted, can you review this or should Kyle find somebody else? It has been almost 3 months.
Assignee | ||
Comment 7•9 years ago
|
||
Comment on attachment 8683257 [details] [diff] [review]
Patch 1 (v2) - Make gamepad mochitests work on e10s
:lenzak800, would you be ok reviewing this? You've been around the gamepad code enough now while working on PBackground that I trust your judgement.
If you're not familiar with e10s mochitest issues, feel free to just cancel the review.
Attachment #8683257 -
Flags: review?(cleu)
Comment 8•9 years ago
|
||
Comment on attachment 8683257 [details] [diff] [review]
Patch 1 (v2) - Make gamepad mochitests work on e10s
Review of attachment 8683257 [details] [diff] [review]:
-----------------------------------------------------------------
Sorry, I am not familiar with mochitest so it's not appropriate for me to review.
Attachment #8683257 -
Flags: review?(cleu)
Assignee | ||
Comment 9•9 years ago
|
||
Comment on attachment 8683257 [details] [diff] [review]
Patch 1 (v2) - Make gamepad mochitests work on e10s
:mrbkap, could you possibly take a look at this? :mccr8 said you were looking at converting DOM tests to e10s already.
Attachment #8683257 -
Flags: review?(mrbkap)
Comment 10•9 years ago
|
||
Comment on attachment 8683257 [details] [diff] [review]
Patch 1 (v2) - Make gamepad mochitests work on e10s
Review of attachment 8683257 [details] [diff] [review]:
-----------------------------------------------------------------
::: dom/tests/mochitest/gamepad/gamepad_service_test_chrome_script.js
@@ +18,5 @@
> +
> +addMessageListener('new-button-event', function(message) {
> + GamepadService.newButtonEvent(message.i,
> + message.b,
> + message.s);
Can you spell out the full properties like you do in new-button-value-event below?
::: dom/tests/mochitest/gamepad/mock_gamepad.js
@@ +4,5 @@
> +// Determine whether this process is a parent or child process.
> +let appInfo = SpecialPowers.Cc["@mozilla.org/xre/app-info;1"];
> +let isParentProcess =
> + !appInfo || appInfo.getService(SpecialPowers.Ci.nsIXULRuntime)
> + .processType == SpecialPowers.Ci.nsIXULRuntime.PROCESS_TYPE_DEFAULT;
Can you stick some parens around the comparison here? It's a little hard to read the conditional.
@@ +19,5 @@
> + let url = SimpleTest.getTestFileURL("gamepad_service_test_chrome_script.js");
> + let script = SpecialPowers.loadChromeScript(url);
> +
> + GamepadService = {
> + addGamepad: function (name, mapping, buttons, axes) {
It'd be nice if we had some less-verbose way of doing this, but this is fine.
::: dom/tests/mochitest/gamepad/test_gamepad.html
@@ +13,5 @@
> SimpleTest.waitForExplicitFinish();
> +// Due to gamepad being a polling API instead of event driven, test ordering
> +// ends up being a little weird in order to deal with e10s. Calls to
> +// GamepadService are async across processes, so we'll need to make sure
> +// we account for timing before checking values.
Since we do in fact have GamepadButtonEvents in Gecko we could ostensibly rewrite this test to use them. Obviously you don't have to do that now. We even have add_task in Mochitest nowadays, which could simplify the test flow, like:
https://dxr.mozilla.org/mozilla-central/source/modules/libjar/test/mochitest/test_bug1173171.html#47
@@ +18,3 @@
> window.addEventListener("gamepadconnected", connecthandler);
> // Add a gamepad
> var index = GamepadService.addGamepad("test gamepad", // id
Per discussion on IRC, I don't see how this can work since the e10s addGamepad method doesn't return a value. That needs to get sorted out.
Attachment #8683257 -
Flags: review?(ted)
Comment 11•9 years ago
|
||
Sorry, I have been unforgivably bad about reviews the past few months. I am in the process of fixing that.
Flags: needinfo?(ted)
Assignee | ||
Comment 12•9 years ago
|
||
(In reply to Ted Mielczarek [:ted.mielczarek] from comment #10)
> @@ +18,3 @@
> > window.addEventListener("gamepadconnected", connecthandler);
> > // Add a gamepad
> > var index = GamepadService.addGamepad("test gamepad", // id
>
> Per discussion on IRC, I don't see how this can work since the e10s
> addGamepad method doesn't return a value. That needs to get sorted out.
Ok, yeah, as it is in the patch, test_navigator_gamepads.html times out due to the internal_index values being wrong. Not sure how this worked in the first place. Will get it sorted and get a new version out soon.
Assignee | ||
Comment 13•9 years ago
|
||
Comment on attachment 8683257 [details] [diff] [review]
Patch 1 (v2) - Make gamepad mochitests work on e10s
Cancelling all reviews, patch brokt.
Attachment #8683257 -
Flags: review?(mrbkap)
Assignee | ||
Comment 14•9 years ago
|
||
Good news is, I got index relaying working between processes by changing addGamepad to return a promise, and running sendAsyncMessage between content/parent in the e10s case.
Bad news is that frame sync/hidden frame tests fail in the e10s case now, possibly because that feature is actually broken in e10s (getting wrong event counts in frames). Investigating further, but if that takes longer than a day or so, I may just put what I have in for review so we can at least mark 4 of the 6 test files as working on e10s
Assignee | ||
Comment 15•9 years ago
|
||
Ok. We now relay internal gamepad indexes across processes via sendAsyncMessage and promise resolving. Not very pretty, but it does the job. Had to fix some tests to make sure everything stays in order, but everything passes both non-e10s and e10s tests now (at least on linux, still waiting for the rest of my try to come back).
https://treeherder.mozilla.org/#/jobs?repo=try&revision=2e4a230b5dcd&selectedJob=17203850
Attachment #8683257 -
Attachment is obsolete: true
Attachment #8723378 -
Flags: review?(ted)
Comment 16•9 years ago
|
||
Comment on attachment 8723378 [details] [diff] [review]
Patch 1 (v3) - Make gamepad mochitests work on e10s
Review of attachment 8723378 [details] [diff] [review]:
-----------------------------------------------------------------
The patch to test_gamepad_hidden_frame looks slightly wrong. Other than that this looks good. Thanks for fixing this up!
::: dom/plugins/test/mochitest/file_bug1245545.js
@@ +16,4 @@
> return null;
> }
>
> +addMessageListener('check-plugin-unload', function(index) {
Is this an unrelated change?
::: dom/tests/mochitest/gamepad/mock_gamepad.js
@@ +54,5 @@
> + }
> + };
> +}
> +
> +var addGamepadDelayed = function(name, mapping, buttons, axes) {
I think just calling this `addGamepad` would be fine too.
::: dom/tests/mochitest/gamepad/test_check_timestamp.html
@@ +16,5 @@
> +var promise = addGamepadDelayed("test gamepad 1", // id
> + SpecialPowers.Ci.nsIGamepadServiceTest.NO_MAPPING,
> + 4, // buttons
> + 2);// axes
> +promise.then(function(i) {
Since you're not using the promise for anything else, just chaining the call into the .then is slightly less verbose.
::: dom/tests/mochitest/gamepad/test_gamepad_hidden_frame.html
@@ +32,4 @@
> frames_loaded++;
> + if (frames_loaded == 2) {
> + var promise = addGamepadDelayed("test gamepad", // id
> + SpecialPowers.Ci.nsIGamepadServiceTest.STANDARD_MAPPING,
It looks like you neglected to remove the addGamepad from the top of this test?
Attachment #8723378 -
Flags: review?(ted)
Assignee | ||
Comment 17•9 years ago
|
||
Fixed review comments
Attachment #8723378 -
Attachment is obsolete: true
Attachment #8726434 -
Flags: review?(ted)
Updated•9 years ago
|
Attachment #8726434 -
Flags: review?(ted) → review+
Comment 18•9 years ago
|
||
This made something leak an nsTArray_base: https://treeherder.mozilla.org/logviewer.html#?job_id=22990281&repo=mozilla-inbound
Backed out in https://hg.mozilla.org/integration/mozilla-inbound/rev/5b2e715559c9
Flags: needinfo?(kyle)
Comment 20•9 years ago
|
||
Assignee | ||
Comment 21•9 years ago
|
||
Took this on another run through try and it seems happy with the timer disabling patch in front of it.
https://treeherder.mozilla.org/#/jobs?repo=try&revision=81d0ea5ca3ac
Flags: needinfo?(kyle)
Comment 22•9 years ago
|
||
bugherder |
Status: NEW → RESOLVED
Closed: 9 years ago
status-firefox48:
--- → fixed
Resolution: --- → FIXED
Target Milestone: --- → mozilla48
You need to log in
before you can comment on or make changes to this bug.
Description
•