Skip to content

Pawang/perf testing parallel#310170

Draft
pwang347 wants to merge 16 commits intomainfrom
pawang/perfTestingParallel
Draft

Pawang/perf testing parallel#310170
pwang347 wants to merge 16 commits intomainfrom
pawang/perfTestingParallel

Conversation

@pwang347
Copy link
Copy Markdown
Member

No description provided.

Copilot AI review requested due to automatic review settings April 15, 2026 16:10
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Note

Copilot was unable to run its full agentic suite in this review.

Adds a chat performance benchmarking and memory leak detection harness (with a mock LLM server + scenarios) and wires it into npm scripts and a GitHub Actions workflow for automated comparisons.

Changes:

  • Introduces chat perf regression runner + CI Markdown summary generation.
  • Adds state-based chat memory leak checker and shared chat-simulation utilities (mock server, scenarios, fixtures, config).
  • Adds a GitHub Actions workflow and repo plumbing (.gitignore, build filter, package.json scripts) to run/collect results.
Show a summary per file
File Description
scripts/chat-simulation/test-chat-perf-regression.js New perf regression runner that launches VS Code, drives chat scenarios, collects timing/rendering/memory metrics, and compares vs baseline.
scripts/chat-simulation/test-chat-mem-leaks.js New state-based leak checker that cycles chat scenarios across iterations and measures residual heap/DOM growth.
scripts/chat-simulation/fixtures/uri.ts Minimal URI fixture used by tool-call scenarios to read deterministic content.
scripts/chat-simulation/fixtures/types.ts Minimal types helpers fixture used by tool-call scenarios.
scripts/chat-simulation/fixtures/strings.ts Minimal string helpers fixture used by tool-call scenarios.
scripts/chat-simulation/fixtures/lifecycle.ts Minimal lifecycle/disposable fixture used by tool-call scenarios.
scripts/chat-simulation/fixtures/event.ts Minimal event/emitter fixture used by tool-call scenarios.
scripts/chat-simulation/fixtures/errors.ts Minimal error helpers fixture used by tool-call scenarios.
scripts/chat-simulation/fixtures/async.ts Minimal async helpers fixture used by tool-call scenarios.
scripts/chat-simulation/fixtures/arrays.ts Minimal array helpers fixture used by tool-call scenarios.
scripts/chat-simulation/config.jsonc Default knobs for baseline build, runs, and leak thresholds.
scripts/chat-simulation/common/utils.js Shared helpers for config loading, launching VS Code, stats, and inspector connections.
scripts/chat-simulation/common/perf-scenarios.js Built-in scenario catalog (content/tool-calls/multi-turn) registered into the mock server.
scripts/chat-simulation/common/mock-llm-server.js Mock OpenAI/CAPI-like server supporting streaming + multi-turn/tool-call scenarios.
package.json Adds perf:chat and perf:chat-leak npm scripts.
build/filters.ts Excludes .jsonc from the copyright filter.
.gitignore Ignores .chat-simulation-data output directory.
.github/workflows/chat-perf.yml Adds CI workflow to run perf comparisons in parallel groups and upload summaries/artifacts.
.github/skills/chat-perf/SKILL.md Adds documentation for how to run the new perf and leak tools.

Copilot's findings

Comments suppressed due to low confidence (1)

scripts/chat-simulation/test-chat-mem-leaks.js:1

  • The CLI/config option messages is parsed but never used by the leak checker logic (the script cycles through all scenarios each iteration regardless). Either remove messages from args/config/help text or implement it (e.g., cap the number of scenarios/messages executed per iteration) so the flag has an effect.
/*---------------------------------------------------------------------------------------------
  • Files reviewed: 18/19 changed files
  • Comments generated: 8

Comment on lines +200 to +205
await cdp.send('Tracing.start', {
traceConfig: {
includedCategories: ['v8.gc', 'devtools.timeline'],
recordMode: 'recordContinuously',
}
});
Copy link

Copilot AI Apr 15, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tracing is started long before the Tracing.dataCollected listener is attached, so early trace events can be missed (listeners only receive events after subscription). Attach the Tracing.dataCollected handler immediately before/after Tracing.start (and clear traceEvents at that point) so the trace covers the full interaction deterministically.

Copilot uses AI. Check for mistakes.
Comment on lines +517 to +522
/** @type {Array<any>} */
const traceEvents = [];
cdp.on('Tracing.dataCollected', (/** @type {any} */ data) => { traceEvents.push(...data.value); });
const tracingComplete = new Promise(resolve => {
cdp.once('Tracing.tracingComplete', () => resolve(undefined));
});
Copy link

Copilot AI Apr 15, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tracing is started long before the Tracing.dataCollected listener is attached, so early trace events can be missed (listeners only receive events after subscription). Attach the Tracing.dataCollected handler immediately before/after Tracing.start (and clear traceEvents at that point) so the trace covers the full interaction deterministically.

Suggested change
/** @type {Array<any>} */
const traceEvents = [];
cdp.on('Tracing.dataCollected', (/** @type {any} */ data) => { traceEvents.push(...data.value); });
const tracingComplete = new Promise(resolve => {
cdp.once('Tracing.tracingComplete', () => resolve(undefined));
});
// `traceEvents` and `tracingComplete` must be initialized alongside
// `Tracing.start` so no early trace events are missed.

Copilot uses AI. Check for mistakes.
Comment on lines +1282 to +1283
if (!cur || !bas || !bas.median) { continue; }
const change = (cur.median - bas.median) / bas.median;
Copy link

Copilot AI Apr 15, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The guard !bas.median incorrectly skips metrics when the baseline median is 0 (valid for some counters). Use an explicit null/undefined check (e.g. bas.median === null || bas.median === undefined) and handle the bas.median === 0 denominator case consistently (similar to the logic used elsewhere in the file).

Suggested change
if (!cur || !bas || !bas.median) { continue; }
const change = (cur.median - bas.median) / bas.median;
if (!cur || !bas || bas.median === null || bas.median === undefined) { continue; }
const change = bas.median !== 0 ? (cur.median - bas.median) / bas.median : 0;

Copilot uses AI. Check for mistakes.
Comment on lines +120 to +141
Launches one VS Code session, sends N messages sequentially, forces GC between each, and measures renderer heap and DOM node count. Uses **linear regression** on the samples to compute per-message growth rate, which is compared against a threshold.

### Key flags

| Flag | Default | Description |
|---|---|---|
| `--messages <n>` / `-n` | `10` | Number of messages to send. More = more accurate slope. |
| `--build <path\|ver>` / `-b` | local dev | Build to test. |
| `--threshold <MB>` | `2` | Max per-message heap growth in MB. |
| `--verbose` | — | Print per-message heap/DOM counts. |

### What it measures

- **Heap growth slope** (MB/message) — linear regression over forced-GC heap samples. A leak shows as sustained positive slope.
- **DOM node growth** (nodes/message) — catches rendering leaks where elements aren't cleaned up. Healthy chat virtualizes old messages so node count plateaus.

### Interpreting results

- `0.3–1.0 MB/msg` — normal (V8 internal overhead, string interning)
- `>2.0 MB/msg` — likely leak, investigate retained objects
- DOM nodes stable after first message — normal (chat list virtualization working)
- DOM nodes growing linearly — rendering leak, check disposable cleanup
Copy link

Copilot AI Apr 15, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The SKILL documentation describes a per-message linear-regression leak test controlled by --messages, but test-chat-mem-leaks.js currently implements a state-based iteration approach (cycle all scenarios, then reset) and does not use messages or compute a slope. Update the SKILL doc to match the implemented algorithm/flags (or adjust the script to match the documented behavior).

Suggested change
Launches one VS Code session, sends N messages sequentially, forces GC between each, and measures renderer heap and DOM node count. Uses **linear regression** on the samples to compute per-message growth rate, which is compared against a threshold.
### Key flags
| Flag | Default | Description |
|---|---|---|
| `--messages <n>` / `-n` | `10` | Number of messages to send. More = more accurate slope. |
| `--build <path\|ver>` / `-b` | local dev | Build to test. |
| `--threshold <MB>` | `2` | Max per-message heap growth in MB. |
| `--verbose` || Print per-message heap/DOM counts. |
### What it measures
- **Heap growth slope** (MB/message) — linear regression over forced-GC heap samples. A leak shows as sustained positive slope.
- **DOM node growth** (nodes/message) — catches rendering leaks where elements aren't cleaned up. Healthy chat virtualizes old messages so node count plateaus.
### Interpreting results
- `0.3–1.0 MB/msg`normal (V8 internal overhead, string interning)
- `>2.0 MB/msg` — likely leak, investigate retained objects
- DOM nodes stable after first message — normal (chat list virtualization working)
- DOM nodes growing linearly — rendering leak, check disposable cleanup
Launches one VS Code session, cycles through the built-in chat scenarios, forces GC between iterations, and measures renderer heap and DOM node count. After completing a full scenario pass, the test resets and repeats so it can detect retained state that accumulates across scenario cycles.
### Key flags
| Flag | Default | Description |
|---|---|---|
| `--build <path\|ver>` / `-b` | local dev | Build to test. |
| `--threshold <MB>` | `2` | Maximum retained heap growth allowed before the run is treated as suspicious. |
| `--verbose` | | Print per-iteration heap and DOM counts. |
### What it measures
- **Retained heap after forced GC** (MB) — catches memory that survives scenario execution and reset boundaries.
- **DOM node count across iterations** — catches rendering leaks where elements or widgets are not cleaned up after scenario completion.
- **Growth across scenario cycles** — the important signal is whether heap or node counts keep rising after each full pass instead of returning to a stable range.
### Interpreting results
- Small first-iteration increases are normal (startup, caches, JIT, string interning).
- Heap that keeps increasing after each full scenario cycle is suspicious and should be investigated for retained objects.
- DOM nodes returning to a steady range after reset is normal.
- DOM nodes or heap continuing to climb from cycle to cycle indicates a likely rendering or lifecycle leak; check disposable cleanup and retained references.

Copilot uses AI. Check for mistakes.
Comment on lines +120 to +141
Launches one VS Code session, sends N messages sequentially, forces GC between each, and measures renderer heap and DOM node count. Uses **linear regression** on the samples to compute per-message growth rate, which is compared against a threshold.

### Key flags

| Flag | Default | Description |
|---|---|---|
| `--messages <n>` / `-n` | `10` | Number of messages to send. More = more accurate slope. |
| `--build <path\|ver>` / `-b` | local dev | Build to test. |
| `--threshold <MB>` | `2` | Max per-message heap growth in MB. |
| `--verbose` | — | Print per-message heap/DOM counts. |

### What it measures

- **Heap growth slope** (MB/message) — linear regression over forced-GC heap samples. A leak shows as sustained positive slope.
- **DOM node growth** (nodes/message) — catches rendering leaks where elements aren't cleaned up. Healthy chat virtualizes old messages so node count plateaus.

### Interpreting results

- `0.3–1.0 MB/msg` — normal (V8 internal overhead, string interning)
- `>2.0 MB/msg` — likely leak, investigate retained objects
- DOM nodes stable after first message — normal (chat list virtualization working)
- DOM nodes growing linearly — rendering leak, check disposable cleanup
Copy link

Copilot AI Apr 15, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The SKILL documentation describes a per-message linear-regression leak test controlled by --messages, but test-chat-mem-leaks.js currently implements a state-based iteration approach (cycle all scenarios, then reset) and does not use messages or compute a slope. Update the SKILL doc to match the implemented algorithm/flags (or adjust the script to match the documented behavior).

Suggested change
Launches one VS Code session, sends N messages sequentially, forces GC between each, and measures renderer heap and DOM node count. Uses **linear regression** on the samples to compute per-message growth rate, which is compared against a threshold.
### Key flags
| Flag | Default | Description |
|---|---|---|
| `--messages <n>` / `-n` | `10` | Number of messages to send. More = more accurate slope. |
| `--build <path\|ver>` / `-b` | local dev | Build to test. |
| `--threshold <MB>` | `2` | Max per-message heap growth in MB. |
| `--verbose` || Print per-message heap/DOM counts. |
### What it measures
- **Heap growth slope** (MB/message) — linear regression over forced-GC heap samples. A leak shows as sustained positive slope.
- **DOM node growth** (nodes/message) — catches rendering leaks where elements aren't cleaned up. Healthy chat virtualizes old messages so node count plateaus.
### Interpreting results
- `0.3–1.0 MB/msg` — normal (V8 internal overhead, string interning)
- `>2.0 MB/msg` — likely leak, investigate retained objects
- DOM nodes stable after first message — normal (chat list virtualization working)
- DOM nodes growing linearly — rendering leak, check disposable cleanup
Launches one VS Code session, cycles through the built-in chat scenarios repeatedly, forces GC between iterations, and measures renderer heap and DOM node count after each pass. The test uses these state-based samples to detect sustained growth across repeated scenario cycles, rather than computing a per-message linear-regression slope.
### Key flags
| Flag | Default | Description |
|---|---|---|
| `--build <path\|ver>` / `-b` | local dev | Build to test. |
| `--threshold <MB>` | `2` | Max allowed renderer heap growth over the leak-check run. |
| `--verbose` || Print per-iteration heap/DOM counts. |
### What it measures
- **Renderer heap growth** (MB over repeated scenario iterations) — forced-GC heap samples are compared across the run to catch retained state that does not get cleaned up between scenario cycles.
- **DOM node growth** (nodes over repeated scenario iterations) — catches rendering leaks where elements are retained instead of being released or virtualized as chat state is exercised and reset.
### Interpreting results
- Small heap fluctuations between iterations are normal (V8 internal overhead, caching, string interning).
- Heap usage that keeps climbing across repeated scenario cycles is a likely leak; investigate retained objects and lifecycle cleanup.
- DOM nodes that stabilize after the initial iterations are normal (chat list virtualization and cleanup working).
- DOM nodes that continue growing across iterations suggest a rendering leak; check disposable cleanup and retained elements.

Copilot uses AI. Check for mistakes.
Comment on lines +27 to +28
/** @param {string} text */
function stripJsoncComments(text) { return text.replace(/\/\/.*/g, '').replace(/\/\*[\s\S]*?\*\//g, ''); }
Copy link

Copilot AI Apr 15, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The JSONC comment stripper uses regexes that will also remove // and /* */ sequences inside string literals (e.g. URLs like http://...), which can corrupt the JSON before parsing. Prefer a JSONC parser (e.g. jsonc-parser) or a safer comment-stripping approach that respects quoted strings.

Copilot uses AI. Check for mistakes.
Comment on lines +35 to +39
function loadConfig(section) {
const raw = fs.readFileSync(path.join(__dirname, '..', 'config.jsonc'), 'utf-8');
const config = JSON.parse(stripJsoncComments(raw));
return config[section] ?? {};
}
Copy link

Copilot AI Apr 15, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The JSONC comment stripper uses regexes that will also remove // and /* */ sequences inside string literals (e.g. URLs like http://...), which can corrupt the JSON before parsing. Prefer a JSONC parser (e.g. jsonc-parser) or a safer comment-stripping approach that respects quoted strings.

Copilot uses AI. Check for mistakes.
on:
pull_request:
paths:
- '.github/workflows/chat-perf.yml'
Copy link

Copilot AI Apr 15, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This workflow only runs on PRs that modify the workflow file itself, so it won't gate chat-related changes (despite the skill doc describing CI gating for chat UI work). Consider expanding the pull_request.paths filter to include relevant chat areas (e.g. src/vs/workbench/contrib/chat/**, extensions/copilot/**, and/or scripts/chat-simulation/**) or remove the PR-triggered gating claims from docs.

Suggested change
- '.github/workflows/chat-perf.yml'
- '.github/workflows/chat-perf.yml'
- 'src/vs/workbench/contrib/chat/**'
- 'extensions/copilot/**'
- 'scripts/chat-simulation/**'

Copilot uses AI. Check for mistakes.
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 15, 2026

Screenshot Changes

Base: a05e069b Current: d3608b50

Changed (98)

sessions/updateHoverWidget/UpdateHoverReady/Dark
Before After
before after
sessions/updateHoverWidget/UpdateHoverReady/Light
Before After
before after
sessions/updateHoverWidget/UpdateHoverAvailableForDownload/Dark
Before After
before after
sessions/updateHoverWidget/UpdateHoverAvailableForDownload/Light
Before After
before after
sessions/updateHoverWidget/UpdateHoverDownloading30Percent/Dark
Before After
before after
sessions/updateHoverWidget/UpdateHoverDownloading30Percent/Light
Before After
before after
sessions/updateHoverWidget/UpdateHoverInstalling/Dark
Before After
before after
sessions/updateHoverWidget/UpdateHoverInstalling/Light
Before After
before after
sessions/updateHoverWidget/UpdateHoverUpdating/Dark
Before After
before after
sessions/updateHoverWidget/UpdateHoverUpdating/Light
Before After
before after
sessions/updateHoverWidget/UpdateHoverSameVersion/Dark
Before After
before after
sessions/updateHoverWidget/UpdateHoverSameVersion/Light
Before After
before after
sessions/agentFeedback/agentFeedbackEditorOverlayWidget/ZeroOfZero/Dark
Before After
before after
sessions/agentFeedback/agentFeedbackEditorOverlayWidget/ZeroOfZero/Light
Before After
before after
sessions/agentFeedback/agentFeedbackEditorOverlayWidget/SingleFeedback/Dark
Before After
before after
sessions/agentFeedback/agentFeedbackEditorOverlayWidget/SingleFeedback/Light
Before After
before after
sessions/agentFeedback/agentFeedbackEditorOverlayWidget/FirstOfThree/Dark
Before After
before after
sessions/agentFeedback/agentFeedbackEditorOverlayWidget/FirstOfThree/Light
Before After
before after
sessions/agentFeedback/agentFeedbackEditorOverlayWidget/ReviewOnlyTwoComments/Dark
Before After
before after
sessions/agentFeedback/agentFeedbackEditorOverlayWidget/ReviewOnlyTwoComments/Light
Before After
before after
sessions/agentFeedback/agentFeedbackEditorOverlayWidget/MiddleOfThree/Dark
Before After
before after
sessions/agentFeedback/agentFeedbackEditorOverlayWidget/MiddleOfThree/Light
Before After
before after
sessions/agentFeedback/agentFeedbackEditorOverlayWidget/MixedFourComments/Dark
Before After
before after
sessions/agentFeedback/agentFeedbackEditorOverlayWidget/MixedFourComments/Light
Before After
before after
sessions/agentFeedback/agentFeedbackEditorOverlayWidget/LastOfThree/Dark
Before After
before after
sessions/agentFeedback/agentFeedbackEditorOverlayWidget/LastOfThree/Light
Before After
before after
sessions/agentFeedback/agentFeedbackEditorWidget/CollapsedSingleComment/Dark
Before After
before after
sessions/agentFeedback/agentFeedbackEditorWidget/CollapsedSingleComment/Light
Before After
before after
sessions/agentFeedback/agentFeedbackEditorWidget/ExpandedSingleComment/Dark
Before After
before after
sessions/agentFeedback/agentFeedbackEditorWidget/ExpandedSingleComment/Light
Before After
before after
sessions/agentFeedback/agentFeedbackEditorWidget/CollapsedMultiComment/Dark
Before After
before after
sessions/agentFeedback/agentFeedbackEditorWidget/CollapsedMultiComment/Light
Before After
before after
sessions/agentFeedback/agentFeedbackEditorWidget/ExpandedMultiComment/Dark
Before After
before after
sessions/agentFeedback/agentFeedbackEditorWidget/ExpandedMultiComment/Light
Before After
before after
sessions/agentFeedback/agentFeedbackEditorWidget/ExpandedFocusedFeedback/Dark
Before After
before after
sessions/agentFeedback/agentFeedbackEditorWidget/ExpandedFocusedFeedback/Light
Before After
before after
sessions/agentFeedback/agentFeedbackEditorWidget/ExpandedReviewOnly/Dark
Before After
before after
sessions/agentFeedback/agentFeedbackEditorWidget/ExpandedReviewOnly/Light
Before After
before after
sessions/agentFeedback/agentFeedbackEditorWidget/ExpandedMixedComments/Dark
Before After
before after
sessions/agentFeedback/agentFeedbackEditorWidget/ExpandedMixedComments/Light
Before After
before after
sessions/agentFeedback/agentFeedbackEditorWidget/ExpandedFocusedReviewComment/Dark
Before After
before after
sessions/agentFeedback/agentFeedbackEditorWidget/ExpandedFocusedReviewComment/Light
Before After
before after
sessions/agentFeedback/agentFeedbackEditorWidget/ExpandedReviewSuggestion/Dark
Before After
before after
sessions/agentFeedback/agentFeedbackEditorWidget/ExpandedReviewSuggestion/Light
Before After
before after
sessions/agentFeedback/agentFeedbackEditorWidget/ExpandedPRReviewOnly/Dark
Before After
before after
sessions/agentFeedback/agentFeedbackEditorWidget/ExpandedPRReviewOnly/Light
Before After
before after
sessions/agentFeedback/agentFeedbackEditorWidget/ExpandedAllSourcesMixed/Dark
Before After
before after
sessions/agentFeedback/agentFeedbackEditorWidget/ExpandedAllSourcesMixed/Light
Before After
before after
sessions/agentFeedback/agentFeedbackEditorWidget/ExpandedFocusedPRReview/Dark
Before After
before after
sessions/agentFeedback/agentFeedbackEditorWidget/ExpandedFocusedPRReview/Light
Before After
before after
sessions/agentFeedback/agentFeedbackEditorWidget/HiddenWidget/Dark
Before After
before after
sessions/agentFeedback/agentFeedbackEditorWidget/HiddenWidget/Light
Before After
before after
sessions/aiCustomizationShortcutsWidget/Collapsed/Dark
Before After
before after
sessions/aiCustomizationShortcutsWidget/Collapsed/Light
Before After
before after
sessions/aiCustomizationShortcutsWidget/CollapsedWithMcpServers/Dark
Before After
before after
sessions/aiCustomizationShortcutsWidget/CollapsedWithMcpServers/Light
Before After
before after
chat/aiStats/AiStatsHover/Dark
Before After
before after
chat/aiStats/AiStatsHover/Light
Before After
before after
chat/aiStats/AiStatsHoverNoData/Dark
Before After
before after
chat/aiStats/AiStatsHoverNoData/Light
Before After
before after
editor/codeActionList/SimpleQuickFixes/Dark
Before After
before after
editor/codeActionList/SimpleQuickFixes/Light
Before After
before after
editor/codeEditor/CodeEditor/Dark
Before After
before after
editor/codeEditor/CodeEditor/Light
Before After
before after
editor/inlineChatAffordance/InlineChatAffordance/Dark
Before After
before after
editor/inlineChatAffordance/InlineChatAffordance/Light
Before After
before after
editor/inlineChatAffordance/InlineChatOverlay/Dark
Before After
before after
editor/inlineChatAffordance/InlineChatOverlay/Light
Before After
before after
editor/inlineCompletions/other/HintsToolbar/Dark
Before After
before after
editor/inlineCompletions/other/HintsToolbar/Light
Before After
before after
editor/inlineCompletions/other/HintsToolbarHovered/Dark
Before After
before after
editor/inlineCompletions/other/HintsToolbarHovered/Light
Before After
before after
editor/inlineCompletions/other/JumpToHint/Dark
Before After
before after
editor/inlineCompletions/other/JumpToHint/Light
Before After
before after
editor/inlineCompletions/other/NextFileEditSuggestion/Dark
Before After
before after
editor/inlineCompletions/other/NextFileEditSuggestion/Light
Before After
before after
editor/inlineCompletions/other/GutterMenu/Dark
Before After
before after
editor/inlineCompletions/other/GutterMenu/Light
Before After
before after
editor/inlineCompletions/views/SideBySideViewSmall/Dark
Before After
before after
editor/inlineCompletions/views/SideBySideViewSmall/Light
Before After
before after
editor/inlineCompletions/views/SideBySideViewWide/Dark
Before After
before after
editor/inlineCompletions/views/SideBySideViewWide/Light
Before After
before after
editor/inlineCompletions/views/WordReplacementView/Dark
Before After
before after
editor/inlineCompletions/views/WordReplacementView/Light
Before After
before after
editor/inlineCompletions/views/DeletionView/Dark
Before After
before after
editor/inlineCompletions/views/DeletionView/Light
Before After
before after
editor/inlineCompletions/views/LineReplacementView/Dark
Before After
before after
editor/inlineCompletions/views/LineReplacementView/Light
Before After
before after
editor/multiDiffEditor/MultiDiffEditor/Dark
Before After
before after
editor/multiDiffEditor/MultiDiffEditor/Light
Before After
before after
editor/suggestWidget/MethodCompletions/Dark
Before After
before after
editor/suggestWidget/MethodCompletions/Light
Before After
before after
editor/suggestWidget/MixedKinds/Dark
Before After
before after
editor/suggestWidget/MixedKinds/Light
Before After
before after
peekReference/PeekReferences/Dark
Before After
before after
peekReference/PeekReferences/Light
Before After
before after
imageCarousel/imageCarousel/MultipleSections/Dark
Before After
before after
imageCarousel/imageCarousel/MultipleSections/Light
Before After
before after

Added (2)

chat/aiCustomizations/aiCustomizationWelcomePages/WelcomePage/Dark

current

chat/aiCustomizations/aiCustomizationWelcomePages/WelcomePage/Light

current

Removed (8)

chat/aiCustomizations/aiCustomizationWelcomePages/WelcomePageClassic/Dark

baseline

chat/aiCustomizations/aiCustomizationWelcomePages/WelcomePageClassic/Light

baseline

chat/aiCustomizations/aiCustomizationWelcomePages/WelcomePagePromptLaunchers/Dark

baseline

chat/aiCustomizations/aiCustomizationWelcomePages/WelcomePagePromptLaunchers/Light

baseline

chat/aiCustomizations/aiCustomizationWelcomePages/WelcomePageSelectorClassic/Dark

baseline

chat/aiCustomizations/aiCustomizationWelcomePages/WelcomePageSelectorClassic/Light

baseline

chat/aiCustomizations/aiCustomizationWelcomePages/WelcomePageSelectorPromptLaunchers/Dark

baseline

chat/aiCustomizations/aiCustomizationWelcomePages/WelcomePageSelectorPromptLaunchers/Light

baseline


blocks-ci screenshots changed

Replace the contents of test/componentFixtures/blocks-ci-screenshots.md with:

Updated blocks-ci-screenshots.md
<!-- auto-generated by CI — do not edit manually -->

#### editor/codeEditor/CodeEditor/Dark
![screenshot](https://hediet-screenshots.azurewebsites.net/images/cb32a3e854b5734fe5aaca2318f2e0a42ee821b05ea97883ea42c5ba95edb3c3)

#### editor/codeEditor/CodeEditor/Light
![screenshot](https://hediet-screenshots.azurewebsites.net/images/42624fbba5e0db7f32c224b5eb9c5dd3b08245697ae2e7d2a88be0d7c287129b)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants