Problem
In lib/shared/widgets/app_dialog.dart, _DialogBackdrop renders the modal frosted backdrop with animated Gaussian blur sigma on every frame of the enter/exit transition (200 ms):
BackdropFilter(
filter: ImageFilter.blur(sigmaX: sigma * t, sigmaY: sigma * t),
child: ColoredBox(
color: const Color(0xFF000000).withValues(alpha: tintAlpha * t),
),
)
While #886 / #977 successfully removed the enclosing Opacity widget (avoiding full-screen saveLayer offscreen compositing), animating sigmaX and sigmaY linearly from 0 to 8 across 24 frames (@ 120 Hz) forces the rasterizer (Skia / Impeller) to regenerate and execute a full-resolution Gaussian blur shader pass on every frame.
Code Location
lib/shared/widgets/app_dialog.dart (lines 152–159)
UI Kit Relationship
Impact on 120 Hz Frame Budget
On 120 Hz displays (8.3 ms frame budget), full-screen blur with varying sigma frequently causes raster thread spikes (10–18 ms), dropping frames on modal open/close on Linux (X11/Wayland) and macOS.
Proposed Solution
- Use a constant blur sigma (
sigma: 8) whenever t > 0 and animate only the background tint alpha / overlay fade:
final t = progress.clamp(0.0, 1.0);
if (t <= 0) return const SizedBox.expand();
return ClipRect(
child: BackdropFilter(
filter: ImageFilter.blur(sigmaX: sigma, sigmaY: sigma),
child: ColoredBox(
color: const Color(0xFF000000).withValues(alpha: tintAlpha * t),
),
),
);
- When Motion is Off / Reduced, snap directly to full blur or skip the filter entirely.
Acceptance Criteria
Problem
In
lib/shared/widgets/app_dialog.dart,_DialogBackdroprenders the modal frosted backdrop with animated Gaussian blur sigma on every frame of the enter/exit transition (200 ms):While #886 / #977 successfully removed the enclosing
Opacitywidget (avoiding full-screensaveLayeroffscreen compositing), animatingsigmaXandsigmaYlinearly from 0 to 8 across 24 frames (@ 120 Hz) forces the rasterizer (Skia / Impeller) to regenerate and execute a full-resolution Gaussian blur shader pass on every frame.Code Location
lib/shared/widgets/app_dialog.dart(lines 152–159)UI Kit Relationship
showAppDialogis the standard modal backdrop primitive (docs/ui-kit.md), used byQueryaModalDialog,QueryaConfirmDialog,CommandPaletteDialog,QuickSwitcherDialog, and all connection forms.QueryaDialogActions, but does not touch the backdrop rendering.Impact on 120 Hz Frame Budget
On 120 Hz displays (8.3 ms frame budget), full-screen blur with varying sigma frequently causes raster thread spikes (10–18 ms), dropping frames on modal open/close on Linux (X11/Wayland) and macOS.
Proposed Solution
sigma: 8) whenevert > 0and animate only the background tint alpha / overlay fade:Acceptance Criteria