Skip to content

Render CSS masks, filters, clip paths, and backdrop effects in retained scenes #256

Description

@wieslawsoltes

Current checkpoint — 20 September 2026

All effects implementation children are closed except #503, whose WebScene provider and AppScene native consumer are already merged. The open #503 scope is cumulative backdrop pixel, mutation, lifecycle, performance, memory, exact-package, and zero-browser execution; it is not a known missing source slice.

Masks, local SVG/path clips, foreground filters, backdrop blur/saturation, raster resources, multiple/radial mask layers, xor/exclude composition, and Flutter SVG projection are present. Start additional source work only from a reduced current-head failure and attach a focused child first.

Exact recoverable heads: WebScene ef1fa16e100883857804f7b7811ceffbe1a29867, AppScene 762bc24c2fb450385d4e6f963ddf3638b3c258f8, WebScene consolidation #76 020f84fa3912eb6040794f2adf7a5873277cce7c, and local unpushed vscode-demo 8e174f84f975838f11019412675dc3f5c6893614. No validation was executed in this refresh.

Current Code OSS effects status — 19 September 2026

Merged implementation

Remaining effects work

All implementation children through #508 are merged. #503 remains open because execution was deferred, not because an additional implementation slice is known.

Parent epic: #235. Owning workstreams: capability inventory #236 and paint/stacking #241; geometry dependencies belong to #240.

Proven gap

The unchanged VS Code checkout uses SVG/gradient masks for icons and fades, clip-path for editor and accessibility helpers, brightness/grayscale/blur filters, and backdrop blur on onboarding/overlay surfaces. Representative sources include xterm CSS, paneCompositePart.css, chat.css, standalone-tokens.css, and welcome/onboarding styles. The current native capability report explicitly exposes backdrop-filter as unsupported, while #241 has no focused executable plan for masks/filter isolation and resource lifetime.

This issue owns retained-scene representation, compositing, clipping, resource caching, and mutation for these effects. It does not own general layout algorithms or #245 structural invalidation.

Ordered work

  1. Let Publish a versioned CSS capability matrix backed by WPT and native contracts #236 record exact unsupported/partial properties and current executable evidence.
  2. Add WPT-derived parser/computed-value plus fixed-pixel browser/native contracts for mask-image/size/position/repeat/composite, basic filter, backdrop-filter, and reachable clip-path shapes.
  3. Implement the smallest independently testable paint slices in separate commits, preserving stacking-context, opacity, transform, overflow, and rounded-clip order.
  4. Qualify terminal scrollbar/icon masks, workbench icons/fades, editor hidden-text clips, chat gradients, and onboarding blur.

Acceptance and performance gates

  • Each claimed effect has an executable contract and exact boundary; unsupported functions stay explicitly unavailable rather than silently painting as identity.
  • Initial, class/style mutation, resize, scroll, detach/reattach, opacity, transform, and nested-clip cases match Chromium within versioned pixel thresholds and exact scene-command/resource expectations.
  • Backdrop effects sample only the correct prior content and do not leak across stacking contexts, portals, or rounded clips.
  • Resource replacement/reuse is bounded: a 4,096-effect fixture records decode/cache entries, scene nodes, publications, CPU/time, allocations, and peak RSS.
  • One hundred panel/icon mutation cycles return resources and retained scene nodes to the warmed baseline with no monotonic RSS growth.
  • Unsupported hardware paths fail closed with preserved semantic fallback evidence.

Proposed PR stack

  1. syntax/computed values + capability metadata;
  2. masks and clip paths + pixel/resource contracts;
  3. foreground filters;
  4. backdrop isolation/compositing;
  5. performance/lifetime and unchanged-product visual acceptance.

Current effects checkpoint — 19 September 2026

Background/mask/backdrop/filter provider and consumer slices through WebScene ca4fa171 are merged. The latest temporal additions are foreground-filter transitions (#537/#538) and product-used foreground-filter keyframes (#543/#544). #503 remains the cumulative backdrop/effects acceptance owner; AppScene main remains 50da4995 until the active accessibility consumer lands.

No latest-slice pixels, benchmarks, lifecycle/memory runs, package execution, or visual Chromium comparison have run. Keep those as explicit acceptance debt rather than reopening merged implementation children.

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