Skip to content

Reduce allocations for getStackLineInfo + getStackAddressInfo#5761

Merged
mstange merged 1 commit intofirefox-devtools:mainfrom
mstange:compact-stack-line-info
Mar 3, 2026
Merged

Reduce allocations for getStackLineInfo + getStackAddressInfo#5761
mstange merged 1 commit intofirefox-devtools:mainfrom
mstange:compact-stack-line-info

Conversation

@mstange
Copy link
Contributor

@mstange mstange commented Jan 17, 2026

Production | Deploy preview

On large profiles, opening the source view can cause large allocations because we create Set objects for many stacks. In this PR I've experimented with a more compact storage of a collection of sets.

Before: https://share.firefox.dev/3NnthpO
After: https://share.firefox.dev/45dMNv1

getStackLineInfo now allocates 46MB instead of 220MB (4.8x reduction), and takes 146ms instead of 338ms (2.3x reduction), when opening the source view for mozjemalloc.cpp on https://share.firefox.dev/3NnzEcF.

@codecov
Copy link

codecov bot commented Jan 17, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 85.41%. Comparing base (850e4ff) to head (0740f14).
⚠️ Report is 6 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #5761      +/-   ##
==========================================
+ Coverage   85.36%   85.41%   +0.04%     
==========================================
  Files         320      321       +1     
  Lines       31916    32037     +121     
  Branches     8780     8728      -52     
==========================================
+ Hits        27246    27365     +119     
- Misses       4239     4241       +2     
  Partials      431      431              

☔ View full report in Codecov by Sentry.
📢 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 mstange force-pushed the compact-stack-line-info branch 4 times, most recently from d446334 to 5858c75 Compare January 22, 2026 04:08
@mstange mstange force-pushed the compact-stack-line-info branch 3 times, most recently from 0dc54ef to d9058d2 Compare February 6, 2026 00:27
@mstange mstange marked this pull request as ready for review February 6, 2026 00:28
@mstange mstange force-pushed the compact-stack-line-info branch 4 times, most recently from b9e9cfd to bdda4d2 Compare February 6, 2026 18:49
@mstange mstange requested a review from canova February 6, 2026 18:57
Copy link
Member

@canova canova left a comment

Choose a reason for hiding this comment

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

It's impressive to lower the memory usage that much, nice idea to use something like trie! It took me some time to read it understand it completely but I believe I do now 😄

I added a few nits for comments etc., nothing blocking.

Before: https://share.firefox.dev/3NnthpO
After: https://share.firefox.dev/45dMNv1

getStackLineInfo now allocates 46MB instead of 220MB (4.8x reduction),
and takes 146ms instead of 338ms (2.3x reduction), when opening the
source view for mozjemalloc.cpp on https://share.firefox.dev/3NnzEcF
@mstange mstange force-pushed the compact-stack-line-info branch from bdda4d2 to 0740f14 Compare March 3, 2026 17:59
@mstange mstange enabled auto-merge March 3, 2026 17:59
@mstange mstange merged commit 450e3f6 into firefox-devtools:main Mar 3, 2026
19 checks passed
@canova canova mentioned this pull request Mar 3, 2026
canova added a commit that referenced this pull request Mar 3, 2026
Changes:

[fatadel] Fix crash when nativeSymbol index is out of bounds in assembly
view (#5850)
[depfu[bot]] Update all Yarn dependencies (2026-02-25) (#5859)
[Nazım Can Altınova] Fix the color of dark mode back arrow svg (#5863)
[fatadel] Force canvas redraw when system theme changes (#5861)
[Nazım Can Altınova] Fix unhandled promise rejection in
setupInitialUrlState (#5864)
[fatadel] Persist selected marker in URL and show sticky tooltip on load
(#5847)
[Markus Stange] Implement the "collapse resource" transform with the
help of the "collapse direct recursion" transform. (#5824)
[Markus Stange] Bump rollup from 2.79.2 to 2.80.0 (#5868)
[Markus Stange] Remove async attribute from module script tag. (#5870)
[Nazım Can Altınova] Update the docsify package that's used in the user
documentation (#5872)
[Markus Stange] Share stackTable, frameTable, funcTable, resourceTable
and nativeSymbols between threads (#5482)
[Nazım Can Altınova] Escape CSS URLs that are coming from profiles
(#5874)
[fatadel] Update home page message for the other browser case (#5866)
[fatadel] Add support for ternaries in marker labels (#5857)
[Markus Stange] Reduce allocations for getStackLineInfo +
getStackAddressInfo (#5761)

And special thanks to our localizers:

de: Ger
fy-NL: Fjoerfoks
it: Francesco Lodolo [:flod]
nl: Fjoerfoks
ru: berry
ru: Valery Ledovskoy
zh-TW: Pin-guang Chen
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.

2 participants