Skip to content

Add an --insert-label-frames argument to the profiler-edit tool - #5966

Merged
mstange merged 2 commits into
firefox-devtools:mainfrom
mstange:push-tppxoqrqsyyy
Jun 4, 2026
Merged

Add an --insert-label-frames argument to the profiler-edit tool#5966
mstange merged 2 commits into
firefox-devtools:mainfrom
mstange:push-tppxoqrqsyyy

Conversation

@mstange

@mstangemstange commented Apr 23, 2026

Copy link
Copy Markdown
Contributor

Based on #6076.

This lets us create profiles like https://share.firefox.dev/4mPPTgr with DOM label frames that show up in the JS-only view, for profiles from samply, based on function name matching. The matchers are declared in a toml file that is passed to the script.

Example TOML file: https://gist.github.com/mstange/827c40404c987bc566b8b324efc0a04f

@mstange
mstangeforce-pushed the push-tppxoqrqsyyy branch from c303031 to 39b7942CompareMay 28, 2026 18:30
@codecov

codecovBot commented May 28, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 80.67227% with 23 lines in your changes missing coverage. Please review.
✅ Project coverage is 83.69%. Comparing base (2fd6ce9) to head (2cb282f).
⚠️ Report is 1 commits behind head on main.

Files with missing linesPatch %Lines
src/node-tools/profiler-edit.ts21.42%22 Missing ⚠️
src/utils/label-templates.ts98.90%1 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #5966 +/- ##
==========================================
- Coverage 83.70% 83.69% -0.02% 
==========================================
Files 337 338 +1 Lines 35575 35693 +118 Branches 9971 9904 -67 ==========================================
+ Hits 29778 29873 +95 - Misses 5369 5392 +23 
Partials 428 428 

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@mstange
mstangeforce-pushed the push-tppxoqrqsyyy branch 2 times, most recently from 83cd29e to 7354e3cCompareMay 30, 2026 00:39
@mstangemstange changed the title Add an --insert-stack-labels modification to the profiler-edit toolAdd an --insert-label-frames modification to the profiler-edit toolJun 1, 2026
@mstange
mstangeforce-pushed the push-tppxoqrqsyyy branch 2 times, most recently from 55816ce to 952d57eCompareJune 1, 2026 20:42
@mstange
mstange marked this pull request as ready for review June 1, 2026 20:43
@mstange
mstange removed the request for review from fatadelJune 1, 2026 20:43
@mstangemstange changed the title Add an --insert-label-frames modification to the profiler-edit toolAdd an --insert-label-frames argument to the profiler-edit toolJun 1, 2026
@mstange
mstangeforce-pushed the push-tppxoqrqsyyy branch 4 times, most recently from 057b358 to 560ba64CompareJune 4, 2026 15:13
Comment threadsrc/node-tools/profiler-edit.ts Outdated
Comment on lines +109 to +114
if (line !== null && col !== null) {
name += ` (${filename}:${line}:${col})`;
} else if (line !== null) {
name += ` (${filename}:${line})`;
} else {
name += ` (${filename})`;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The comment above mentions that it mirrors getLabelIndexForFunc, but it doesn't seem like it matches fully.

getLabelIndexForFunc constructs it like (${filename}), but this one does it like (${filename}:${line}:${col}).

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh yes, good catch.

Comment threadsrc/node-tools/profiler-edit.ts Outdated
autoLabels: AutoLabel[];
};

import { parse as parseToml } from 'smol-toml';

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: can we move this to the top of the file?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done.

@mstange
mstangeforce-pushed the push-tppxoqrqsyyy branch from 560ba64 to 9563cd2CompareJune 4, 2026 17:13
mstange added 2 commits June 4, 2026 13:14
In the past we had a hardcoded list of DOM methods in the label matchers.
This modification lets us replace 100 explicit labels of this type:
```
[[labels]]
name = "Document.querySelector"
funcPrefixes = [
"mozilla::dom::Document_Binding::querySelector(",
"blink::`anonymous namespace'::v8_document::QuerySelectorOperation",
"blink::(anonymous namespace)::v8_document::QuerySelectorOperation",
"WebCore::jsDocumentPrototypeFunction_querySelector",
]
```
with one auto label of this type:
```
[[auto_labels]]
nameTemplate = "{Class}.{method}"
funcPrefixTemplates = [
"mozilla::dom::{Class}_Binding::{method}(",
"blink::`anonymous namespace'::v8_{Class:blink_snake}::{method:pascal}Operation",
"blink::(anonymous namespace)::v8_{Class:blink_snake}::{method:pascal}Operation",
"WebCore::js{Class}PrototypeFunction_{method}",
]
```
fixup auto labels
This command takes a .toml file and adds label frames to a profile based on matching function names.
We want to use this for profiles from samply, to insert labels for DOM calls and Layout / Style / etc.
Example:
Before: https://share.firefox.dev/48wEADM
After: https://share.firefox.dev/3P9d3BQ
The toml file has to be provided by the user, because the matched function
names are specific to the program being profiled.
Here's an example toml file:
https://gist.github.com/mstange/827c40404c987bc566b8b324efc0a04f
@mstange
mstangeforce-pushed the push-tppxoqrqsyyy branch from 9563cd2 to 2cb282fCompareJune 4, 2026 17:14

@canovacanova left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me!

@mstange
mstange merged commit fdb0dce into firefox-devtools:mainJun 4, 2026
21 of 23 checks passed
@canovacanova mentioned this pull request Jun 16, 2026
canova added a commit that referenced this pull request Jun 16, 2026
Changes:
[Nazım Can Altınova] Fix call node context menu being hidden behind
source view bottom box (#6045)
[Nazım Can Altınova] Pass `--use-env-proxy` only when the node version
is >= 24 (#6064)
[fatadel] Upgrade @firefox-devtools/react-contextmenu to 5.2.4 (#6066)
[Markus Stange] Switch profiler-edit from minimist to commander (#6065)
[Markus Stange] Support reading profiles from JsonSlabs files (#6037)
[Florian Quèze] Don't fail profile processing when a marker's stack
field is not a backtrace (#6069)
[fatadel] Replace the footer-links overlay with a settings menu (#6042)
[fatadel] Upgrade @types/node to match Node 24 (#6070)
[fatadel] Remove unused undici-types package (#6074)
[cathaysia] Update isLocalURL to include LAN addresses, .local domains,
and hostn… (#5973)
[Markus Stange] Fix from-url with binary profiles (#6072)
[fatadel] Upgrade to React 19 (#6067)
[Markus Stange] Add an insertStackLabels helper. (#6076)
[fatadel] Drive counter tooltips from a tooltipRows schema (#6023)
[fatadel] Add TrackPower--tooltip-average-power-microwatt (#6080)
[Markus Stange] Downgrade to React 19.1 to fix unusable dev build
performance. (#6082)
[Nazım Can Altınova] Add source map symbolication and source view
support (#6018)
[spokodev] fix(FilterNavigatorBar): clip overflow so many breadcrumbs do
not expand the parent (#6085)
[Markus Stange] Move paddings inside the tree header cells. (#6002)
[Markus Stange] Add an --insert-label-frames argument to the
profiler-edit tool (#5966)
[Markus Stange] Stop printing "error: too many arguments" during tests.
(#6088)
[Markus Stange] More additions to profiler-edit, for sp3 profiles
(#6009)
[Nazım Can Altınova] Do not rely on localized texts in the settings menu
tests (#6101)
And special thanks to our localizers:
be: Andrei Mukamolau
de: Ger
de: Michael Köhler
de: Ralf Duehnfahr
el: Jim Spentzos
en-CA: chutten
en-GB: Ian Neal
es-CL: ravmn
fr: Théo Chevalier
fr: wy
fur: Fabio Tomat
fy-NL: Fjoerfoks
ia: Melo46
it: Francesco Lodolo [:flod]
nl: Mark Heijl
ru: Valery Ledovskoy
sr: Марко Костић (Marko Kostić)
sv-SE: Andreas Pettersson
tr: Grk
tr: Selim Şumlu
zh-CN: Olvcpr423
zh-TW: Pin-guang Chen
Sign up for freeto 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.

2 participants

@mstange@canova