Skip to content

Render bounded backdrop blur and saturation in retained scenes #503

Description

@wieslawsoltes

Implementation checkpoint — 19 September 2026

The focused implementation is merged:

Delivered behavior includes the canonical WebKit spelling, bounded versioned kind-48 resource, authored blur/saturation order, foreground phase placement after retained canvas/GPU content, sampled-prior-content damage, Avalonia 12 and Flutter reference projection, exact AppScene Skia/Graphite consumption, rounded/elliptical clipping, strict limits, and authored regression/performance contracts.

Keep #503 open for deferred native/reference/product pixels, mutation, performance, memory, lifecycle, exact-package, and zero-browser gates. Only git diff --check ran; no other gate is claimed.

Problem

Unchanged Code OSS uses backdrop-filter: blur(...) on welcome/onboarding surfaces and blur(...) saturate(1.08) on chat response surfaces. WebScene exposes the property but does not sample and filter previously painted content, so these overlays lose the intended separation and translucency.

Focused implementation

  • Canonicalize -webkit-backdrop-filter to the standard effective property and preserve computed-value/CSSOM behavior.
  • Parse a bounded authored-order list containing non-negative blur() lengths and saturate() factors, including the already-supported top-level functional length forms.
  • Introduce an explicit retained backdrop-effect command that samples only prior pixels inside the element paint box after its border-radius/overflow clip and before its own foreground/descendants.
  • Project the same isolation and filter order in Skia/Avalonia/Uno and Flutter without copying the whole viewport.
  • Expand old/new damage by the blur fringe and invalidate when geometry, clip, filter, opacity, stacking order, or sampled prior content changes.
  • Fail closed and keep capability reporting explicit for unsupported functions or unavailable backend paths.

Quality and performance gates

  • Browser/native computed-value, command-order, rounded-clip, nested stacking-context, opacity, transform, scroll, resize, mutation, detach, and unsupported-value contracts.
  • Fixed Chromium/native pixels for the Code OSS chat and welcome fixtures on light/dark themes.
  • A 1,024-overlay fixture records sampled pixel area, temporary surfaces, publications, allocations, CPU, GPU/paint time, and peak RSS; work must scale with damaged effect bounds rather than viewport size.
  • One hundred panel add/remove and resize cycles return temporary surfaces and retained nodes to the warmed baseline.

Parent: #256. Coordination: #241/#243/#246.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    vscode-oss/plannedPlanned for the AppScene/WebScene VS Code OSS integration

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions