Add experimental sampling interval tracks per process
Add a new experimental feature to visualize sampling intervals within each process. This helps identify when samples were missed, delayed, or when there are variations in sampling frequency.
The feature is similar to experimental.enableProcessCPUTracks() and can be enabled via the console with: experimental.enableSamplingIntervalTracks()
Implementation details:
- Add 'sampling-interval' LocalTrack type
- Create TrackSamplingInterval and TrackSamplingIntervalGraph components
- Implement canvas rendering with max-min decimation optimization
- Add hover tooltips showing actual vs expected sampling intervals
- Include hover dot indicator for currently inspected sample
Example power profile where I was interested in seeing inconsistencies in sampling rate from the power meter: https://share.firefox.dev/48U79KE Example Firefox profile with lots of missing samples: https://share.firefox.dev/4p5d8mc
Screenshot of a case where this helped figure out that there was a connection between spikes in the power track and changes in sampling rate:
Codecov Report
:x: Patch coverage is 4.34783% with 264 lines in your changes missing coverage. Please review.
:white_check_mark: Project coverage is 84.93%. Comparing base (1342c91) to head (acb7cd8).
:warning: Report is 44 commits behind head on main.
Additional details and impacted files
@@ Coverage Diff @@
## main #5719 +/- ##
==========================================
- Coverage 85.62% 84.93% -0.70%
==========================================
Files 312 315 +3
Lines 30880 31288 +408
Branches 8504 8511 +7
==========================================
+ Hits 26441 26574 +133
- Misses 4009 4284 +275
Partials 430 430
:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.
:rocket: New features to boost your workflow:
- :snowflake: Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
- :package: JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.