Skip to content

Profile unchanged VS Code CSS and visual-tree workloads with bounded performance gates #243

Description

@wieslawsoltes

Current performance checkpoint — 21 September 2026

Focused PR #891 merged at WebScene d3c030fa. The 20-run exact unchanged-Code-OSS gate after this CSS invalidation optimization painted under two seconds in 20/20 trials (p50 1,828.19 ms; p95 1,860.12 ms), while preserving model and computed-style checksums.

A later #252 workspace probe exposed an observer-induced refresh before the initial Explorer settle. Removing only that probe refresh gives exact models/rows and first-child paints of 1,621.87, 1,717.05, and 2,955.18 ms across three runs. The last run became workspace-ready at 1,853.78 ms, before provider activation, and still fails the absolute two-second gate. Product/runtime cold-start scheduling needs attribution; do not infer a CSS bottleneck or claim this diagnostic change as an engine fix. Source contract tests pass 25/25. Evidence: vscode-demo/docs/validation/workspace-first-child-timing-d3c030fa-20260921.md.

This issue stays open for Command Palette, Settings, Explorer interaction, terminal, panel churn, resize, hover, idle CPU, memory, lifecycle, scene publication, and matched browser/native workloads with bounded product-neutral gates. Start the next focused WebScene fix from a measured engine stage.

Parent tracker: #235

Problem

Microbenchmarks alone do not identify which CSS and visual-tree paths dominate unchanged VS Code. We need repeatable product workloads that point back to product-neutral engine fixtures and prevent CSS fixes from shifting cost into layout or scene publication.

Proposed work

  • Capture bounded counters for editor startup, Command Palette, Settings, Explorer expansion, terminal attach/detach, panel open/close, resize, hover, and repeated class mutation.
  • Record selector-index probes, matched rules, recascade scope, layout roots/nodes, scene nodes/publications, allocations, CPU, latency, and memory.
  • Correlate each expensive path with a minimal product-neutral benchmark before changing WebScene.
  • Use repeated A/B or ABBA measurement with semantic checksums and stable workload counts.
  • Retain compact JSON summaries; remove large superseded traces/artifacts.

Acceptance

  • Each scenario has a versioned workload and explicit budget.
  • Browser/native visual and computed-style results remain equivalent.
  • Every proposed optimization names the measured bottleneck and product-neutral regression.
  • Results distinguish idle, mutation, layout, paint, and publication costs.
  • [Epic] CSS features, compatibility, validation, and performance #235 is updated after every profile and disposition.

This work consumes #148 as the invalidation baseline and #234 only if its cumulative gates pass.

Current focused results — 19 September 2026

Seven exact no-op scheduling/visual-tree guards are merged through WebScene b100d6f: custom-property writes #549/#550; ID writes #551/#552; data/ARIA #554/#555; canonical tabIndex #556/#557; empty replaceChildren #559/#560; empty DocumentFragment append #562/#563; and empty textContent clear #565/#566.

The narrow source-backed audit is complete. General attribute/cssText/reparent shortcuts remain excluded where observable declaration, MutationObserver, custom-element, focus, selection, adoption, identity or event semantics could differ. New work must start from measured current product traces.

Only git diff --check ran. Authored high-count regressions and Code OSS A/B/ABBA, cascade/layout/scene counters, idle CPU, terminal attribution, pixels, package, lifecycle, memory and physical performance gates remain scheduled and unexecuted.

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