Skip to content

[backport core/1.51] feat: align local settings with V1 billing layout (FE-1609) - #15588

Merged
comfy-pr-bot merged 1 commit into
core/1.51from
backport-15239-to-core-1.51
Aug 22, 2026
Merged

[backport core/1.51] feat: align local settings with V1 billing layout (FE-1609)#15588
comfy-pr-bot merged 1 commit into
core/1.51from
backport-15239-to-core-1.51

Conversation

@comfy-pr-bot

Copy link
Copy Markdown
Member

Backport of #15239 to core/1.51

Automatically created by backport workflow.

## Why

Settings currently builds separate local and cloud navigation trees, and
cloud's V1 workspace sections are additionally gated by
`billing_control_enabled`. This leaves local and flag-off users on the
legacy Workspace/Credits organization and forces billing work to target
two layouts.

The [latest product direction in
Slack](https://comfy-organization.slack.com/archives/C0BNGQG2LCW/p1786668631144379?thread_ts=1786649682.983289&cid=C0BNGQG2LCW)
clarifies that Activity should reuse `UsageLogsTable` for both personal
and team workspaces until the backend-backed workspace activity feed is
available.

## What changed

- Use the V1 Workspace / Account / General / Other sidebar organization
for logged-in local and cloud users.
- Always expose Plan & Credits and Members as workspace sections; keep
the owner-only Allowlist policy unchanged.
- Keep the legacy local Credits entry reachable so existing profile-menu
and top-up flows continue to work.
- Render the existing `UsageLogsTable` in Activity for personal and team
workspaces, remove the obsolete search field, and report refresh
failures.
- Preserve `WorkspaceActivityContent` unchanged for FE-1249.

## AS IS / TO BE

### AS IS — current local Credits settings

![Current local Credits settings with legacy Account and Application
Settings
grouping](https://ampcode.com/user-content/artifacts/736a6cfaafead9868352c7f1a5fcd4c9850ae2d21c7d994f37bf7aa8932b8975-file.png)

Source: [current local settings screenshot from the product
thread](https://comfy-organization.slack.com/archives/C0BNGQG2LCW/p1786651103082259?thread_ts=1786649682.983289&cid=C0BNGQG2LCW).

### TO BE — local V1 workspace layout

![Local V1 settings with Workspace and General
grouping](https://ampcode.com/user-content/artifacts/d62d83edd3f6f0c0f5b27d209ec340dab403afa9546cade29daef46a9282c9c1-file.png)

Source: [local unsubscribed V1 frame in
Figma](https://www.figma.com/design/CkFTD4c20PyRGpNVAJgpfV/Team-Plan---Workspaces?node-id=5874-71646).

### IMPLEMENTED — local Activity tab

![Local Plan & Credits Activity tab using
UsageLogsTable](https://ampcode.com/user-content/artifacts/bb6000311c626dc9faba1a444fd5d3017e288bd3bece120968a8aa7988aab282-file.png)

Captured from the local distribution with mocked activity events.

| Area | AS IS | TO BE |
| --- | --- | --- |
| Settings navigation | Local and flag-off users use the legacy grouping
and Workspace panel, while cloud users can receive the V1 structure. |
All logged-in local and cloud users share the V1 Workspace / Account /
General / Other organization. |
| Workspace billing | Plan & Credits and Members depend on cloud/billing
configuration. | Plan & Credits and Members are consistently surfaced
under Workspace; existing owner-only policy rules remain unchanged. |
| Activity | Uses the placeholder workspace ledger and search path. |
Reuses the paginated `UsageLogsTable` backed by billing events for
personal and team workspaces, with the obsolete search removed. |
| Existing local flows | Credits navigation is coupled to the legacy
local settings structure. | The existing local Credits route remains
reachable for profile-menu and top-up flows while the V1 workspace
sections are also available. |
| Future workspace activity | The backend-dependent activity
implementation is blocked. | `WorkspaceActivityContent` stays intact for
FE-1249 and can replace the stopgap once backend data is available. |

## Design references

- [Unified V1 Tab Layout for Local &
Cloud](https://www.figma.com/design/CkFTD4c20PyRGpNVAJgpfV/Team-Plan---Workspaces?node-id=6258-41203)
— local unsubscribed, cloud unsubscribed, and subscribed settings
variants
- [Credits / Plan & Credits tab
variants](https://www.figma.com/design/CkFTD4c20PyRGpNVAJgpfV/Team-Plan---Workspaces?node-id=5874-72767)
— Overview/Credits and Activity states
- [Profile menu
updates](https://www.figma.com/design/CkFTD4c20PyRGpNVAJgpfV/Team-Plan---Workspaces?node-id=6258-41204)
— aligned billing navigation labels and entry points
- [Settings sidebar
reference](https://www.figma.com/design/CkFTD4c20PyRGpNVAJgpfV/Team-Plan---Workspaces?node-id=5999-37953)

Based on the approach in draft PRs #15206 and #15219, rebuilt from
`main`.

## Verification

- `pnpm test:unit src/platform/settings/composables/useSettingUI.test.ts
src/platform/workspace/components/dialogs/settings/PlanCreditsPanelContent.test.ts`
(18 passed)
- `pnpm test:unit src/platform/workspace` (1,118 passed)
- `pnpm typecheck`
- Targeted oxlint and ESLint (0 warnings/errors)
- `pnpm format:check` for changed files

FE-1609

---------

Co-authored-by: Amp <amp@ampcode.com>
@comfy-pr-bot comfy-pr-bot added the backport Backporting a PR onto a release candidate label Aug 21, 2026
@comfy-pr-bot
comfy-pr-bot enabled auto-merge (squash) August 21, 2026 23:35
@dosubot dosubot Bot added the size:L This PR changes 100-499 lines, ignoring generated files. label Aug 21, 2026
@github-actions

github-actions Bot commented Aug 21, 2026

Copy link
Copy Markdown

🎨 Storybook: ✅ Built — View Storybook

Details

⏰ Completed at: 08/21/2026, 11:36:50 PM UTC

Links

🎭 Playwright: ✅ 1821 passed, 0 failed · 4 flaky

📊 Browser Reports
  • chromium: View Report (✅ 1800 / ❌ 0 / ⚠️ 4 / ⏭️ 5)
  • chromium-2x: View Report (✅ 2 / ❌ 0 / ⚠️ 0 / ⏭️ 0)
  • chromium-0.5x: View Report (✅ 1 / ❌ 0 / ⚠️ 0 / ⏭️ 0)
  • mobile-chrome: View Report (✅ 18 / ❌ 0 / ⚠️ 0 / ⏭️ 0)

📦 Bundle Size

⏳ Size data collection in progress…

⚡ Performance Report

canvas-idle: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 67.1 MB heap
canvas-mouse-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 54.3 MB heap
canvas-zoom-sweep: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 69.9 MB heap
dom-widget-clipping: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 51.4 MB heap
large-graph-idle: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 69.0 MB heap
large-graph-pan: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 60.0 MB heap
large-graph-zoom: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 53.1 MB heap
minimap-idle: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 66.5 MB heap
subgraph-dom-widget-clipping: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 53.0 MB heap
subgraph-idle: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 67.7 MB heap
subgraph-mouse-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 58.7 MB heap
subgraph-transition-enter: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 143ms TBT · 94.9 MB heap
viewport-pan-sweep: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 67.1 MB heap
vue-large-graph-idle: · 56.2 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 162.0 MB heap
vue-large-graph-pan: · 57.1 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 62ms TBT · 174.6 MB heap
workflow-execution: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 66.5 MB heap

⚠️ 1 regression detected

Show regressions
Metric Baseline PR (median) Δ Sig
subgraph-idle: task duration 433ms 435ms +0% ⚠️ z=2.1
All metrics
Metric Baseline PR (median) Δ Sig
canvas-idle: avg frame time 17ms 17ms +0% z=-0.1
canvas-idle: p95 frame time 17ms 17ms -0%
canvas-idle: layout duration 0ms 0ms +0%
canvas-idle: style recalc duration 8ms 8ms -2% z=-2.9
canvas-idle: layout count 0 0 +0%
canvas-idle: style recalc count 10 10 +0% z=-2.1
canvas-idle: task duration 451ms 440ms -3% z=1.5
canvas-idle: script duration 6ms 6ms +0% z=-8.6
canvas-idle: TBT 0ms 0ms +0%
canvas-idle: heap used 67.1 MB 67.1 MB +0%
canvas-idle: DOM nodes 20 20 +0% z=-2.0
canvas-idle: event listeners 4 4 +0% z=-1.6
canvas-mouse-sweep: avg frame time 17ms 17ms +0% z=-0.4
canvas-mouse-sweep: p95 frame time 17ms 17ms +0%
canvas-mouse-sweep: layout duration 4ms 3ms -3% z=-0.9
canvas-mouse-sweep: style recalc duration 36ms 36ms -0% z=-2.0
canvas-mouse-sweep: layout count 12 12 +0%
canvas-mouse-sweep: style recalc count 75 75 +0% z=-1.8
canvas-mouse-sweep: task duration 874ms 882ms +1% z=0.3
canvas-mouse-sweep: script duration 112ms 117ms +5% z=-2.9
canvas-mouse-sweep: TBT 0ms 0ms +0%
canvas-mouse-sweep: heap used 54.1 MB 54.3 MB +0%
canvas-mouse-sweep: DOM nodes -113 -113 +0% z=-67.8
canvas-mouse-sweep: event listeners -74 -74 +0% z=-19.7
canvas-zoom-sweep: avg frame time 17ms 17ms -0% z=-1.1
canvas-zoom-sweep: p95 frame time 17ms 17ms -0%
canvas-zoom-sweep: layout duration 1ms 1ms -18% z=-1.0
canvas-zoom-sweep: style recalc duration 19ms 16ms -17% z=-2.2
canvas-zoom-sweep: layout count 6 6 +0%
canvas-zoom-sweep: style recalc count 32 32 -2% z=0.5
canvas-zoom-sweep: task duration 371ms 363ms -2% z=1.5
canvas-zoom-sweep: script duration 9ms 9ms +4% z=-6.0
canvas-zoom-sweep: TBT 0ms 0ms +0%
canvas-zoom-sweep: heap used 70.1 MB 69.9 MB -0%
canvas-zoom-sweep: DOM nodes 78 78 +0% z=-1.6
canvas-zoom-sweep: event listeners 19 19 +0% z=-0.9
dom-widget-clipping: avg frame time 17ms 17ms -0% z=0.1
dom-widget-clipping: p95 frame time 17ms 17ms -0%
dom-widget-clipping: layout duration 0ms 0ms +0%
dom-widget-clipping: style recalc duration 7ms 8ms +6% z=-2.6
dom-widget-clipping: layout count 0 0 +0%
dom-widget-clipping: style recalc count 12 12 +4% z=-2.2
dom-widget-clipping: task duration 363ms 355ms -2% z=-0.6
dom-widget-clipping: script duration 54ms 53ms -2% z=-4.6
dom-widget-clipping: TBT 0ms 0ms +0%
dom-widget-clipping: heap used 51.4 MB 51.4 MB +0%
dom-widget-clipping: DOM nodes 19 20 +5% z=-1.5
dom-widget-clipping: event listeners 0 2 variance too high
large-graph-idle: avg frame time 17ms 17ms +0% z=-0.2
large-graph-idle: p95 frame time 17ms 17ms +1%
large-graph-idle: layout duration 0ms 0ms +0%
large-graph-idle: style recalc duration 8ms 7ms -12% z=-4.9
large-graph-idle: layout count 0 0 +0%
large-graph-idle: style recalc count 10 9 -11% z=-9.9
large-graph-idle: task duration 573ms 573ms +0% z=0.6
large-graph-idle: script duration 14ms 13ms -4% z=-8.5
large-graph-idle: TBT 0ms 0ms +0%
large-graph-idle: heap used 67.0 MB 69.0 MB +3%
large-graph-idle: DOM nodes -279 -281 +1% z=-338.2
large-graph-idle: event listeners -164 -164 +0% z=-31.2
large-graph-pan: avg frame time 17ms 17ms +0% z=0.3
large-graph-pan: p95 frame time 17ms 17ms +0%
large-graph-pan: layout duration 0ms 0ms +0%
large-graph-pan: style recalc duration 14ms 12ms -13% z=-6.6
large-graph-pan: layout count 0 0 +0%
large-graph-pan: style recalc count 69 68 -1% z=-2.4
large-graph-pan: task duration 1154ms 1128ms -2% z=1.1
large-graph-pan: script duration 329ms 319ms -3% z=-4.5
large-graph-pan: TBT 0ms 0ms +0%
large-graph-pan: heap used 62.3 MB 60.0 MB -4%
large-graph-pan: DOM nodes -285 -282 -1% z=-182.4
large-graph-pan: event listeners -164 -163 -1% z=-202.8
large-graph-zoom: avg frame time 17ms 17ms -0%
large-graph-zoom: p95 frame time 17ms 17ms -1%
large-graph-zoom: layout duration 7ms 7ms +2%
large-graph-zoom: style recalc duration 13ms 14ms +7%
large-graph-zoom: layout count 60 60 +0%
large-graph-zoom: style recalc count 64 65 +2%
large-graph-zoom: task duration 1245ms 1329ms +7%
large-graph-zoom: script duration 366ms 371ms +1%
large-graph-zoom: TBT 0ms 0ms +0%
large-graph-zoom: heap used 75.6 MB 53.1 MB -30%
large-graph-zoom: DOM nodes 10 -285 -2950%
large-graph-zoom: event listeners 8 -153 -2013%
minimap-idle: avg frame time 17ms 17ms +0% z=0.1
minimap-idle: p95 frame time 17ms 17ms -0%
minimap-idle: layout duration 0ms 0ms +0%
minimap-idle: style recalc duration 6ms 7ms +7% z=-3.4
minimap-idle: layout count 0 0 +0%
minimap-idle: style recalc count 8 8 +0% z=-2.3
minimap-idle: task duration 575ms 574ms -0% z=1.0
minimap-idle: script duration 12ms 13ms +13% z=-8.6
minimap-idle: TBT 0ms 0ms +0%
minimap-idle: heap used 69.0 MB 66.5 MB -4%
minimap-idle: DOM nodes -284 -283 -0% z=-220.9
minimap-idle: event listeners -165 -180 +9% z=-279.5
subgraph-dom-widget-clipping: avg frame time 17ms 17ms +0% z=0.1
subgraph-dom-widget-clipping: p95 frame time 17ms 17ms -0%
subgraph-dom-widget-clipping: layout duration 0ms 0ms +0%
subgraph-dom-widget-clipping: style recalc duration 11ms 10ms -7% z=-2.4
subgraph-dom-widget-clipping: layout count 0 0 +0%
subgraph-dom-widget-clipping: style recalc count 46 47 +2% z=-1.6
subgraph-dom-widget-clipping: task duration 387ms 397ms +3% z=1.0
subgraph-dom-widget-clipping: script duration 119ms 119ms +0% z=-1.4
subgraph-dom-widget-clipping: TBT 0ms 0ms +0%
subgraph-dom-widget-clipping: heap used 53.1 MB 53.0 MB -0%
subgraph-dom-widget-clipping: DOM nodes 18 20 +11% z=-1.9
subgraph-dom-widget-clipping: event listeners 6 7 +17% z=-1.6
subgraph-idle: avg frame time 17ms 17ms -0% z=-0.2
subgraph-idle: p95 frame time 17ms 17ms +0%
subgraph-idle: layout duration 0ms 0ms +0%
subgraph-idle: style recalc duration 9ms 7ms -19% z=-4.1
subgraph-idle: layout count 0 0 +0%
subgraph-idle: style recalc count 11 9 -19% z=-3.7
subgraph-idle: task duration 433ms 435ms +0% ⚠️ z=2.1
subgraph-idle: script duration 6ms 6ms +1% z=-5.5
subgraph-idle: TBT 0ms 0ms +0%
subgraph-idle: heap used 67.7 MB 67.7 MB +0%
subgraph-idle: DOM nodes 21 17 -19% z=-3.2
subgraph-idle: event listeners 4 4 +0% variance too high
subgraph-mouse-sweep: avg frame time 17ms 17ms +0% z=0.4
subgraph-mouse-sweep: p95 frame time 17ms 17ms +0%
subgraph-mouse-sweep: layout duration 4ms 4ms -7% z=-2.4
subgraph-mouse-sweep: style recalc duration 35ms 33ms -5% z=-2.8
subgraph-mouse-sweep: layout count 16 16 +0%
subgraph-mouse-sweep: style recalc count 76 76 +1% z=-2.1
subgraph-mouse-sweep: task duration 728ms 738ms +1% z=-0.4
subgraph-mouse-sweep: script duration 81ms 84ms +4% z=-2.6
subgraph-mouse-sweep: TBT 0ms 0ms +0%
subgraph-mouse-sweep: heap used 59.0 MB 58.7 MB -0%
subgraph-mouse-sweep: DOM nodes 61 62 +1% z=-2.4
subgraph-mouse-sweep: event listeners 4 4 +0% variance too high
subgraph-transition-enter: avg frame time 17ms 17ms +0%
subgraph-transition-enter: p95 frame time 17ms 17ms +1%
subgraph-transition-enter: layout duration 12ms 12ms +1%
subgraph-transition-enter: style recalc duration 29ms 29ms -0%
subgraph-transition-enter: layout count 14 13 -7%
subgraph-transition-enter: style recalc count 19 18 -5%
subgraph-transition-enter: task duration 889ms 895ms +1%
subgraph-transition-enter: script duration 18ms 16ms -12%
subgraph-transition-enter: TBT 133ms 143ms +8%
subgraph-transition-enter: heap used 79.4 MB 94.9 MB +19%
subgraph-transition-enter: DOM nodes 13673 13673 +0%
subgraph-transition-enter: event listeners 2375 2375 +0%
viewport-pan-sweep: avg frame time 17ms 17ms -0%
viewport-pan-sweep: p95 frame time 17ms 17ms +0%
viewport-pan-sweep: layout duration 0ms 0ms +0%
viewport-pan-sweep: style recalc duration 35ms 35ms -1%
viewport-pan-sweep: layout count 0 0 +0%
viewport-pan-sweep: style recalc count 250 250 +0%
viewport-pan-sweep: task duration 3899ms 3980ms +2%
viewport-pan-sweep: script duration 976ms 997ms +2%
viewport-pan-sweep: TBT 0ms 0ms +0%
viewport-pan-sweep: heap used 64.0 MB 67.1 MB +5%
viewport-pan-sweep: DOM nodes -280 -282 +1%
viewport-pan-sweep: event listeners -148 -148 +0%
vue-large-graph-idle: avg frame time 17ms 18ms +2%
vue-large-graph-idle: p95 frame time 17ms 17ms -0%
vue-large-graph-idle: layout duration 0ms 0ms +0%
vue-large-graph-idle: style recalc duration 0ms 0ms +0%
vue-large-graph-idle: layout count 0 0 +0%
vue-large-graph-idle: style recalc count 0 0 +0%
vue-large-graph-idle: task duration 15623ms 15537ms -1%
vue-large-graph-idle: script duration 100ms 105ms +5%
vue-large-graph-idle: TBT 0ms 0ms +0%
vue-large-graph-idle: heap used 160.7 MB 162.0 MB +1%
vue-large-graph-idle: DOM nodes -8312 -8312 +0%
vue-large-graph-idle: event listeners -16388 -16388 +0%
vue-large-graph-pan: avg frame time 18ms 18ms -2%
vue-large-graph-pan: p95 frame time 17ms 17ms -0%
vue-large-graph-pan: layout duration 0ms 0ms +0%
vue-large-graph-pan: style recalc duration 16ms 16ms +2%
vue-large-graph-pan: layout count 0 0 +0%
vue-large-graph-pan: style recalc count 165 172 +5%
vue-large-graph-pan: task duration 19436ms 19304ms -1%
vue-large-graph-pan: script duration 396ms 383ms -3%
vue-large-graph-pan: TBT 43ms 62ms +44%
vue-large-graph-pan: heap used 171.5 MB 174.6 MB +2%
vue-large-graph-pan: DOM nodes -8312 -8312 +0%
vue-large-graph-pan: event listeners -16384 -16385 +0%
workflow-execution: avg frame time 17ms 17ms +0% z=0.6
workflow-execution: p95 frame time 17ms 17ms -0%
workflow-execution: layout duration 1ms 1ms -46% z=-5.8
workflow-execution: style recalc duration 22ms 18ms -20% z=-2.8
workflow-execution: layout count 4 3 -29% z=-4.5
workflow-execution: style recalc count 15 14 -10% z=-2.1
workflow-execution: task duration 117ms 103ms -12% z=-1.8
workflow-execution: script duration 9ms 7ms -22% z=-7.5
workflow-execution: TBT 0ms 0ms +0%
workflow-execution: heap used 66.4 MB 66.5 MB +0%
workflow-execution: DOM nodes 134 125 -7% z=-5.1
workflow-execution: event listeners 98 98 +0% z=10.6
Historical variance (last 15 runs)
Metric μ σ CV
canvas-idle: avg frame time 17ms 0ms 0.0%
canvas-idle: layout duration 0ms 0ms 0.0%
canvas-idle: style recalc duration 11ms 1ms 8.2%
canvas-idle: layout count 0 0 0.0%
canvas-idle: style recalc count 11 1 5.0%
canvas-idle: task duration 395ms 31ms 7.9%
canvas-idle: script duration 25ms 2ms 8.8%
canvas-idle: TBT 0ms 0ms 0.0%
canvas-idle: DOM nodes 23 1 5.6%
canvas-idle: event listeners 12 5 40.9%
canvas-mouse-sweep: avg frame time 17ms 0ms 0.0%
canvas-mouse-sweep: layout duration 4ms 0ms 5.4%
canvas-mouse-sweep: style recalc duration 43ms 3ms 7.4%
canvas-mouse-sweep: layout count 12 0 0.0%
canvas-mouse-sweep: style recalc count 79 2 3.0%
canvas-mouse-sweep: task duration 865ms 58ms 6.7%
canvas-mouse-sweep: script duration 136ms 6ms 4.8%
canvas-mouse-sweep: TBT 0ms 0ms 0.0%
canvas-mouse-sweep: DOM nodes 62 3 4.2%
canvas-mouse-sweep: event listeners 8 4 49.4%
canvas-zoom-sweep: avg frame time 17ms 0ms 0.0%
canvas-zoom-sweep: layout duration 1ms 0ms 7.0%
canvas-zoom-sweep: style recalc duration 19ms 2ms 8.0%
canvas-zoom-sweep: layout count 6 0 0.0%
canvas-zoom-sweep: style recalc count 31 0 1.5%
canvas-zoom-sweep: task duration 327ms 23ms 7.1%
canvas-zoom-sweep: script duration 27ms 3ms 11.1%
canvas-zoom-sweep: TBT 0ms 0ms 0.0%
canvas-zoom-sweep: DOM nodes 79 1 1.0%
canvas-zoom-sweep: event listeners 24 5 21.8%
dom-widget-clipping: avg frame time 17ms 0ms 0.0%
dom-widget-clipping: layout duration 0ms 0ms 0.0%
dom-widget-clipping: style recalc duration 10ms 1ms 8.0%
dom-widget-clipping: layout count 0 0 0.0%
dom-widget-clipping: style recalc count 13 0 3.8%
dom-widget-clipping: task duration 365ms 16ms 4.5%
dom-widget-clipping: script duration 68ms 3ms 4.8%
dom-widget-clipping: TBT 0ms 0ms 0.0%
dom-widget-clipping: DOM nodes 22 1 6.4%
dom-widget-clipping: event listeners 8 6 81.2%
large-graph-idle: avg frame time 17ms 0ms 0.0%
large-graph-idle: layout duration 0ms 0ms 0.0%
large-graph-idle: style recalc duration 12ms 1ms 8.6%
large-graph-idle: layout count 0 0 0.0%
large-graph-idle: style recalc count 12 0 2.7%
large-graph-idle: task duration 542ms 54ms 10.0%
large-graph-idle: script duration 102ms 11ms 10.3%
large-graph-idle: TBT 0ms 0ms 0.0%
large-graph-idle: DOM nodes 25 1 3.7%
large-graph-idle: event listeners 26 6 23.2%
large-graph-pan: avg frame time 17ms 0ms 0.0%
large-graph-pan: layout duration 0ms 0ms 0.0%
large-graph-pan: style recalc duration 17ms 1ms 4.6%
large-graph-pan: layout count 0 0 0.0%
large-graph-pan: style recalc count 70 1 0.9%
large-graph-pan: task duration 1082ms 43ms 4.0%
large-graph-pan: script duration 408ms 20ms 4.8%
large-graph-pan: TBT 0ms 0ms 0.0%
large-graph-pan: DOM nodes 19 2 8.7%
large-graph-pan: event listeners 5 1 16.8%
minimap-idle: avg frame time 17ms 0ms 0.0%
minimap-idle: layout duration 0ms 0ms 0.0%
minimap-idle: style recalc duration 10ms 1ms 8.6%
minimap-idle: layout count 0 0 0.0%
minimap-idle: style recalc count 10 1 7.1%
minimap-idle: task duration 527ms 47ms 9.0%
minimap-idle: script duration 98ms 10ms 10.1%
minimap-idle: TBT 0ms 0ms 0.0%
minimap-idle: DOM nodes 19 1 7.1%
minimap-idle: event listeners 5 1 14.4%
subgraph-dom-widget-clipping: avg frame time 17ms 0ms 0.0%
subgraph-dom-widget-clipping: layout duration 0ms 0ms 0.0%
subgraph-dom-widget-clipping: style recalc duration 13ms 1ms 7.4%
subgraph-dom-widget-clipping: layout count 0 0 0.0%
subgraph-dom-widget-clipping: style recalc count 48 1 1.2%
subgraph-dom-widget-clipping: task duration 378ms 18ms 4.9%
subgraph-dom-widget-clipping: script duration 128ms 6ms 4.9%
subgraph-dom-widget-clipping: TBT 0ms 0ms 0.0%
subgraph-dom-widget-clipping: DOM nodes 22 1 5.0%
subgraph-dom-widget-clipping: event listeners 16 6 36.0%
subgraph-idle: avg frame time 17ms 0ms 0.0%
subgraph-idle: layout duration 0ms 0ms 0.0%
subgraph-idle: style recalc duration 10ms 1ms 7.5%
subgraph-idle: layout count 0 0 0.0%
subgraph-idle: style recalc count 11 1 6.0%
subgraph-idle: task duration 370ms 31ms 8.5%
subgraph-idle: script duration 20ms 3ms 13.2%
subgraph-idle: TBT 0ms 0ms 0.0%
subgraph-idle: DOM nodes 22 1 6.9%
subgraph-idle: event listeners 10 7 64.5%
subgraph-mouse-sweep: avg frame time 17ms 0ms 0.0%
subgraph-mouse-sweep: layout duration 5ms 0ms 6.8%
subgraph-mouse-sweep: style recalc duration 42ms 3ms 7.8%
subgraph-mouse-sweep: layout count 16 0 0.0%
subgraph-mouse-sweep: style recalc count 80 2 2.4%
subgraph-mouse-sweep: task duration 766ms 69ms 9.0%
subgraph-mouse-sweep: script duration 101ms 7ms 6.5%
subgraph-mouse-sweep: TBT 0ms 0ms 0.0%
subgraph-mouse-sweep: DOM nodes 67 2 3.3%
subgraph-mouse-sweep: event listeners 8 4 52.6%
workflow-execution: avg frame time 17ms 0ms 0.0%
workflow-execution: layout duration 2ms 0ms 9.4%
workflow-execution: style recalc duration 24ms 2ms 9.1%
workflow-execution: layout count 5 1 11.0%
workflow-execution: style recalc count 18 2 11.5%
workflow-execution: task duration 123ms 11ms 8.8%
workflow-execution: script duration 29ms 3ms 10.2%
workflow-execution: TBT 0ms 0ms 0.0%
workflow-execution: DOM nodes 161 7 4.4%
workflow-execution: event listeners 52 4 8.4%
Trend (last 15 commits on main)
Metric Trend Dir Latest
canvas-idle: avg frame time ▆▃▆▁▆▃▆█▆▆▄▃▃▄▃ ➡️ 17ms
canvas-idle: p95 frame time ➡️ NaNms
canvas-idle: layout duration ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
canvas-idle: style recalc duration ▇▇▆▆▃█▄▃▄▃▇▄▁▆▇ ➡️ 11ms
canvas-idle: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0
canvas-idle: style recalc count █▃▅▂▅▆▃▁▂▁▂▅▆▅▆ ➡️ 12
canvas-idle: task duration ▃▃▃▆▂▃▃▅▆▂█▃▁▃▃ ➡️ 391ms
canvas-idle: script duration ▄▃▅▇▂▅▃▆▇▅█▄▁▅▆ ➡️ 27ms
canvas-idle: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
canvas-idle: heap used ➡️ NaN MB
canvas-idle: DOM nodes █▇▆▅▃▇▃▁▂▂▅▆▆▆▇ ➡️ 24
canvas-idle: event listeners ▅█▅▄▁▅▁▁▁▄▅▅▁▅▄ 📉 11
canvas-mouse-sweep: avg frame time ▆█▆▃▁▃▁▆▆▁▃▆▆▃▃ ➡️ 17ms
canvas-mouse-sweep: p95 frame time ➡️ NaNms
canvas-mouse-sweep: layout duration ▁▃▂▄▁▂▁▃▆▂█▇▆▄▃ ➡️ 4ms
canvas-mouse-sweep: style recalc duration ▄▄▂▄▁▂▃▃▅▄█▆▂▄▄ ➡️ 43ms
canvas-mouse-sweep: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 12
canvas-mouse-sweep: style recalc count █▅▄▃▂▂▁▄▄▅▆▅▂▇▄ ➡️ 79
canvas-mouse-sweep: task duration █▆▄▂▂▃▂▄▄▅█▆▁▆▄ ➡️ 868ms
canvas-mouse-sweep: script duration ▄▅▄▆▄▆▆▆▅▅█▆▁▅▆ ➡️ 139ms
canvas-mouse-sweep: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
canvas-mouse-sweep: heap used ➡️ NaN MB
canvas-mouse-sweep: DOM nodes █▅▃▃▁▂▂▃▂▄▆▅▃▅▅ ➡️ 64
canvas-mouse-sweep: event listeners █▁▁▁▁▁▇▁▁▁██▇▁█ 📈 13
canvas-zoom-sweep: avg frame time ▅▅█▄▅▁▁▁▅▁▁▅▄▅▁ ➡️ 17ms
canvas-zoom-sweep: p95 frame time ➡️ NaNms
canvas-zoom-sweep: layout duration ▆▅▅▄▁▁█▅▃▅▇▆▁▂▆ ➡️ 1ms
canvas-zoom-sweep: style recalc duration ▆▅▄▆▅▃█▆▇▅▇▄▁▃▅ ➡️ 20ms
canvas-zoom-sweep: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 6
canvas-zoom-sweep: style recalc count ▁▁▃▄▆▃▆█▄▄▆▁▆▁▆ ➡️ 32
canvas-zoom-sweep: task duration ▄▂▁▇▂▂▄▅▆▃█▄▁▁▅ ➡️ 338ms
canvas-zoom-sweep: script duration ▃▃▂▇▂▂▅▇▆▅█▄▁▂▆ ➡️ 30ms
canvas-zoom-sweep: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
canvas-zoom-sweep: heap used ➡️ NaN MB
canvas-zoom-sweep: DOM nodes ▄▃▁▅█▁▃▆▄▅▅▃▃▄▃ ➡️ 79
canvas-zoom-sweep: event listeners ▁▁▂▅█▂▁▅▁▅▅▄▁▅▁ ➡️ 19
dom-widget-clipping: avg frame time ▂▄▅▅▂▄█▇▅▇▇▅▅▁▇ ➡️ 17ms
dom-widget-clipping: p95 frame time ➡️ NaNms
dom-widget-clipping: layout duration ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
dom-widget-clipping: style recalc duration ▆▆▂▆▄▃██▄▁▆▇▆▃▅ ➡️ 10ms
dom-widget-clipping: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0
dom-widget-clipping: style recalc count ▇█▅█▅▄█▇▇▁▇▄▇▂▅ ➡️ 13
dom-widget-clipping: task duration ▃▃▁▅▄▃▅▆▅▂▇█▁▅▅ ➡️ 371ms
dom-widget-clipping: script duration ▅▄▄▆▆▅▇▇▆▃█▇▁▇▇ ➡️ 71ms
dom-widget-clipping: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
dom-widget-clipping: heap used ➡️ NaN MB
dom-widget-clipping: DOM nodes ▇▇▄▇▅▄█▇▅▁▅▄▇▃▄ ➡️ 21
dom-widget-clipping: event listeners ▅▅▅▅▁▅██▁▁▁▁█▁▁ 📉 2
large-graph-idle: avg frame time ▅▅▅▅▅▂▁▂▄▅▄▂▂▅█ ➡️ 17ms
large-graph-idle: p95 frame time ➡️ NaNms
large-graph-idle: layout duration ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
large-graph-idle: style recalc duration ▅▅▅▆▄▅▃▄▅▅▆█▁▄▆ ➡️ 13ms
large-graph-idle: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0
large-graph-idle: style recalc count █▆█▃▃▁▃▆▃▆▆▃▆██ ➡️ 12
large-graph-idle: task duration ▂▃▂▆▂▃▃▇▅▃██▁▂▅ ➡️ 569ms
large-graph-idle: script duration ▄▅▄▆▄▅▅▇▆▅█▆▁▃▆ ➡️ 110ms
large-graph-idle: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
large-graph-idle: heap used ➡️ NaN MB
large-graph-idle: DOM nodes ▆█▅▂▅▃▁▂▃▅▅▆▂▆▅ ➡️ 25
large-graph-idle: event listeners ███▇██▄▁▄▇▇█▂█▇ ➡️ 29
large-graph-pan: avg frame time ▆▃▃▆█▃▁█▆▆▆▆█▁▆ ➡️ 17ms
large-graph-pan: p95 frame time ➡️ NaNms
large-graph-pan: layout duration ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
large-graph-pan: style recalc duration ▃▂▄▄▁▅▂▂▁▄▄█▃▁▂ ➡️ 17ms
large-graph-pan: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0
large-graph-pan: style recalc count ▆▃█▂▃▂▂▂▁▇▅▃█▆▃ ➡️ 69
large-graph-pan: task duration ▄▃▄▆▄▄▄▆▄▄█▆▁▂▅ ➡️ 1100ms
large-graph-pan: script duration ▅▄▅▆▆▅▄▆▄▅█▄▁▄▅ ➡️ 413ms
large-graph-pan: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
large-graph-pan: heap used ➡️ NaN MB
large-graph-pan: DOM nodes ▅▃▆▂▄▁▃▁▁▅▁▂█▅▂ ➡️ 18
large-graph-pan: event listeners █▆█▁▁▆▁▁▃▆▁▃██▃ ➡️ 5
minimap-idle: avg frame time ▃▆▆▃█▁█▆▆▃▃▆█▆█ ➡️ 17ms
minimap-idle: p95 frame time ➡️ NaNms
minimap-idle: layout duration ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
minimap-idle: style recalc duration ▄█▁█▅▅█▅▅▃▅▁▁▄▆ ➡️ 10ms
minimap-idle: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0
minimap-idle: style recalc count ▃▅▂▄█▃▆▁▂▅▂▁▅▆▃ ➡️ 9
minimap-idle: task duration ▃▄▁▅▁▃▄▅▇▃█▅▁▁▅ ➡️ 547ms
minimap-idle: script duration ▄▆▃▇▃▅▆▆▇▅█▅▁▃▆ ➡️ 106ms
minimap-idle: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
minimap-idle: heap used ➡️ NaN MB
minimap-idle: DOM nodes ▃▅▂▄█▃▆▁▂▅▂▁▅▆▃ ➡️ 19
minimap-idle: event listeners ▃▃▆▁▁▁▃▁▁▆▁▃█▆▁ ➡️ 4
subgraph-dom-widget-clipping: avg frame time ▅▄▄▄▄▄█▄▄▄▃▁▆▃▃ ➡️ 17ms
subgraph-dom-widget-clipping: p95 frame time ➡️ NaNms
subgraph-dom-widget-clipping: layout duration ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
subgraph-dom-widget-clipping: style recalc duration ▂▄▃▅▅▃▂▅▇▃▄█▁▄▆ ➡️ 14ms
subgraph-dom-widget-clipping: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0
subgraph-dom-widget-clipping: style recalc count ▇█▆▃▆▃▁▆█▇▃▆▇█▅ ➡️ 48
subgraph-dom-widget-clipping: task duration ▂▃▃▆▅▅▂▅█▂▆█▁▂▇ ➡️ 398ms
subgraph-dom-widget-clipping: script duration ▃▃▃▄▅▅▂▄█▂▅▇▁▂▅ ➡️ 131ms
subgraph-dom-widget-clipping: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
subgraph-dom-widget-clipping: heap used ➡️ NaN MB
subgraph-dom-widget-clipping: DOM nodes ▅▇▅▂▅▂▁▅▅▅▁▇▅█▄ ➡️ 22
subgraph-dom-widget-clipping: event listeners ▅▅▅▂▅▁▅██▁▁█▅█▅ 📈 16
subgraph-idle: avg frame time ▆▆█▁▆▃▆▆▆▃▆▁▃▆█ ➡️ 17ms
subgraph-idle: p95 frame time ➡️ NaNms
subgraph-idle: layout duration ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
subgraph-idle: style recalc duration ▁▇▃▆▂▄▂▃▃▆▆▄▃▇█ ➡️ 12ms
subgraph-idle: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0
subgraph-idle: style recalc count ▃▆▃▃▂▅▁▂▁▆▃▃██▇ ➡️ 12
subgraph-idle: task duration ▁▃▁▇▁▁▃▆▅▂█▅▁▁▄ ➡️ 378ms
subgraph-idle: script duration ▁▃▂▇▁▂▃▇▆▂█▅▂▁▅ ➡️ 22ms
subgraph-idle: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
subgraph-idle: heap used ➡️ NaN MB
subgraph-idle: DOM nodes ▃▅▃▂▁▄▁▂▁▅▃▂▇█▇ ➡️ 24
subgraph-idle: event listeners ▁▅▁▁▁▁▁▁▁▅▄▁███ 📈 21
subgraph-mouse-sweep: avg frame time ▅▄▁▃▃▄▆▄▆▃▃█▁▃▃ ➡️ 17ms
subgraph-mouse-sweep: p95 frame time ➡️ NaNms
subgraph-mouse-sweep: layout duration ▁▄▄▄▃▃▅▅▅▂█▇▂▃▆ ➡️ 5ms
subgraph-mouse-sweep: style recalc duration ▃▂▄▅▂▃▄▅█▃█▆▁▂▅ ➡️ 43ms
subgraph-mouse-sweep: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 16
subgraph-mouse-sweep: style recalc count ▅▂▅▅▁▄▃▅█▅▆▄▂▄▅ ➡️ 81
subgraph-mouse-sweep: task duration ▃▂▄▅▂▄▄▅▇▄█▆▁▃▅ ➡️ 785ms
subgraph-mouse-sweep: script duration ▄▅▄▇▅▅▆▇▆▅██▁▄▆ ➡️ 105ms
subgraph-mouse-sweep: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
subgraph-mouse-sweep: heap used ➡️ NaN MB
subgraph-mouse-sweep: DOM nodes ▅▁▄▅▁▄▃▃█▅▅▄▂▅▃ ➡️ 66
subgraph-mouse-sweep: event listeners ▇▁▂▇▁▂▂▂█▇▂▂▇▇▂ 📈 5
workflow-execution: avg frame time ▆▆▆▄▆▆▃▄▁▄█▆▅▄▆ ➡️ 17ms
workflow-execution: p95 frame time ➡️ NaNms
workflow-execution: layout duration ▁▆▁▃▂▄▃▂▃▃▅█▄▂▅ ➡️ 2ms
workflow-execution: style recalc duration ▃▇▅▇▁▅▆▇█▁██▂▄▆ ➡️ 25ms
workflow-execution: layout count ▁█▂▃▂▃▃▁▃▃▄▃▂▃▂ ➡️ 5
workflow-execution: style recalc count ▃█▅▇▁▄▅▆▅▅▅▅▄▄▂ ➡️ 15
workflow-execution: task duration ▂▅▄▅▁▄▆▆▆▁▇█▁▃▃ ➡️ 120ms
workflow-execution: script duration ▄▃▄▄▃▅▄▅▆▂▇█▁▃▄ ➡️ 29ms
workflow-execution: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
workflow-execution: heap used ➡️ NaN MB
workflow-execution: DOM nodes ▂█▃▆▁▄▃▅▃█▃▃▄▃▁ ➡️ 152
workflow-execution: event listeners ▅███▁▅███▁██▅█▅ ➡️ 49
Raw data
{
  "timestamp": "2026-08-21T23:47:13.192Z",
  "gitSha": "a80a5e2b30283a4cb1f3f9dd791315c9ae1f1919",
  "branch": "backport-15239-to-core-1.51",
  "measurements": [
    {
      "name": "canvas-idle",
      "durationMs": 2009.2159999999808,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 6.916999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 436.485,
      "heapDeltaBytes": 5146760,
      "heapUsedBytes": 70477992,
      "domNodes": 18,
      "jsHeapTotalBytes": 24379392,
      "scriptDurationMs": 5.983999999999998,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "canvas-idle",
      "durationMs": 2023.36200000002,
      "styleRecalcs": 11,
      "styleRecalcDurationMs": 9.576,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 443.52900000000005,
      "heapDeltaBytes": 4897244,
      "heapUsedBytes": 70330236,
      "domNodes": 22,
      "jsHeapTotalBytes": 23855104,
      "scriptDurationMs": 6.307999999999999,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 2033.1300000000283,
      "styleRecalcs": 76,
      "styleRecalcDurationMs": 40.346,
      "layouts": 12,
      "layoutDurationMs": 3.614,
      "taskDurationMs": 984.7429999999999,
      "heapDeltaBytes": -16776652,
      "heapUsedBytes": 48501276,
      "domNodes": -280,
      "jsHeapTotalBytes": 22908928,
      "scriptDurationMs": 127.37599999999999,
      "eventListeners": -151,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1756.07100000002,
      "styleRecalcs": 73,
      "styleRecalcDurationMs": 32.159000000000006,
      "layouts": 12,
      "layoutDurationMs": 3.236,
      "taskDurationMs": 778.784,
      "heapDeltaBytes": 36964,
      "heapUsedBytes": 65282716,
      "domNodes": 54,
      "jsHeapTotalBytes": 24907776,
      "scriptDurationMs": 106.71700000000001,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1721.6530000000034,
      "styleRecalcs": 31,
      "styleRecalcDurationMs": 15.214,
      "layouts": 6,
      "layoutDurationMs": 0.52,
      "taskDurationMs": 366.865,
      "heapDeltaBytes": 8151364,
      "heapUsedBytes": 73419948,
      "domNodes": 77,
      "jsHeapTotalBytes": 24379392,
      "scriptDurationMs": 9.613,
      "eventListeners": 19,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1739.6019999999908,
      "styleRecalcs": 32,
      "styleRecalcDurationMs": 16.366,
      "layouts": 6,
      "layoutDurationMs": 0.678,
      "taskDurationMs": 358.156,
      "heapDeltaBytes": 7702732,
      "heapUsedBytes": 73221200,
      "domNodes": 79,
      "jsHeapTotalBytes": 24379392,
      "scriptDurationMs": 8.77,
      "eventListeners": 19,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 573.7670000000321,
      "styleRecalcs": 11,
      "styleRecalcDurationMs": 6.9639999999999995,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 353.33400000000006,
      "heapDeltaBytes": -11604268,
      "heapUsedBytes": 53772252,
      "domNodes": 18,
      "jsHeapTotalBytes": 25427968,
      "scriptDurationMs": 53.555,
      "eventListeners": 2,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 579.5679999999948,
      "styleRecalcs": 13,
      "styleRecalcDurationMs": 8.645999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 357.308,
      "heapDeltaBytes": -11502352,
      "heapUsedBytes": 54099660,
      "domNodes": 22,
      "jsHeapTotalBytes": 24641536,
      "scriptDurationMs": 52.443000000000005,
      "eventListeners": 2,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2012.7100000000269,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 6.931,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 573.0450000000001,
      "heapDeltaBytes": 12364136,
      "heapUsedBytes": 72182716,
      "domNodes": -282,
      "jsHeapTotalBytes": 2195456,
      "scriptDurationMs": 12.32,
      "eventListeners": -179,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2037.386999999967,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 7.177,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 572.517,
      "heapDeltaBytes": 12666744,
      "heapUsedBytes": 72424068,
      "domNodes": -280,
      "jsHeapTotalBytes": 2981888,
      "scriptDurationMs": 13.804999999999998,
      "eventListeners": -149,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2150.935000000004,
      "styleRecalcs": 68,
      "styleRecalcDurationMs": 12.132,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1122.299,
      "heapDeltaBytes": 985308,
      "heapUsedBytes": 62638068,
      "domNodes": -282,
      "jsHeapTotalBytes": 3960832,
      "scriptDurationMs": 314.35400000000004,
      "eventListeners": -147,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2152.6269999999386,
      "styleRecalcs": 68,
      "styleRecalcDurationMs": 11.890999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1133.898,
      "heapDeltaBytes": 1998328,
      "heapUsedBytes": 63155504,
      "domNodes": -282,
      "jsHeapTotalBytes": 3960832,
      "scriptDurationMs": 323.048,
      "eventListeners": -179,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3130.8400000000347,
      "styleRecalcs": 65,
      "styleRecalcDurationMs": 14.276999999999997,
      "layouts": 60,
      "layoutDurationMs": 7.043,
      "taskDurationMs": 1326.374,
      "heapDeltaBytes": -7120136,
      "heapUsedBytes": 55681748,
      "domNodes": -284,
      "jsHeapTotalBytes": 2719744,
      "scriptDurationMs": 368.224,
      "eventListeners": -153,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3132.0619999999053,
      "styleRecalcs": 65,
      "styleRecalcDurationMs": 13.854999999999999,
      "layouts": 60,
      "layoutDurationMs": 7.083000000000001,
      "taskDurationMs": 1330.64,
      "heapDeltaBytes": -6514764,
      "heapUsedBytes": 55760860,
      "domNodes": -286,
      "jsHeapTotalBytes": 2719744,
      "scriptDurationMs": 373.964,
      "eventListeners": -153,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "minimap-idle",
      "durationMs": 2021.3090000000307,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 7.123000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 578.057,
      "heapDeltaBytes": 8263620,
      "heapUsedBytes": 69330168,
      "domNodes": -282,
      "jsHeapTotalBytes": 3768320,
      "scriptDurationMs": 13.556,
      "eventListeners": -181,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "minimap-idle",
      "durationMs": 2009.4990000000053,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 6.483000000000002,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 569.88,
      "heapDeltaBytes": 9057440,
      "heapUsedBytes": 70108176,
      "domNodes": -284,
      "jsHeapTotalBytes": 2981888,
      "scriptDurationMs": 12.532000000000002,
      "eventListeners": -179,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 597.3719999999503,
      "styleRecalcs": 47,
      "styleRecalcDurationMs": 10.409,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 394.093,
      "heapDeltaBytes": -9949488,
      "heapUsedBytes": 55598432,
      "domNodes": 20,
      "jsHeapTotalBytes": 24379392,
      "scriptDurationMs": 117.511,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 581.5840000000208,
      "styleRecalcs": 47,
      "styleRecalcDurationMs": 10.557000000000002,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 399.9200000000001,
      "heapDeltaBytes": -9906068,
      "heapUsedBytes": 55551300,
      "domNodes": 20,
      "jsHeapTotalBytes": 24641536,
      "scriptDurationMs": 120.981,
      "eventListeners": 8,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2004.5450000000073,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 7.676,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 442.655,
      "heapDeltaBytes": 5385232,
      "heapUsedBytes": 70838252,
      "domNodes": 18,
      "jsHeapTotalBytes": 24379392,
      "scriptDurationMs": 5.4739999999999975,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2004.4789999999466,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 6.686000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 426.715,
      "heapDeltaBytes": 5586300,
      "heapUsedBytes": 71186228,
      "domNodes": 16,
      "jsHeapTotalBytes": 24117248,
      "scriptDurationMs": 5.657000000000001,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1674.8929999999973,
      "styleRecalcs": 75,
      "styleRecalcDurationMs": 32.2,
      "layouts": 16,
      "layoutDurationMs": 3.8580000000000005,
      "taskDurationMs": 729.375,
      "heapDeltaBytes": -3849016,
      "heapUsedBytes": 61548016,
      "domNodes": 60,
      "jsHeapTotalBytes": 24641536,
      "scriptDurationMs": 81.69699999999999,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1715.4580000000124,
      "styleRecalcs": 77,
      "styleRecalcDurationMs": 34.095,
      "layouts": 16,
      "layoutDurationMs": 4.016,
      "taskDurationMs": 746.905,
      "heapDeltaBytes": -3834060,
      "heapUsedBytes": 61542544,
      "domNodes": 63,
      "jsHeapTotalBytes": 24641536,
      "scriptDurationMs": 86.007,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-transition-enter",
      "durationMs": 1406.9049999999947,
      "styleRecalcs": 18,
      "styleRecalcDurationMs": 29.303999999999995,
      "layouts": 13,
      "layoutDurationMs": 12.218,
      "taskDurationMs": 895.095,
      "heapDeltaBytes": 22248080,
      "heapUsedBytes": 99467536,
      "domNodes": 13673,
      "jsHeapTotalBytes": 10485760,
      "scriptDurationMs": 15.647999999999996,
      "eventListeners": 2375,
      "totalBlockingTimeMs": 143,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8228.738000000021,
      "styleRecalcs": 250,
      "styleRecalcDurationMs": 34.754999999999995,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 3964.7769999999996,
      "heapDeltaBytes": 5325036,
      "heapUsedBytes": 65995680,
      "domNodes": -281,
      "jsHeapTotalBytes": 4485120,
      "scriptDurationMs": 988.8070000000001,
      "eventListeners": -163,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8254.370999999992,
      "styleRecalcs": 250,
      "styleRecalcDurationMs": 35.016999999999996,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 3994.964,
      "heapDeltaBytes": 14980640,
      "heapUsedBytes": 74662308,
      "domNodes": -283,
      "jsHeapTotalBytes": 3698688,
      "scriptDurationMs": 1004.5569999999999,
      "eventListeners": -133,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 16721.875999999953,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 15754.347999999998,
      "heapDeltaBytes": -25927144,
      "heapUsedBytes": 171286216,
      "domNodes": -8312,
      "jsHeapTotalBytes": -14098432,
      "scriptDurationMs": 108.519,
      "eventListeners": -16389,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.780000000000047,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 16369.872999999985,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 15319.860999999999,
      "heapDeltaBytes": -28714740,
      "heapUsedBytes": 168405948,
      "domNodes": -8312,
      "jsHeapTotalBytes": -10952704,
      "scriptDurationMs": 100.61099999999999,
      "eventListeners": -16387,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.776666666666642,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 19952.395999999964,
      "styleRecalcs": 171,
      "styleRecalcDurationMs": 16.52999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 19434.896,
      "heapDeltaBytes": -14234672,
      "heapUsedBytes": 183136996,
      "domNodes": -8312,
      "jsHeapTotalBytes": -12857344,
      "scriptDurationMs": 383.108,
      "eventListeners": -16385,
      "totalBlockingTimeMs": 96,
      "frameDurationMs": 17.779999999999927,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 19690.623000000072,
      "styleRecalcs": 173,
      "styleRecalcDurationMs": 15.34100000000002,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 19172.32,
      "heapDeltaBytes": -14416276,
      "heapUsedBytes": 183052108,
      "domNodes": -8312,
      "jsHeapTotalBytes": -13119488,
      "scriptDurationMs": 383.733,
      "eventListeners": -16385,
      "totalBlockingTimeMs": 28,
      "frameDurationMs": 17.223333333333358,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "workflow-execution",
      "durationMs": 449.30299999998624,
      "styleRecalcs": 13,
      "styleRecalcDurationMs": 16.341,
      "layouts": 2,
      "layoutDurationMs": 0.41200000000000003,
      "taskDurationMs": 99.178,
      "heapDeltaBytes": 4947720,
      "heapUsedBytes": 69633028,
      "domNodes": 126,
      "jsHeapTotalBytes": 4718592,
      "scriptDurationMs": 6.554999999999998,
      "eventListeners": 99,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "workflow-execution",
      "durationMs": 453.1660000000102,
      "styleRecalcs": 14,
      "styleRecalcDurationMs": 19.778,
      "layouts": 3,
      "layoutDurationMs": 1.015,
      "taskDurationMs": 106.877,
      "heapDeltaBytes": 4926880,
      "heapUsedBytes": 69722996,
      "domNodes": 123,
      "jsHeapTotalBytes": 5242880,
      "scriptDurationMs": 6.915999999999999,
      "eventListeners": 97,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    }
  ]
}

@github-actions github-actions Bot added the risk:R3 PR risk grade (advisory shadow check; grader-owned) label Aug 21, 2026
@github-actions
github-actions Bot requested a review from AustinMroz August 21, 2026 23:36
@codecov

codecov Bot commented Aug 21, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 70.00000% with 9 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
...components/dialog/content/setting/CreditsPanel.vue 18.18% 9 Missing ⚠️
@@              Coverage Diff              @@
##           core/1.51   #15588      +/-   ##
=============================================
- Coverage      81.63%   81.62%   -0.01%     
=============================================
  Files           1884     1884              
  Lines         107114   107109       -5     
  Branches       32644    33108     +464     
=============================================
- Hits           87443    87433      -10     
- Misses         19329    19333       +4     
- Partials         342      343       +1     
Flag Coverage Δ
unit 73.11% <70.00%> (-0.01%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
src/platform/settings/composables/useSettingUI.ts 86.82% <100.00%> (-1.21%) ⬇️
...nents/dialogs/settings/PlanCreditsPanelContent.vue 100.00% <100.00%> (ø)
...components/dialog/content/setting/CreditsPanel.vue 10.52% <18.18%> (+10.52%) ⬆️
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@comfy-pr-bot
comfy-pr-bot merged commit d5f44b8 into core/1.51 Aug 22, 2026
88 of 90 checks passed
@comfy-pr-bot
comfy-pr-bot deleted the backport-15239-to-core-1.51 branch August 22, 2026 01:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backport Backporting a PR onto a release candidate risk:R3 PR risk grade (advisory shadow check; grader-owned) size:L This PR changes 100-499 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants