Skip to content

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

Description

@wieslawsoltes

Current implementation checkpoint — 19 September 2026

Exact recoverable heads

  • WebScene main and vscode-demo gitlink: 24e31e49c574b99674ce679d85731960be1f9286.
  • AppScene main and gitlink: 50da4995b07bfa7bd23cd2eaf6fae85912ad7c5b.
  • Unchanged Code OSS 1.137: 645f29cc3176500b4b5762ba887cf2a7f0ffdf2c.
  • Local vscode-demo integration: 24f5a2ba0bb78ea16d7defcff26c87660c6d8468, clean, 167 commits ahead, intentionally unpushed, with Actions disabled.
  • Open consolidations: WebScene Add Code OSS browser and native desktop compatibility #76 a28eca9a0259d0188107852850d1e705ce11c901; AppScene Stream native application video directly from file and network URLs #65 1e3422b6f519666df45a86500251448a7a42f4b2; vscode-demo Typescript #1 remote remains stale by design. None is merged.
  • The retained fc71e92-d4a73888 application is stale; no current Release package is claimed.

Latest merged focused work

  1. Effects and namespace selector implementations are merged through Complete Flutter SVG mask geometry parity #524/Propagate namespaces through functional selectors #528; cumulative execution/package gates remain open.
  2. Webview Complete nested-webview interaction, find, focus, and accessibility handoff #268 is merged through sandboxed bounded download leases Admit sandboxed webview downloads through bounded typed leases #535/Add bounded sandboxed download handoff #536 at e33fdbc6; drag/drop is active.
  3. Animate background colors on the host frame clock #533/Animate background colors on the host frame clock #534 merged background-color transitions and Interpolate bounded foreground filters on the host clock #537/Interpolate bounded foreground filters #538 merged supported foreground-filter transitions through 24e31e49 under Qualify media-query, transition, animation, and style-driven frame scheduling #242. Product-used filter keyframes are active.
  4. The accessibility audit proved WebScene needs a bounded generation-stamped semantic snapshot ABI before AppScene [GPU 08/20] Integrate GPU canvas images into Uno Skia composition #30 can expose native platform peers. That prerequisite is active under Qualify Code OSS accessibility semantics, keyboard navigation, and native exposure #262/Complete nested-webview interaction, find, focus, and accessibility handoff #268.

Recoverable order

  1. Finish Complete nested-webview interaction, find, focus, and accessibility handoff #268 nested drag/drop routing/retirement.
  2. Finish the WebScene semantic snapshot ABI, then consume it in AppScene [GPU 08/20] Integrate GPU canvas images into Uno Skia composition #30.
  3. Finish Qualify media-query, transition, animation, and style-driven frame scheduling #242 supported filter keyframes used by Chat/dictation.
  4. Defer cumulative visual/performance/WPT/package execution until validation resumes.

Only git diff --check ran for this implementation wave. Authored regressions were not executed. Builds, WPT, pixels, Chromium comparison, performance, memory, lifecycle, packaging, complete CI, computer-use acceptance, and Release qualification remain deferred.

If work stops, recover these exact heads and resume the active drag/drop, semantic snapshot, and filter-keyframe slices. Preserve all history outside this managed section.

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