The Firefox Profiler visualizes performance data recorded from web browsers. It is a tool designed to consume performance profiles from the Gecko Profiler but can visualize data from any profiler able to output in JSON. The interface is a web application built using React and Redux and runs entirely client-side.
Mozilla develops this tool to help make Firefox silky smooth and fast for millions of its users, and to help make sites and apps faster across the web.
This is a fork of the upstream Firefox Profiler maintained by Johannes Bechberger. The jfrtofp branch contains a single feature commit on top of an upstream snapshot, used by the Java profiling tools jfrtofp and jfrtofp-server. It is less stable than upstream but ships features that are not yet (or may never be) merged there.
Fork-only features the Java tooling depends on:
- Custom marker tracks (
MarkerSchema.graphs/trackLabel/graphHeight/isPreSelected, with per-linefillColor/strokeColor/width/isPreScaled) — used by jfrtofp for GC heap, CPU load, and network utilization tracks. - Marker-based stack strategies (
Thread.sampleLikeMarkersConfig) — turns selected markers (e.g.jdk.ObjectAllocationSample,jdk.ThreadStart) into call-tree-style sample sources. - Per-source override URL (
SourceTable.sourceUrl) — lets the source view fetch directly from a configured Java source repo URL instead of going through the symbol server. - Function Table tab — aggregates samples by function rather than by call path.
- TreeView column sort — multi-column sortable headers for the call tree / function table.
- Java syntax highlighting in the source view.
- In-browser JFR converter — drag-and-drop a
.jfrfile directly into the profiler without running jfrtofp-server. Built on the excellent jafar JFR parser by Jaroslav Bachorik, compiled to WebAssembly via GraalVM Web Image. Requires the optional WASM asset; seesrc/profile-logic/import/jfr-wasm/README.md. The build works without it (JFR_CONVERTER_ENABLED=false).
The jfrtofp branch is automatically deployed to parttimenerd.github.io/firefox-profiler on every push. The CI builds the JFR WASM via yarn build-jfr-wasm before the JS build so the deployed version includes the full in-browser converter. Sources for the WASM live in src/profile-logic/import/jfr-wasm/jafar/.
This branch is rebased onto upstream periodically; the fork is squashed into one commit on top, so git log upstream..jfrtofp shows exactly what's added. The merged branch (the previous name) was renamed to jfrtofp to make its purpose self-describing.
Visit profiler.firefox.com 🚀
This project is live on https://profiler.firefox.com/. The website includes instructions on how to get going to start recording and viewing performance profiles.
The Profiler was tested with recent versions of the following assistive technology:
NVDA (Windows) on Firefox and Chrome browsers
VoiceOver (Mac OS X) on Chrome
Orca (Linux) on Firefox
If you experience problems using any of the above technologies, please file a bug.
If you would like to help us test on other assistive technologies or improve the existing code, we would love your contributions!
You will need a recent enough version of Yarn 1 (Classic),
version 1.10 is known to work correctly.
You can install it using npm install -g yarn. Please refer to its documentation for other possible install procedures.
To download and build the Firefox Profiler web app run:
git clone [email protected]:firefox-devtools/profiler.git
cd profiler
yarn install
yarn startThis project uses TypeScript.
You can also develop the Firefox Profiler online in a pre-configured development environment using GitHub Codespaces.
Please look at our GitHub Codespaces documentation for more information.
For more detailed information on getting started contributing. We have plenty of docs available to get you started.
| Contributing | Find out in detail how to get started and get your local development environment configured. |
| Code of Conduct | We want to create an open and inclusive community, we have a few guidelines to help us out. |
| Developer Documentation | Want to know how this whole thing works? Get started here. |
| Source Files | Dive into the inner workings of the code. Most folders have a README.md providing more information. |
| End-User Documentation | These docs are customized for actual users of the profiler, not just folks contributing. |
| GitHub Codespaces documentation | Start here if you want to set up a workspace on GitHub Codespaces. |
Say hello on Matrix in the Firefox Profiler channel (#profiler:mozilla.org).
MPL v2 is designed to encourage contributors to share modifications they make to the code, while still allowing them to combine the code with code under other licenses (open or proprietary) with minimal restrictions.
We are very grateful to the zlib compression library (Jean-loup Gailly, Mark Adler and team) for their contribution to the project.
