Skip to content

Deploy June 17, 2026#1054

Merged
kala-moz merged 18 commits into
productionfrom
main
Jun 17, 2026
Merged

Deploy June 17, 2026#1054
kala-moz merged 18 commits into
productionfrom
main

Conversation

esanuandra and others added 18 commits May 28, 2026 11:23
…e differently (#926)

* Add autocomplete component

fix tests

fix multiple select revision checkbox

Fix Snackbar, fetchRevisionBySearch and fetchRevisionbyID test

Update SearchInputAndResult to theme.palette

Rename AutocompleteInput and AutocompleteOption

Remove SearchResultsList and SearchResultsListItem

Fix input field for new remains populated after a revision is selected

* Update snapshots

* Fix failig tests in fetchRevisionsBySearch

* Fix test converage
…inal order (#1046)

style scatter strip: swap Base/New rows, add labelled baselines, larger markers, dark-mode-aware tick text
… CommonGraph (#1045)

* add client-side mode-detection helpers to kde.js (ported from kde-widget)

* wire client-side mode detection into CommonGraph: valley-depth slider, mode-line overlays, peak labels (ported from kde-widget)

* add tests for scatter tooltip and y-axis label formatters in CommonGraph

* add checkbox to toggle mode-detection overlay

* memoize vt-independent analysis so slider drags don't re-run KDE or reshuffle scatter jitter

* extract mode detection into its own memo so it doesn't recompute on theme, unit, or showModes changes

Add clarifying comment to unused kde code.

* add tests for slider wiring, disabled state, and show-modes checkbox in CommonGraph

bump codecov circleci orb 3.2.2 → 5.4.3 to fix GPG key validation failure

* bump codecov orb to 6.0.0 — v5 still points at the retired keybase profile

* name mode overlays after their parent series so the legend toggles them together
subtest alignment: cap subtest name width, stretch chevron cell full-height

- Max-width on subtest names in the subtests-page row so long names wrap
  rather than push other cells off-grid.
- alignSelf: 'stretch' on the chevron cell's Box so its white background
  fills the full row height edge-to-edge (the grid container's
  alignItems: 'center' previously sized each cell to content, leaving
  row tint visible above and below the chevron).
- Snapshot updates for both changes.
⬆️ Update all npm dependencies (2026-06-11)

Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com>
…l time

modes memo used `vt` (the prop, only updated on mouse release) so mode
lines only jumped when the user let go of the slider, making it look
broken. Switch to `localVt` (the live slider state) so the mode overlay
lines update on every drag pixel. fitModesFromKde is cheap (peak-finding
on a pre-computed 1024-point grid) so running it continuously is fine.
…abels

Labels like "Base A: 2590264 (48%)" are about 20 chars wide, which at
typical font sizes is ~20% of the chart width — wider than the previous
13% threshold used to decide when to bump a label to a higher stagger
level. Raise to 20%.

Also make the chart height and KDE/scatter grid positions dynamic: each
additional stagger level adds LABEL_ROW_PX (16 px) to the top margin and
grows the container by the same amount, so labels never clip.
See the commit description, they are mostly cosmetic. This is based on
@kala-moz's branch.
gaussianPracticalSupport previously used brentq to find where the
Gaussian kernel drops to atol. For large bandwidths (bw > ~3989) the
kernel peak is already below atol everywhere, so no root exists and
brentq threw. Replace with an analytical solution; when the kernel is
too wide fall back to 3σ so the convolution still produces a smooth
curve.

silvermansRule returned a hardcoded bw=1 for zero-variance data (all
values identical), which is far too narrow for large-valued metrics like
memory bytes. Use 0.1% of the data mean instead, giving a visible spike.
Same fix in approximateSJBandwidth.

Also wrap the Silverman fallback in safeKde in its own try/catch so a
failure there returns null rather than crashing the component.
The previous percentile bootstrap (1000 resamples) does not correct for
bias or skewness in the bootstrap distribution, which is common in
performance data.

Switch to BCa (bias-corrected and accelerated) bootstrap, matching
scipy.stats.bootstrap(..., method='BCa', paired=False):
- z0: bias-correction factor from the proportion of bootstrap samples
  below the observed statistic
- a: acceleration from leave-one-out jackknife on both samples

Increase nIter from 1000 to 9999, which is standard for BCa to give
stable jackknife-based acceleration estimates.

Implements erf, normalCDF, and normalPPF (Acklam rational approx,
max error 1.15e-9) with no external dependencies.
Add getDisplayScale() which picks the best human-readable divisor and
label for bytes (B/KB/MB/GB), KB (KB/MB/GB), and ms (ms/s/min) based
on the magnitude of the values being displayed.

Add adaptUnit() which wraps getDisplayScale() to return a sign-prefixed
formatting function suitable for delta values (CI bounds, median diffs).
The unit in the CI summary line was hardcoded to "ms". Use the
measurement unit from the API response instead, and scale it to
the most readable sub-unit via adaptUnit() — so a memory result shows
"-63.0 KB" rather than "-64512.0 ms".

Replace the "not significant" suffix (which confused users when the
p-value said significant but the CI straddled zero) with a targeted
warning only when the CI crosses zero: "⚠ interval includes zero —
effect direction uncertain".
Shared bandwidth: pre-compute bandwidths in a separate memo (approxSJ
for top-level results, ISJ with silverman fallback for subtests) and use
max(baseBw, newBw) for both curves so they are directly comparable.

Axis bounds: derive min/max from the KDE grid extent rather than
multiplying raw values by 0.95/1.05. The KDE grid is already padded by
gaussianPracticalSupport(bw), so it scales correctly regardless of
value magnitude. For near-constant data (range < 1% of midpoint) enforce
a minimum axis range so ticks remain readable.

Bandwidth slider: when bw/dataRange > 0.5 the KDE is genuinely flat;
show a slider so users can dial the smoothing multiplier down to reveal
structure.

Unit-scaled axis: use getDisplayScale() on the axis bounds to pick
KB/MB/GB for bytes data and s/min for ms data, applied consistently to
tick labels, axis name, and tooltips.
Reviewer asked for a relative percentage alongside the absolute diff.
Computes base median inline (proper even-length average), then formats as
(+X.X%) / (-X.X%) next to the absolute value.
- bump ms decimals from 1 to 2 in getDisplayScale; values like 5.03ms
  now display as 5.03 rather than 5.0
- use decimals:2 fallback for unknown units
- remove dead top-level tickFormatter made unused by the memo split
- drop unnecessary type assertions flagged by no-unnecessary-type-assertion
- update test expectations: ms tooltip/tick values use 2dp; Silverman
  fallback test triggers on numeric-bw throw; axis tick formatter test
  updated for toFixed(decimals) behavior
… measuring time. (#1050)

If the numbers are large (e.g. we're measuring gigabytes), the math
would just break -- this is what the first commit fixes.

The second commit slightly improves the confidence in the case which the
distribution are skewed, which is typical in our case. This is lifted
from scipy, cross-checked like the other bits of code.

Then the rest are cosmetic / fixes (in order of the patches):

- it's nicer to say 800MB than 800000000 bytes
- I thought that it was confusing when displaying the median diff: the
test could be marked as high confidence, but the media diff bootstrap
could be marked as low confidence. Conceptually this makes sense, but we
can phrase it better: we want to warn when a confidence interval
includes zero, e.g. "the median was improved by 0.5ms, confidence
interval [0.6, -0.1], meaning this could well be a -0.1 regression. If
this interval does not include 0 (e.g. 0.5ms, confidence interval [0.8,
0.3], then in all cases we're certain it improves things, there's low
chance it regresses things
- again when displaying large numbers such as amount of memory, our
auto-sizing for the KDE was perfectible, I saw myself having to resize.
I changed things so it looks better (leaving about 10% of padding on
either side of the min/max). Also when the distribution is all over the
place, I don't think the automatic bandwidth calculation makes any
sense, so we add a slider much like we added one for the modal split.

This fixes BMO https://bugzilla.mozilla.org/show_bug.cgi?id=2046147
@netlify

netlify Bot commented Jun 17, 2026

Copy link
Copy Markdown

Deploy Preview for mozilla-perfcompare ready!

Name Link
🔨 Latest commit 8780e6d
🔍 Latest deploy log https://app.netlify.com/projects/mozilla-perfcompare/deploys/6a32ce7e431d6c00080f6578
😎 Deploy Preview https://deploy-preview-1054--mozilla-perfcompare.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@kala-moz kala-moz merged commit b1e5635 into production Jun 17, 2026
8 of 9 checks passed
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.

4 participants