DestroyMediaTrack() is called only on Unlink or destruction of the AudioDestinationNode.
If there are no references to the AudioDestinationNode, then the graph's last stream
will be destroyed and the graph will shut down itself.
Differential Revision: https://phabricator.services.mozilla.com/D74812
To improve performance for cross-process COM, we disable COM garbage collection in content processes for calls from our parent process.
However, this means we don't receive Release calls from in-process a11y clients.
For an Accessible, we get around this by explicitly disconnecting remote clients when the Accessible shuts down.
This doesn't cover COM objects which aren't interfaces of an Accessible; i.e. where the object has a different IUnknown to the Accessible.
This patch adds AccessibleWrap::AssociateCOMObjectForDisconnection to allow these objects to be tracked.
Tracked objects are then disconnected when the Accessible shuts down.
Differential Revision: https://phabricator.services.mozilla.com/D74999
It looks for next leaf content or next block element for finding "end reason
node" of `WSRunScanner`. Especially for clearing the latter case, this
patch renames it to `GetNextLeafContentOrNextBlockElement()`.
Differential Revision: https://phabricator.services.mozilla.com/D74804
The tracker base class currently does two things: bump the score in
response to observer notifications, and store a list of changed IDs.
The bookmarks, form autofill, and now bridged trackers need to hack
around this to opt out of persistence, since they handle change
tracking in the storage layer.
This commit keeps the score logic in `Tracker`, but moves all the
persistence code into an intermediate `LegacyTracker` class, and
changes all engines that need persistence to inherit from it.
`ignoreAll` is more interesting. We want new-style stores to emit
observer notifications with change sources, so that the tracker knows
to ignore changes made by Sync. Ignoring all observer notifications
during a sync is a blunter version of this. But, not every new store
supports change sources, so we reimplement `ignoreAll` manually for
ones that don't.
Differential Revision: https://phabricator.services.mozilla.com/D74374
Two VideoBridgeParents (one within the GPU process, one from RDD) are already supported. Then the comment is obsoleted.
Differential Revision: https://phabricator.services.mozilla.com/D74792
This wraps the current thread such that a call to Dispatch will be done as direct task dispatch instead so that the task will be run in the current event loop.
This allows for have similar (but not identical to) the microtask semantics of JS promises
Differential Revision: https://phabricator.services.mozilla.com/D69995
Fix intermittent issues due to races.
We now run the MozPromise generated by the IPDL bindings to run their callbacks via a direct task dispatch.
This avoids a full trip to the back of the event queue for each additional asynchronous step when using MozPromise.
A consequence to this change is that each IPDL actor's thread must have an AbstractThread allocated if IPDL MozPromises are used.
It prevents unexpected racy behaviours when combining MozPromise with the other Resolve/Reject IPDL async declaration which was have lead to processing the events out of order.
Differential Revision: https://phabricator.services.mozilla.com/D71593
This is a step towards bug 1119864. However, at this stage we only need the cache thread to support direct task dispatch so that we can have IPDL MozPromise acting in a similar fashion to JS promise.
Differential Revision: https://phabricator.services.mozilla.com/D74637
If set, the callback will be dispatched via a direct task.
Direct tasks are run via the current thread's tail dispatcher.
This mechanism is only available if both the caller and the target are on the same thread and an AbstractThread is available
Differential Revision: https://phabricator.services.mozilla.com/D71592
Renumbers the SIMD opcodes in accordance with the latest proposal,
dropping the legacy shuffle opcode. Fixes a few binary tests.
Differential Revision: https://phabricator.services.mozilla.com/D74216
There are two bulk-memory-operation tests that were marked as failing as that
spec hasn't been updated for the reference-types changes yet. I will re-enable
them as soon as bulk-memory-operations is updated, we should still have test
coverage in reference-types for the time being.
Differential Revision: https://phabricator.services.mozilla.com/D74695
This commit updates the jit-tests for the change to ref.null/is_null, removal
of nullref, and removal of `funcref <: anyref`.
Most changes are syntactic to include the type on `ref.null/is_null`. There are
several tests of subtyping that had to be inverted to test that `funcref </: anyref`.
Differential Revision: https://phabricator.services.mozilla.com/D73966
This commit renames all user-exposed references of anyref to externref. The
codebase continues to use 'anyref' until there is suitable chance to make the
switch over.
Differential Revision: https://phabricator.services.mozilla.com/D73965
This commit changes the subtyping algorithm so that:
```
T <: T
optref T <: anyref
optref T <: optref U (if U prefix T)
```
Notably, we're not allowing `funcref <: anyref` conditionally on GC types being
enabled as that complicates testing quite a bit. V8 is also not intending to
have `funcref <: anyref` in their MVA so this would align us with them.
Differential Revision: https://phabricator.services.mozilla.com/D73961
The ref.null and ref.is_null instructions now take a reftype as a parameter.
This is encoded immediately after the instruction in the usual way for value
types. The only real change is to validation here.
Differential Revision: https://phabricator.services.mozilla.com/D73959
This commit does not stand entirely alone, the nullref type is still left
dangling in the ref.null validation and in the subtyping code. The next
two commits will fix that.
Differential Revision: https://phabricator.services.mozilla.com/D73957