fix(desktop): make the performance-pressure prompt idempotent per label#4434
Merged
Conversation
A steady slowdown re-tripped the lag/long-task threshold every cooldown window, so the report prompt kept reappearing even after the user already reported it. Suppress a pressure label once it is reported (persisted per build so a new build can re-surface it once) or dismissed (session only), keeping the existing cooldown and hidden-window guards as fallbacks.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
The performance-pressure report prompt (
performance.lag/performance.longtask/performance.heap) kept re-appearing for users on a persistent slowdown. The only gate was a 10-minute time cooldown — so a steady event-loop lag or recurring long task re-tripped the threshold every cooldown window and the prompt popped again, even after the user had already reported the exact same issue. The dashboard already de-dupes by stable label, so these repeat client reports add no signal — just annoyance.Fix
Make the prompt idempotent per pressure label:
localStorage, scoped to the current build commit, and never re-prompt that label again on this build. A new build can re-surface the issue once (still useful telemetry; if the build fixed it, no prompt at all).All storage access is guarded (
typeof localStorage, try/catch) so the crash surface keeps working in private-mode / quota / non-DOM contexts.Notes
The decision and persistence logic are extracted into pure, exported functions (
shouldPromptForPerformanceLabel,parseReportedPerf,serializeReportedPerf) and unit-tested incrash-reporting.test.ts(suppression, cooldown, hidden-skip, build-scoped round-trip, corrupt/missing storage).Verification
pnpm exec tsx src/__tests__/crash-reporting.test.ts— 28 passedpnpm typecheck— clean