gecko-dev/devtools/client/performance-new
Emilio Cobos Alvarez efe2305b8d Bug 1742696 - Opt-in a bunch of about:pages to dark system colors / form controls. r=Gijs,preferences-reviewers,webcompat-reviewers,twisniewski
Privileged pages do this automatically via:

  https://searchfox.org/mozilla-central/rev/aa8c75b83f636948f708986173965c84cae8c25f/widget/nsXPLookAndFeel.cpp#1179-1183

So this makes everything more consistent. Known exceptions:

 * Pocket panels (as those don't seem to support dark mode)
 * about:reader (because it has its own dark mode handling)

Differential Revision: https://phabricator.services.mozilla.com/D132019
2021-11-25 21:24:43 +00:00
..
@types Bug 1590317 - [devtools] Fix keyboard navigation for about:profiling range inputs r=julienw 2021-11-24 13:50:52 +00:00
aboutprofiling Bug 1742696 - Opt-in a bunch of about:pages to dark system colors / form controls. r=Gijs,preferences-reviewers,webcompat-reviewers,twisniewski 2021-11-25 21:24:43 +00:00
components Bug 1590317 - [devtools] Fix keyboard navigation for about:profiling range inputs r=julienw 2021-11-24 13:50:52 +00:00
popup Bug 1741716 - Change the preset to Firefox when profiler popup is activated through web channel r=julienw 2021-11-19 13:49:35 +00:00
store Bug 1625309 - Remove the frame script and instead use the WebChannel to expose the profile and symbolication. r=julienw 2021-11-16 20:41:23 +00:00
test Bug 1590317 - [devtools] Fix keyboard navigation for about:profiling range inputs r=julienw 2021-11-24 13:50:52 +00:00
.eslintrc.js
README.md
browser.js Bug 1625309 - Use /from-browser. r=julienw 2021-11-16 20:41:24 +00:00
index.xhtml Bug 1695253 - Replaced DTD/xhtml1-strict.dtd which lead to broken network loads. r=mossop 2021-03-24 16:52:06 +00:00
initializer.js Bug 1741235 - Merge the 'Firefox Front-End' and 'Firefox Platform' profiler presets, r=julienw,fluent-reviewers,nbaumgardner,kpatenio. 2021-11-17 18:37:43 +00:00
moz.build Bug 1721109 - Move ProfilerGetSymbols code out of toolkit/components/extensions and into devtools directories. r=canaltinova 2021-07-29 20:28:44 +00:00
package.json Bug 1721109 - Update TypeScript dependencies. r=canaltinova 2021-07-29 20:28:44 +00:00
panel.js Bug 1721072 - Properly await gInit's completion. r=canaltinova 2021-07-22 18:54:26 +00:00
profiler_get_symbols.js WIP: Bug 1742855 - Update profiler-get-symbols wasm to d1500c1e935db352eeb97170459d16a20bcddf08. r=canaltinova 2021-11-25 15:54:55 +00:00
symbolication-worker.js WIP: Bug 1742855 - Update profiler-get-symbols wasm to d1500c1e935db352eeb97170459d16a20bcddf08. r=canaltinova 2021-11-25 15:54:55 +00:00
symbolication.jsm.js WIP: Bug 1742855 - Update profiler-get-symbols wasm to d1500c1e935db352eeb97170459d16a20bcddf08. r=canaltinova 2021-11-25 15:54:55 +00:00
tsconfig.json
typescript-lazy-load.jsm.js
typescript.md Bug 1673419 - [devtools] Support performance-new typescript checks in devtools node try runner r=gregtatum,nchevobbe 2020-10-30 17:15:55 +00:00
utils.js Bug 1590317 - [devtools] Fix keyboard navigation for about:profiling range inputs r=julienw 2021-11-24 13:50:52 +00:00
yarn.lock Bug 1721109 - Update TypeScript dependencies. r=canaltinova 2021-07-29 20:28:44 +00:00

README.md

Performance New

This folder contains the code for the new performance panel that is a simplified recorder that works to record a performance profile, and inject it into profiler.firefox.com. This tool is not in charge of any of the analysis, only the recording.

TypeScript

This project contains TypeScript types in JSDoc comments. To run the type checker point your terminal to this directory, and run yarn install, then yarn test. In addition type hints should work if your editor is configured to speak TypeScript.

Overall Architecture

This project has a few different views explained below.

DevTools

This is a simplified recording panel that includes a preset dropdown. It's embedded in the DevTools. It's not the preferred way to use the profiler, but is included so that users are comfortable with existing workflows. This is built using React/Redux. The store's code is shared by all the views, but each view initializes it separately. The popup does not use React/Redux (explained later). When editing a custom preset, it takes you to "about:profiling" in a new tab.

This panel works similarly to the other DevTools panels. The devtools/client/performance-new/initializer.js is in charge of initializing the page specifically for the DevTools workflow. This script creates a PerfActor that is then used for talking to the Gecko Profiler component.

DevTools Remote

This is the same UI and codebase as the DevTools panel, but it's accessible from about:debugging for remote targets. It uses the PerfFront for a remote target to profile on the remote device. When editing a custom preset, it takes you to "about:profiling" in the same modal.

This page is initialized with the PerfActor, but it will target a remote debuggee, like an Android Phone.

about:profiling

This view uses React/Redux for the UI, and is a full page for configuring the profiler. There are no controls for recording a profile, only editing the settings. It shares the same Redux store code as DevTools (instantiated separately), but uses different React components.

about:profiling Remote

This is the remote view of the about:profiling page. It is embedded in the about:debugging profiler modal dialog, and it is initialized by about:debugging. It uses preferences that are postfixed with ".remote", so that a second set of preferences are shared for how remote profiling is configured.

Profiler Popup

The popup is enabled by default on Nightly and Dev Edition, but it's not added to the navbar. Once the profiler menu button is added to the navbar, or other places in the UI, the shortcuts for the profiler will work. In any release channel the popup can be enabled by visiting profiler.firefox.com and clicking Enable Profiler Menu Button. This flips the pref "devtools.performance.popup.feature-flag" and the profiler button will always be available in the list of buttons for the Firefox UI.

The popup UI is not a React Redux app, but has a vanilla browser chrome implementation. This was done to make the popup as fast as possible, with a trade-off of some complexity with dealing with the non-standard (i.e. not a normal webpage) browser chrome environment. The popup is designed to be as low overhead as possible in order to get the cleanest performance profiles. Special care must be taken to not impact browser startup times when working with this implementation, as it also turns on the global profiler shortcuts.

Injecting profiles into profiler.firefox.com

After a profile has been collected, it needs to be sent to profiler.firefox.com for analysis. This is done by using browser APIs to open a new tab, and then injecting the profile into the page through a frame script. See frame-script.js for implementation details. Both the DevTools Panel and the Popup use this frame script.