Deploy May 7, 2026#6007
Merged
canova merged 44 commits intoproductionfrom May 7, 2026
Merged
Conversation
Co-authored-by: Valery Ledovskoy <valery@ledovskoy.com> (ru)
Co-authored-by: Ian Neal <iann_bugzilla@blueyonder.co.uk> (en-GB)
Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com>
Co-authored-by: Mark Heijl <markh@babelzilla.org> (nl) Co-authored-by: Fjoerfoks <fryskefirefox@gmail.com> (fy-NL)
Co-authored-by: Melo46 <melo@carmu.com> (ia)
This replacement has the following advantages: It's compatible with React 18, and it supports making "max-height" the controlled property, which is useful for our timeline splitter. In the past, we needed to compute the height of the timeline contents, and then make it so you couldn't move the splitter down more than the full timeline height, because we didn't want there to be a gap above the splitter, or even initialize the splitter at a position that creates such a gap. By making the splitter control max-height instead, even if the splitter is dragged low enough to say max-height:1000px, the splitter won't actually move that low because the timeline won't grow beyond its full size (because there's no longer a height property forcing it to grow).
In the past this was used to prevent the splitter from creating a gap between the timeline contents and the splitter. But these gaps only appeared because the splitter set a height. Now it only sets a max-height so the gaps don't appear.
[Production](https://profiler.firefox.com/public/etegz8k5g139b8q7n74qfqv6z4ztb0nzvy051k0/calltree/?globalTrackOrder=0&thread=0&transforms=ff-8&v=11) | [Deploy preview](https://deploy-preview-4606--perf-html.netlify.app/public/etegz8k5g139b8q7n74qfqv6z4ztb0nzvy051k0/calltree/?globalTrackOrder=0&thread=0&transforms=ff-8&v=11) This replaces the splitter component with an implementation which lets us use `max-height` on the timeline, so that we don't have to compute the timeline height based on the visible tracks. ┆Issue is synchronized with this [Jira Task](https://mozilla-hub.atlassian.net/browse/FP-639)
Co-authored-by: Andreas Pettersson <amvpet@gmail.com> (sv-SE)
Co-authored-by: ravmn <ravmn@ravmn.cl> (es-CL)
Drop the global `a:active` rule. It styled every anchor red while clicked, including ones styled as buttons (e.g. the Download button rendered via BlobUrlLink). Introduced in #5740. Removing it lets anchors keep whatever color their wrapping class sets, avoiding the same trap for any future link-styled element. Fixes #5948
Co-authored-by: Saurabh <connect@saurabhpro.com> (en-CA) Co-authored-by: chutten <chutten@mozilla.com> (en-CA)
Co-authored-by: Nazım Can Altınova <canaltinova@gmail.com>
Previously only filtering by marker was possible. This patch adds some more filtering options that will only be used in the cli for now. They are not exposed in the profiler web frontend.
It will be used later by the profiler-cli.
Fixes #5953 (we can move follow-ups that we have there once this lands). This PR is the rebased, squashed and split version of #5663. I also did some reviews on top and updated the code further to fix some issues. (This PR currently depends on #5968. Please review that one first) It adds a new command-line tool, `profiler-cli`, for querying Firefox Profiler profiles from a terminal. The CLI is published as a separate npm package (`@firefox-devtools/profiler-cli`, alpha) and is the intended entry point for most users What's in here: **New `src/profile-query/` library**: Reusable `ProfileQuerier` class that loads a profile (file, `profiler.firefox.com` URL, or share link) and exposes methods for profile/thread info, samples (top-down / bottom-up / hot functions), markers, functions, zoom (view range) stack, and per-thread filter stack. All query methods return structured result objects; formatting lives in the CLI layer. **New `profiler-cli/` package**: Node CLI (`profiler-cli`, short alias `pq`) with a persistent daemon architecture so subsequent commands against the same profile are fast. Sessions are stored under `~/.profiler-cli/`. How to do manual testing locally: - Pull the branch - Run `yarn install` and `yarn build-profiler-cli` - Add a temporary alias (so it doesn't affect the existing installation that you might have): `alias profiler-cli="node $(pwd)/profiler-cli/dist/profiler-cli.js" && alias pq="node $(pwd)/profiler-cli/dist/profiler-cli.js"` - Then you can use `pq` and `profiler-cli` in this terminal session.
This PR bumps the profiler-cli to 0.1.0 for the first npm non-alpha release! I will publish the release once this PR lands and then add a tag for this release. Currently the publishing flow is documented in https://github.com/firefox-devtools/profiler/blob/main/docs-developer/deploying.md#publishing-profiler-cli-to-npm, but it's pretty manual. It might be good to make this automated with some github actions. But this is a todo for later time for now.
formatMicroseconds and formatNanoseconds expect inputs in μs and ns. See switch(format) in formatFromMarkerSchema. Co-authored-by: Nazım Can Altınova <canaltinova@gmail.com>
Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com>
…5993) This is polluting the console output when we share a profile with URLs removed, because it will try to parse urls like `http://<URL>:564:26`.
`String(arbitraryFormat)` was meant to detect ArrayBuffers from different realms, but when the input is already a Uint8Array, it serializes all byte values as a comma-separated string, which allocates hundreds of megabytes for large profiles. Switch to `Object.prototype.toString.call` which returns the correct `[object ArrayBuffer]` tag cross-realm without touching the array contents.
This is not strictly necessary after we changed the `String()` inside `unserializeProfileOfArbitraryFormat`. But this is more correct, so it's better to keep change it.
…le extraction (#6004) Fixes #6001. See my analysis here for more context: #6001 (comment)
Updated locales: en-CA, en-GB, es-CL, fy-NL, ia, nl, ru, sv-SE.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Changes:
[Markus Stange] Use custom splitter component (#4606)
[fatadel] Fix Download button text color when clicked (#5985)
[Samuel Glauser] Fix fullscreen icon size in bottom box (#5987)
[Nazım Can Altınova] Add
profiler-clifor querying profiles (#5963)[Nazım Can Altınova] Bump profiler cli version to 0.1.0 (#5996)
[Markus Stange] Switch from max-height to maxHeight in JSX style={{...}}. (#5990)
[carverdamien] Fix comment about how time and duration are stored (#5997)
[Nazım Can Altınova] Do not show console error when libnames are failed to parse as a URL (#5993)
[Nazım Can Altınova] Fix the unnecessary stringify of Uint8Array contents during zip profile extraction (#6004)
And special thanks to our localizers:
en-CA: chutten
en-CA: Saurabh
en-GB: Ian Neal
es-CL: ravmn
fy-NL: Fjoerfoks
ia: Melo46
nl: Mark Heijl
ru: Valery Ledovskoy
sv-SE: Andreas Pettersson