Skip to content

Deploy May 7, 2026#6007

Merged
canova merged 44 commits intoproductionfrom
main
May 7, 2026
Merged

Deploy May 7, 2026#6007
canova merged 44 commits intoproductionfrom
main

Conversation

@canova
Copy link
Copy Markdown
Member

@canova canova commented May 7, 2026

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-cli for 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

mozilla-pontoon and others added 30 commits April 28, 2026 16:20
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.
canova and others added 14 commits May 4, 2026 17:40
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.
@canova canova requested a review from fatadel as a code owner May 7, 2026 14:52
@canova canova merged commit 8037af5 into production May 7, 2026
38 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants