Skip to content

Complete Flutter SVG mask geometry parity #508

Closed

Description

@wieslawsoltes

Problem

The Flutter backend currently provides a bounded synchronous SVG mask parser for untransformed filled path/rect/circle/ellipse/polygon elements. Groups, transforms, fill rules, strokes, defs/use, and CSS inheritance fail closed, while the Skia backend uses the complete shared SVG renderer.

Focused implementation

  • Move synchronous SVG mask compilation into a reusable cached resource abstraction rather than reparsing renderer-specific markup.
  • Add bounded group and affine transform stacks, even-odd/nonzero fill rules, inherited opacity/fill, and safe defs/use expansion.
  • Support stroked geometry by converting the bounded stroke subset into alpha coverage or an equivalent cached picture.
  • Enforce depth, element, path-command, use-reference, and decoded-byte caps; cycles and unsupported external resources fail closed.
  • Keep cache keys, eviction, reset, detach, and memory accounting aligned with Skia resource lifetime.

Gates

Shared SVG corpus pixels across Skia/Flutter/Chromium, adversarial depth/reference/cycle limits, cache-hit and parse-time counters, mutation/replacement tests, 4,096-icon memory/CPU benchmarks, and 100 renderer reset cycles returning to baseline.

Parent: #256. Depends on merged #502.

Current status — 19 September 2026

Implementation is active in an isolated worktree from WebScene 276d5b77737927a4bd67bfeb523b8a515a7b115f. The focused slice owns Flutter SVG group/transform/fill/stroke/defs/use geometry, bounded cache/lifecycle behavior, and authored corpus/adversarial/performance regressions. It does not overlap the active #519 selector work. No branch has been pushed and no PR exists at this checkpoint. Per the current implementation-first direction, only git diff --check will run locally; execution and Release gates remain deferred.

Activity

  1. wieslawsoltes commented on Sep 19, 2026

    @wieslawsoltes
    CollaboratorAuthor

    Completed by #524 and merged to WebScene main as 4bc5f11cc3aa177a834adfcdc0a6049fe6f7d212. Bounded Flutter SVG mask geometry, caching, counters, and authored pixel/adversarial/lifecycle sources landed. Only git diff --check ran; execution debt remains tracked in #256/#503.

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