Claude wrote the first draft of this quite a while ago. I went through and eyeballed that it looked mostly like the existing x86 implementation, and there are reasonable justifications for the differences. In particular, the difference between _mm_movemask_epi8 (which produces a 16-bit result with 1 bit per SIMD lane) and NeonMovemask (which produces a 64 bit result with 4 bits per SIMD lane) explains why we have (eg) `orMask & 0xf` vs `orMask & 0xffff` in Check4x4Chars. Note also that x86 support for sizeof(TValue) == 4 and sizeof(TValue) == 8 is only available in SIMD_avx2.cpp, whereas arm64 supports all sizes unconditionally.
I didn't spend much time reviewing the correctness of the underlying algorithms; I did that a lot for the initial landing, and we haven't had any problems with the x86 version, so I think we should be fine as long as the translation is right.
I also had a fresh instance of Claude review the patch. The main interesting point from its review was that our memchr implementation is competing against hand-tuned libc implementations. On x86 our primary competition is the Windows C runtime, which is (IIUC) less aggressively optimized, so Alex's benchmarking in bug 1776013 eventually convinced us that we should use our own memchr. That might not be true here. CI results were inconclusive, leaning if anything towards the default memchr being fastest. I'm conservatively disabling SIMD::memchr for now.
Codex's review didn't find anything else.
Differential Revision: https://phabricator.services.mozilla.com/D325185
Manually duplicating every task definition produced by a kind lets the copy
drift as the source changes. Test variants already avoid this for a single
test task, but a difference compiled into artifacts needs a separate build of
every task it affects.
Differential Revision: https://phabricator.services.mozilla.com/D320191
The android-gradle-build python tests run artifact builds, but
`mach artifact install` only searches the `.shippable` index for opt
builds. For each of the 50 candidate pushheads it looks up
`gecko.v2.autoland.shippable.revision.<rev>.mobile.android-<arch>-opt`.
Shippable Android builds aren't scheduled by default on autoland, so when
none of the last 50 autoland pushes ran a shippable build, the search
comes up empty, fails with "no built artifacts found", and every
artifact-build test in the suite fails at once. It passes only when one
of those 50 pushes happens to have a shippable Android build, which is
why it shows up as an intermittent.
Add a MOZ_ARTIFACT_ALLOW_NON_SHIPPABLE environment variable that makes
the index lookup fall back to the regular per-push opt build when no
shippable build is found, and set it for the android-gradle-build task.
The shippable index is still tried first, so branches that only publish
shippable builds (central, beta, release, esr) keep resolving to those.
Differential Revision: https://phabricator.services.mozilla.com/D324866
Bringing the engine up takes as long as loading the model's weights, so stop()
can land while the session is still initializing. The engine's abandoned init
then reached the page as "network", instead of the nomatch and end that
stopping a session owes it.
Differential Revision: https://phabricator.services.mozilla.com/D324937
Adds TestMFMediaSourceProtection, which builds an MFMediaSource the way
MFMediaEngineParent does and drives IMFTrustedInput against a mock CDM.
The failure this covers needs SL3000 hardware DRM and a licence server, so it
cannot be reached from a mochitest, but we can test it on gtest.
Differential Revision: https://phabricator.services.mozilla.com/D325211
The metadata log reported only the display size, and the media source summary
reported neither size, so both now carry the image and display size.
Differential Revision: https://phabricator.services.mozilla.com/D325210
When activation failed with `MF_E_TOPO_UNSUPPORTED` or
`MF_E_INCOMPATIBLE_SAMPLE_PROTECTION` we re-drove the protected pipeline
through the hardware-context-reset path, which closes every session with
reason `hardware-context-reset`. Per the EME specification that invites the
application to create new sessions and retry, so a conformant player retries
indefinitely. Netflix reported this as repeated `F7717-1273 (unexpected
hardware-context-reset)`.
Neither error is documented as transient. Microsoft publishes no guidance for
either code, and Chromium, which drives the same Media Engine and PlayReady
path, treats both as terminal and reserves hardware-context-reset for
`DRM_E_TEE_INVALID_HWDRM_STATE` alone. The retry could not have helped in any
case, because `ExternalEngineStateMachine::SetCDMProxy` does not re-send the
CDM proxy to the recreated engine, so the new engine never sets its media
source and never builds a topology.
The mechanism is left in place behind a pref so this can be flipped back on a
release branch if disabling it regresses something. Removing it belongs in a
follow-up.
Differential Revision: https://phabricator.services.mozilla.com/D325209
Bug 2022030 Part 5 (D287632) made `IsEncrypted()` return false on the clear
lead segment to reflect the real encryption status. That function also tells
Media Foundation whether the stream needs the protected media path, which a
clear lead still does because the encrypted part follows in the same stream.
The video descriptor was therefore marked `MF_SD_PROTECTED`, but the
`IMFInputTrustAuthority` Media Foundation asked for while resolving the
topology was refused with `MF_E_NOT_PROTECTED`. It cannot resolve a protected
branch without one, so the topology failed with `MF_E_TOPO_UNSUPPORTED`.
Reverting this makes clear lead PlayReady streams play on Netflix again.
Differential Revision: https://phabricator.services.mozilla.com/D325208
* Add asset property for sync error map and consolidate the getMessageCardForState logic
* Remove height and width from new svgs so they scale
Differential Revision: https://phabricator.services.mozilla.com/D321595
YAML reads a bare `no` as false, so the multilingual model's supported_locales
declared "False" instead of "no": a key the model's prompt dictionary does not
have, offered to language negotiation as if it were a tag. Requesting it
negotiated fine and then failed in parakeet_capi_stream_begin_lang. This
was failing to set an explicit language, and falling-back to
autodetection, which wasn't intended.
gen_speech_models.py now rejects a non-string locale rather than stringifying
whatever YAML handed it.
Differential Revision: https://phabricator.services.mozilla.com/D325362
The find bar's close button tooltip is only "Close find bar", so nothing in
the UI says that Escape closes the bar.
Escape is handled by a capturing keypress listener on the find bar element
itself, so it only closes the bar while focus is inside it. Following bug
1199929, the shortcut is advertised only while that holds: the tooltip
swaps between two Fluent ids as focus enters and leaves the bar.
The key name is hardcoded rather than looked up.
ShortcutUtils.getKeyString("VK_ESCAPE") would read it from
keys.properties, but that table has no per-platform variant and would
give capital "Esc" on macOS, where the existing Escape strings use
lowercase, and .properties is a legacy format. { $shortcut } does not
apply either -- there is no <key> element here, and this Escape
handling is not remappable.
This work was done with AI assistance; I have reviewed and can explain
every line.
Differential Revision: https://phabricator.services.mozilla.com/D320643
Unquoted field=value arguments break when the value contains shell glob
characters, e.g. a see_also URL with a query string.
Differential Revision: https://phabricator.services.mozilla.com/D325257
Mostly mechanical: `markdownlint-cli2 --fix` over the directories the md
linter covers (blank lines around fences and lists, list indentation, bare
URLs wrapped in angle brackets, stray spaces inside code spans).
A few spots needed to be fixed by hand because they were malformed in the
first place: reference links left dangling by the RST conversion in
ipc/docs/ipdl.md and devtools/docs/user/debugger-api/index.md, an `{image}`
directive whose options had escaped the fence in
docs/contributing/debugging/capturing_minidump.md, and text where a literal
asterisk or underscore was being parsed as emphasis.
Differential Revision: https://phabricator.services.mozilla.com/D315001
keyItem was default-constructed and only had data and len assigned, leaving
type indeterminate when it was handed to PK11_ImportSymKey. Use aggregate
initialization with siBuffer, matching the `SECItem empty = {siBuffer, nullptr,
0}` on the following line.
Differential Revision: https://phabricator.services.mozilla.com/D325327
* Add migration and enable sidebar.revamp in beta and release
* Remove show sidebar checkbox from the tab browsing section in about:preferences
* Fix sidebar bug where switcher label isn't showing if a tool isn't already saved in preferences
Differential Revision: https://phabricator.services.mozilla.com/D324600
The UI test was sometimes failing because it failed to verify that the normal tabs list is displayed.
To fix this, I've changed for waiting for the empty tabs list to not exist to waiting for the normal tabs list to exists.
I've also removed some redundant actions from the tests.
❗ This change also fixes **verifyTabsTrayGridViewTest** UI test
Both tests successfully passed 50x on Firebase ✅
Differential Revision: https://phabricator.services.mozilla.com/D325356
This reverts commit 62a4a5d638.
Revert "Bug 2062329 - Measure inference cost and init failures in the HWInference process. r=media-playback-reviewers,alwu"
This reverts commit 7783c6fb9e.
Revert "Bug 2062329 - Measure speech recognition latency in the content process. r=media-playback-reviewers,alwu"
This reverts commit 189550601a.
Revert "Bug 2062329 - Record speech recognition usage, outcomes and errors with Glean. r=media-playback-reviewers,alwu,TravisLong"
This reverts commit 39db08efe3.
Revert "Bug 2062329 - Add use counters for the SpeechRecognition API. r=dom-core-reviewers,webidl,smaug"
This reverts commit 84ede0b820.
The aarch64 task was already a cross build on the Intel b-osx-1015 workers, so neither build executes what it
compiles. build.py's --osx_arch only acts on a macOS host, so the Darwin cmake variables are passed directly,
the way build-llvm-common.sh does for compiler-rt, with linux64-clang-toolchain replacing the Mach-O
macosx64-clang and the mac cmake/ninja fetches. Deployment targets are set explicitly to Firefox's (10.15
x86_64, 11.0 arm64).
-fuse-ld=lld goes in the compile flags because cmake's try_compile checks, including the one behind
--enable_lto, don't inherit CMAKE_*_LINKER_FLAGS and would silently disable LTO. CMAKE_ASM_COMPILER_TARGET is
needed or the .S files are assembled for the host.
Differential Revision: https://phabricator.services.mozilla.com/D325157
macosx64-xz, macosx64-aarch64-xz and macosx64-aarch64-openssl never execute what they compile and already
fetch macosx64-sdk-toolchain, so they only need linux64-clang-toolchain instead of the Mach-O macosx64-clang,
plus --target/--host.
libtool picks its linker with its own PATH search rather than honoring -fuse-ld, so xz also gets LD=ld64.lld,
and -Wno-unused-command-line-argument keeps its -Werror configure probe from rejecting -fuse-ld. Both scripts
pin AR/RANLIB to llvm-ar/llvm-ranlib so the static archives get a symbol index.
pack.sh is now located via $GECKO_PATH: $(dirname $0) breaks on the Linux worker, which invokes scripts with a
path relative to the initial directory, once build-xz.sh has cd'd elsewhere.
Differential Revision: https://phabricator.services.mozilla.com/D325156
The win32 and aarch64 WindowsAppSDK repacks only unzip and re-tar an MSIX, exactly like the x86_64 one that
already runs on Linux; drop their Windows worker override.
Differential Revision: https://phabricator.services.mozilla.com/D325155
The macOS Android toolchains (JDK, SDK, arm64 AVD and arm64 system images) only download and repack upstream
archives, so they don't need a macOS worker. The JDK is downloaded for macOS/arm64 via new --os-name/--os-arch
overrides for android.py --jdk-only. sdkmanager selects packages by matching the host OS and CPU architecture,
so downloading the macOS/arm64 packages from this Linux/x86_64 host needs both REPO_OS_OVERRIDE=macosx and
-Dos.arch=aarch64. The AVD prewarm was already a no-op because arm64.json sets emulator_prewarm to false, and
system images are host-independent, so neither of those two repacks needs either override.
They were also in the TL Treeherder group despite targeting macOS arm64; move them to TMA64 to match the other
cross-built toolchains.
Differential Revision: https://phabricator.services.mozilla.com/D325154
This patch integrates the new hardware doc generation into perfdocs. It adds the ability to list all of our hardware info in the performance-infrstructure docs, and also provides links from the test documentation to it.
With this change, any new tasks with undocumented tools will trigger failures in perfdocs. Those pools will need to either be listed under an existing hardware type, or will need a new hardware section added for it.
Differential Revision: https://phabricator.services.mozilla.com/D323368
This patch adds a new class that will be used to gather, and build the documentation for hardware information across all performance tests. The existing content here is based on the platforms wiki found here: https://wiki.mozilla.org/Performance/Platforms
A new YAML file is added in the main perfdocs directory to track all the hardware along with their mapping to worker pools. The platform labels are gathered dynamically and added to these new docs so they don't need to be included in the YAML either. The new class is a singleton to make it simpler to use in multiple different places.
Differential Revision: https://phabricator.services.mozilla.com/D323367
The same-folder branch dereferenced `node` for `mBookmarkIndex` and passed it
to ReindexRange before reaching the null check that already guarded the rest of
the branch. `node` comes from FindChildById and is only known to be non-null
when it was returned, so move the existing assertion and check above the first
dereference rather than leaving them in the middle of the branch.
Differential Revision: https://phabricator.services.mozilla.com/D317484