We currently only block shutdown on flushes for windows that appear in the
BrowserWindowTracker.orderedWindows list, which may or may not include the most
recent window (this appears to depend on _how_ the window was closed). Including
windows for which we saw "domwindowclosed" means that we'll also wait on flushes
for the most recent window.
This also ensures that we're queuing a SessionStoreUpdate from TabListener on
STATE_START/STATE_STOP (as ContentSessionStore.jsm does), and fixes a bug where
we were trying to remove an observer with the `deferred.reject` callback,
instead of the actual observer.
Differential Revision: https://phabricator.services.mozilla.com/D124403
It contains a more recent version of GTK, fixing some Wayland issues
that are still present in the 20.08 version (notably degraded
performance due to missing opaque region API in GTK).
Further more it ships more recent Mesa, which should also have
a positive effect on some hardware.
Differential Revision: https://phabricator.services.mozilla.com/D124801
This also remove `FPSCounter`, `TimedMetric`, and these prefs:
- layers.acceleration.draw-fps.print-histogram
- layers.acceleration.draw-fps.write-to-file
Differential Revision: https://phabricator.services.mozilla.com/D125110
Since spatial node indices will become opaque handles in future,
remove the last part of code outside `spatial_tree` that relies
on the index. In this case, switch the hit-testing code to use
the spatial node indices as a hash key. This is unlikely to have
any noticeable performance impact since hit-tests are relatively
rare, and generally only access a small number of spatial nodes.
Differential Revision: https://phabricator.services.mozilla.com/D124706
Previously, the GPU transform palette always stored the local ->
world transform for each spatial node with O(1) access time.
This won't be feasible in future when spatial nodes are retained
and stored with opaque handles.
Although this was previously a small optimization, it's no longer
important. With picture caching and raster roots, querying the
local -> world transform should be relatively rare (and even rarer
once all surfaces establish raster roots).
We still retain the optimization that querying an identity transform
(where the from == to spatial node) avoids a hash lookup and always
resolves to the first transform in the palette, since this is quite
common.
Differential Revision: https://phabricator.services.mozilla.com/D124595
Depends on D122577
When using the BiDiSession class we need the event loop to live at
least as long as a specific connection, but not necessarily as long as
the BiDISession object itself. Therefore we move the loop parameter
into the start() method, to associate a loop with a specific connection.
In addition, in the tests we make the event loop a global so that it
lives as long as a session; the fixture is updated to reuse the
existing loop where possible. This has the tradeoff that we're more
likely to share a loop between tests, so there is some additional
hidden shared state.
Differential Revision: https://phabricator.services.mozilla.com/D124834
Rather than deleting the expected target directory of each package
that's being vendored, clear the whole `third_party/python` directory
and re-populate it from scratch.
As part of this, there's an "exclusion" list for packages that can't
be vendored from PyPI.
This has some benefits:
* It'll be harder to forget scraps of files and directories and leave
them in `third_party/python`.
* The exclusion list makes it more clear which packages are managed
manually, and the friction it adds to the workflow will guide
developers to use "requirements.in" instead.
The `test_up_to_date_vendor` test will verify that the vendor directory
is always clean.
Differential Revision: https://phabricator.services.mozilla.com/D123124
Note that, as part of adding this packages to the automated vendoring
system, some dependencies were automatically added - most notably,
dependencies of `taskcluster` that become visible with Python 3.6+.
Also, adds `**/.git` to the exclusions because:
* `.git` is part of our `.hgignore`, but
* `.git` is part of the `aiohttp` `tar.gz` file.
Since the file isn't needed for `pip install`-ing `aiohttp`,
and since we want `./mach vendor python` to be a no-op when there's
no requirement changes, we exclude it.
Differential Revision: https://phabricator.services.mozilla.com/D123122
Note that this patch makes modifications to the vendored
`virtualenv` package by removing the modern `setuptools`
packages, replacing them with `51.2.0`. This is because
`51.3.0` somehow causes xpcshell failures with the following
Python bug: https://bugs.python.org/issue37380
This upgrades:
* `pip` 20.3.1 => 21.2.3
* `setuptools` 51.0.0 => 51.2.0
* `wheel` 0.36.1 => 0.37.0
Differential Revision: https://phabricator.services.mozilla.com/D123120
Add pystache to vendor `requirements.in` so that it's vendored according
to `./mach vendor python` "ignore" rules.
This ensures that sufficient files are vendored such that installing the
package from it's `setup.py` file is possible.
Differential Revision: https://phabricator.services.mozilla.com/D122898
The existing version of `pyasn1-modules` (`0.1.5`) is incompatible with
our version of `pyasn1` (`0.4.8`).
By bumping `pyasn1-modules` to `0.2.8`, we now meet its compatibility
requirements.
Differential Revision: https://phabricator.services.mozilla.com/D122897
This will allow starting Firefox in the background, and on Windows will allow
closing the last browser window without killing the main process. There is no
plan for actually using this by default in Firefox proper, but it's needed for
some explorations.
There's more to this work that we'll need - this is just the first step. For
instance, we'll need a real way to actually kill firefox on Windows other than
through the task manager (we'll be putting something in the system tray to
allow this.)
The patch wasn't particularly large, so I didn't split out the rename of
MOZ_APP_SILENT_START to MOZ_APP_SILENT_RESTART - let me know if you'd like me
to do that though and I can.
Differential Revision: https://phabricator.services.mozilla.com/D124249
Here's the task diff for mozilla-central:
+test-linux1804-64-ccov-qr/opt-mochitest-browser-chrome-swr-fis-e10s
-test-linux1804-64-ccov-qr/opt-mochitest-devtools-chrome-e10s
+test-linux1804-64-ccov-qr/opt-mochitest-devtools-chrome-fis-e10s
-test-linux1804-64-ccov-qr/opt-mochitest-plain-e10s
+test-linux1804-64-ccov-qr/opt-mochitest-plain-fis-e10s
+test-linux1804-64-ccov-qr/opt-mochitest-plain-fis-xorig-e10s
-test-linux1804-64-ccov-qr/opt-web-platform-tests-e10s
+test-linux1804-64-ccov-qr/opt-web-platform-tests-fis-e10s
Note we weren't previously running any ccov browser-chrome tasks on Linux so
that's why no task was removed on that configuration.
Differential Revision: https://phabricator.services.mozilla.com/D124400
This is an `#ifdef DEBUG` only patch and has no space or time effect on
non-debug builds. It makes it easier to figure out which part of the SM suite
of code generators, stub generators, etc, created each instruction shown in
the `IONFLAGS=codegen` output.
In the base class of all assemblers, `js::jit::AssemblerShared`, there is a
new field `Vector<const char*> creators_`. This is a small stack of arbitrary
strings. Every time a string is pushed onto or popped off the stack, the
stack is printed in the `IONFLAGS=codegen` output. Crucially, it is
debug-asserted that the stack is non-empty at emission of (almost) every
instruction. Hence each instruction in the log output is bracketed within at
least one level of text-label. By suitable choice of the labels, it is
possible to find which part of SM created an instruction with little
difficulty.
Pushing and popping the stack directly is strongly discouraged. Instead, an
RAII `class AutoCreatedBy` is provided to manage the stack. Adding
C++-scope-level annotations is then simply a matter of adding lines of the
form `AutoCreatedBy acb(masm, "my tag text");`.
The stacks resulting from the current annotation set have at most three
entries, for example:
BaselineInterpreterGenerator::generate/interpreter loop/op=Uint24
The patch looks large but is really very simple. There are the following
logical components, unfortunately interleaved in the patch:
* A large set of `AutoCreatedBy` annotations. This gives complete coverage
for code generation on x86, x64, arm, arm64 and mips64, as far as I can
tell. This is the vast majority of the patch.
* In `class AssemblerShared` (Assembler-shared.h), new field `creators_` and
methods `{push,pop,has}Creator` to operate on it.
* Also in Assembler-shared.h, `class MOZ_RAII AutoCreatedBy`, to manage the
stack.
* The assertions to ensure that the stack is not empty at emission of any
instruction.
- for arm64, this is done in `MozBaseAssembler::Emit` (two functions)
- for arm, this is done in `Assembler::writeInst`
- for mips64, this is done in `AssemblerMIPSShared::writeInst`
- for x86 and x64 I failed to find any single place to put such an
assertion, that also has convenient access to the required
`AssemblerShared` base class. Instead these have a best-effort solution:
assertions have been added to around 20 methods in `AssemblerX86Shared`.
These cover the most common instructions (loads, stores, reg-reg moves,
pushes, pops, returns, immediate data, alignment directives). Although
this is not complete coverage, in practice it's good enough because it's
almost impossible to create any piece of code without using at least one
insn in that group.
Almost all of the implementation is guarded `#ifdef DEBUG`. The one exception
is constructor `AutoCreatedBy::AutoCreatedBy`. I did not want to uglify
dozens of places in SM with guards at all its use points. So instead a dummy
release-build version has been provided:
inline AutoCreatedBy(AssemblerShared& ash, const char* who) {}
on the basis that an optimising compiler will inline it away completely.
`AssemblerShared::pushCreator` ignores OOM conditions when pushing on the
stack. This is assumed to be OK since this is a debug-build-only activity.
Differential Revision: https://phabricator.services.mozilla.com/D123854
This required migrating several strings to Fluent, and the bulk of this patch
is those migrations. The rest of the items matched up with an entry in the app
menu, so those items were switched over to use the app menu strings, and one
had to be copied in order to avoid adding a tooltip to the app menu item.
Differential Revision: https://phabricator.services.mozilla.com/D124270
It was downgraded to investigate some windows crashes which ended up
being a crossbeam issue. So update it again to get fixes to some
crossbeam races.
Differential Revision: https://phabricator.services.mozilla.com/D125051
If the passed-in async function never resolves the transaction could stay alive forever, this timeouts after
TRANSACTIONS_QUEUE_TIMEOUT_MS (5 minutes as of now) and roll backs the transaction.
A telemetry keyed scalar is added to track callers causing these timeouts and optimize them in the future.
Differential Revision: https://phabricator.services.mozilla.com/D124187
Add a pref to manage Sqlite.jsm logging, default to reporting Errors.
Change some of the logging to more coherently report warnings, errors and debug info.
Reuse the same logger for all the objects, just change the prefix.
Depends on D124184
Differential Revision: https://phabricator.services.mozilla.com/D124916
initiatedTransaction seems less confusing about the fact Sqlite.jsm initiated this
transaction, rather than something else (that may happen with wrapped connections).
Differential Revision: https://phabricator.services.mozilla.com/D124184
This commit modifies test_interfaces.js to also test the exposed interfaces
in the WebAssembly namespace. We have conditional features that we'd like
to have confidence that we're not accidentally exposing to web content.
Currently there are:
* WebAssembly exceptions, enabled only in nightly with a default-off pref
* mozIntGemm accelerator function, available only in system or addon principals
Depends on D120731
Differential Revision: https://phabricator.services.mozilla.com/D120732