Skip to content

Complete Flutter SVG mask geometry parity #508

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

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