Skip to content

[backport core/1.48] fix: preserve subgraph node size when editing or promoting widgets (FE-853) - #14491

Merged
comfy-pr-bot merged 1 commit into
core/1.48from
backport-14461-to-core-1.48
Jul 31, 2026
Merged

[backport core/1.48] fix: preserve subgraph node size when editing or promoting widgets (FE-853)#14491
comfy-pr-bot merged 1 commit into
core/1.48from
backport-14461-to-core-1.48

Conversation

@comfy-pr-bot

Copy link
Copy Markdown
Member

Backport of #14461 to core/1.48

Automatically created by backport workflow.

…E-853) (#14461)

*PR Created by the Glary-Bot Agent*

---

Single unified PR for FE-853 — the fix plus full regression coverage,
targeting `main`.

**Supersedes #14374, #14415 and #14418, all of which can be closed.**
This branch contains the fix originally proposed in #14374 (authorship
preserved) with the regression test from #14415 folded in, rebased onto
current `main`.

- Fixes
[FE-853](https://linear.app/comfyorg/issue/FE-853/bug-promotingunpromoting-a-widget-collapses-subgraph-to-minimum-size)

## The bug

Resize a subgraph node, then touch the widget-editing UI, and the node
snaps back to its computed minimum size — silently discarding the size
you set. Reported in #bug-dump via the "Edit Subgraph Widgets" button;
FE-853 tracks the same collapse when promoting or un-promoting a widget.

Measured against `main` before the fix:

| Step | Node size |
| --- | --- |
| After the user's resize drag | **506 × 339** |
| After clicking "Edit Subgraph Widgets" | **225 × 58** |
| After promoting an interior widget | **225 × 58** |

## The fix

Three call sites refreshed a subgraph host node's rendering with
`computeSize(node.size)`. `computeSize` returns the *minimum* size for
the node's content and those calls assigned it back, so every refresh
clamped the node down and destroyed any larger user-set size.

Replaced with `expandToFitContent()`, which grows the node when content
requires more room but never shrinks it:

- `src/components/rightSidePanel/subgraph/SubgraphEditor.vue` —
`refreshPromotedWidgetRendering()`, the path the "Edit Subgraph Widgets"
button hits
- `src/core/graph/subgraph/promotionUtils.ts` —
`refreshPromotedWidgetRendering()` (promote/demote) and
`promoteRecommendedWidgets()`

## Regression coverage

**`subgraphEditWidgetsResize.spec.ts`** (2 tests) — approaches the bug
from the user-reported entry point:
1. Clicking the "Edit Subgraph Widgets" selection-toolbox button, which
is what the screen recording shows
2. Promoting an interior widget, the trigger in FE-853's title

**`subgraphResizePreservation.spec.ts`** (6 tests) — promote,
un-promote, panel open, multi-widget sequences,
resize-still-works-after-promotion, and a nested-subgraph host.

**Unit tests** (60) across `promotionUtils.test.ts` and
`SubgraphEditor.test.ts`.

Sizes are read from the graph model rather than DOM bounding boxes, so
assertions aren't confounded by canvas zoom or by the canvas shrinking
when the side panel opens. The promotion test asserts `steps` actually
reached the host node before checking size, so it can't pass vacuously
if promotion silently became a no-op.

Supporting fixtures: `NodeOperationsHelper.growNodeByDrag()` (user-style
resize drag returning model-space size, beside the existing canvas-based
`resizeNode`) and `SubgraphEditor.openFromSelectionToolbox()`
(toolbox-button path, complementing the context-menu `ensureOpen()`).

## Verification

The tests were confirmed to detect the regression rather than pass
incidentally, by reverting the fix in place on this branch:

| `src` state | `subgraphEditWidgetsResize` |
| --- | --- |
| `expandToFitContent()` | **2 passed** |
| reverted to `computeSize(node.size)` | **2 failed** — `expected
506.0625, received 225` |

In the reverted run the failing assertion is the width check, not the
promotion guard.

Against current `main` after rebase: **8 e2e passed**, **60 unit
passed**, and `pnpm typecheck`, `pnpm typecheck:browser`, ESLint,
oxlint, oxfmt `--check` and `pnpm knip` all clean.

## Review history carried over

- @DrJKL (#14415): `growNodeByDrag` belongs outside `SubgraphHelper` →
it lives in `NodeOperationsHelper`; `SubgraphHelper` is unchanged apart
from #14374's own edit.
- CodeRabbit (#14415): promotion test could pass vacuously → added the
`getPromotedWidgetOrder()` guard. CodeRabbit approved #14415 and #14418.


## Screenshots

![Subgraph node manually resized to 506x339 with the selection toolbox
above
it](https://pub-1fd11710d4c8405b948c9edc4287a3f2.r2.dev/sessions/6ee0bca4776459e64f1aa10734090b387b188cbfe277699718f93639efeb8ea7/pr-images/1785469931216-f5c374cd-1f31-4814-8af7-8b324f6ab95f.png)

![Pre-fix behavior: after clicking Edit Subgraph Widgets the node
collapsed to
225x58](https://pub-1fd11710d4c8405b948c9edc4287a3f2.r2.dev/sessions/6ee0bca4776459e64f1aa10734090b387b188cbfe277699718f93639efeb8ea7/pr-images/1785469931526-e2eea7f3-aa47-455e-b4b0-9f99066bd46d.png)

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Glary-Bot <glary-bot@users.noreply.github.com>
@comfy-pr-bot comfy-pr-bot added the backport Backporting a PR onto a release candidate label Jul 31, 2026
@comfy-pr-bot
comfy-pr-bot enabled auto-merge (squash) July 31, 2026 17:19
@dosubot dosubot Bot added the size:M This PR changes 30-99 lines, ignoring generated files. label Jul 31, 2026
@dosubot

dosubot Bot commented Jul 31, 2026

Copy link
Copy Markdown

📄 Knowledge review

Dosu skipped reviewing this PR because your organization has used its 200 included credits for the month. Your usage will reset on 2026-08-01. To have Dosu review this PR before then, ask your organization admin to upgrade to a pro account.


Leave Feedback Ask Dosu about ComfyUI_frontend Add Dosu to your team

@github-actions

github-actions Bot commented Jul 31, 2026

Copy link
Copy Markdown

🎨 Storybook: ✅ Built — View Storybook

Details

⏰ Completed at: 07/31/2026, 05:21:43 PM UTC

Links

🎭 Playwright: ✅ 1761 passed, 0 failed · 1 flaky

📊 Browser Reports
  • chromium: View Report (✅ 1740 / ❌ 0 / ⚠️ 1 / ⏭️ 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.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 44.3 MB heap
canvas-mouse-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 56.3 MB heap
canvas-zoom-sweep: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 71.5 MB heap
dom-widget-clipping: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 53.1 MB heap
large-graph-idle: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 62.8 MB heap
large-graph-pan: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 59.0 MB heap
large-graph-zoom: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 58.1 MB heap
minimap-idle: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 64.4 MB heap
subgraph-dom-widget-clipping: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 53.5 MB heap
subgraph-idle: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 55.9 MB heap
subgraph-mouse-sweep: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 45.8 MB heap
subgraph-transition-enter: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 115ms TBT · 92.2 MB heap
viewport-pan-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 64.6 MB heap
vue-large-graph-idle: · 56.3 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 158.8 MB heap
vue-large-graph-pan: · 55.4 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 410ms TBT · 157.5 MB heap
workflow-execution: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 57.8 MB heap

⚠️ 5 regressions detected

Show regressions
Metric Baseline PR (median) Δ Sig
canvas-idle: task duration 406ms 586ms +44% ⚠️ z=6.1
large-graph-idle: task duration 551ms 658ms +19% ⚠️ z=2.1
large-graph-pan: task duration 952ms 1239ms +30% ⚠️ z=3.7
minimap-idle: task duration 573ms 656ms +15% ⚠️ z=2.7
subgraph-idle: task duration 366ms 473ms +29% ⚠️ z=3.3
All metrics
Metric Baseline PR (median) Δ Sig
canvas-idle: avg frame time 17ms 17ms +0% z=0.4
canvas-idle: p95 frame time 17ms 17ms +1%
canvas-idle: layout duration 0ms 0ms +0%
canvas-idle: style recalc duration 6ms 7ms +20% z=-3.7
canvas-idle: layout count 0 0 +0%
canvas-idle: style recalc count 11 9 -18% z=-3.8
canvas-idle: task duration 406ms 586ms +44% ⚠️ z=6.1
canvas-idle: script duration 13ms 19ms +39% z=-3.0
canvas-idle: TBT 0ms 0ms +0%
canvas-idle: heap used 56.0 MB 44.3 MB -21%
canvas-idle: DOM nodes 22 -275 -1348% z=-232.9
canvas-idle: event listeners 6 -148 -2567% z=-33.7
canvas-mouse-sweep: avg frame time 17ms 17ms +0% z=0.2
canvas-mouse-sweep: p95 frame time 17ms 17ms -0%
canvas-mouse-sweep: layout duration 3ms 4ms +31% z=0.9
canvas-mouse-sweep: style recalc duration 27ms 38ms +39% z=-1.5
canvas-mouse-sweep: layout count 12 12 +0%
canvas-mouse-sweep: style recalc count 74 75 +2% z=-1.6
canvas-mouse-sweep: task duration 748ms 847ms +13% z=-0.3
canvas-mouse-sweep: script duration 93ms 115ms +24% z=-3.1
canvas-mouse-sweep: TBT 0ms 0ms +0%
canvas-mouse-sweep: heap used 48.3 MB 56.3 MB +16%
canvas-mouse-sweep: DOM nodes -274 -108 -61% z=-65.7
canvas-mouse-sweep: event listeners -147 -72 -51% z=-19.3
canvas-zoom-sweep: avg frame time 17ms 17ms -0% z=0.5
canvas-zoom-sweep: p95 frame time 17ms 17ms -0%
canvas-zoom-sweep: layout duration 1ms 1ms +8% z=0.3
canvas-zoom-sweep: style recalc duration 13ms 17ms +24% z=-1.6
canvas-zoom-sweep: layout count 6 6 +0%
canvas-zoom-sweep: style recalc count 30 32 +7% z=1.6
canvas-zoom-sweep: task duration 327ms 369ms +13% z=1.8
canvas-zoom-sweep: script duration 16ms 18ms +13% z=-3.0
canvas-zoom-sweep: TBT 0ms 0ms +0%
canvas-zoom-sweep: heap used 71.6 MB 71.5 MB -0%
canvas-zoom-sweep: DOM nodes 78 79 +1% z=-0.9
canvas-zoom-sweep: event listeners 20 19 -5% z=-0.9
dom-widget-clipping: avg frame time 17ms 17ms -0% z=-0.2
dom-widget-clipping: p95 frame time 17ms 17ms +0%
dom-widget-clipping: layout duration 0ms 0ms +0%
dom-widget-clipping: style recalc duration 6ms 8ms +36% z=-2.1
dom-widget-clipping: layout count 0 0 +0%
dom-widget-clipping: style recalc count 13 12 -12% z=-3.2
dom-widget-clipping: task duration 283ms 371ms +31% z=0.4
dom-widget-clipping: script duration 39ms 54ms +39% z=-4.2
dom-widget-clipping: TBT 0ms 0ms +0%
dom-widget-clipping: heap used 52.9 MB 53.1 MB +0%
dom-widget-clipping: DOM nodes 22 19 -14% z=-2.2
dom-widget-clipping: event listeners 2 0 -100% variance too high
large-graph-idle: avg frame time 17ms 17ms +0% z=-0.6
large-graph-idle: p95 frame time 17ms 17ms +0%
large-graph-idle: layout duration 0ms 0ms +0%
large-graph-idle: style recalc duration 6ms 7ms +19% z=-5.4
large-graph-idle: layout count 0 0 +0%
large-graph-idle: style recalc count 9 8 -11% z=-11.5
large-graph-idle: task duration 551ms 658ms +19% ⚠️ z=2.1
large-graph-idle: script duration 68ms 90ms +33% z=-1.2
large-graph-idle: TBT 0ms 0ms +0%
large-graph-idle: heap used 63.1 MB 62.8 MB -0%
large-graph-idle: DOM nodes -275 -278 +1% z=-334.3
large-graph-idle: event listeners -144 -144 +0% z=-27.9
large-graph-pan: avg frame time 17ms 17ms -0% z=-0.8
large-graph-pan: p95 frame time 17ms 17ms -0%
large-graph-pan: layout duration 0ms 0ms +0%
large-graph-pan: style recalc duration 11ms 13ms +26% z=-4.9
large-graph-pan: layout count 0 0 +0%
large-graph-pan: style recalc count 69 68 -2% z=-3.2
large-graph-pan: task duration 952ms 1239ms +30% ⚠️ z=3.7
large-graph-pan: script duration 304ms 414ms +36% z=0.3
large-graph-pan: TBT 0ms 0ms +0%
large-graph-pan: heap used 61.5 MB 59.0 MB -4%
large-graph-pan: DOM nodes -275 -278 +1% z=-180.0
large-graph-pan: event listeners -144 -143 -1% z=-178.6
large-graph-zoom: avg frame time 17ms 17ms -0%
large-graph-zoom: p95 frame time 17ms 17ms +0%
large-graph-zoom: layout duration 8ms 8ms +2%
large-graph-zoom: style recalc duration 14ms 15ms +10%
large-graph-zoom: layout count 60 60 +0%
large-graph-zoom: style recalc count 66 65 -1%
large-graph-zoom: task duration 1232ms 1490ms +21%
large-graph-zoom: script duration 401ms 517ms +29%
large-graph-zoom: TBT 0ms 0ms +0%
large-graph-zoom: heap used 64.8 MB 58.1 MB -10%
large-graph-zoom: DOM nodes 13 -280 -2250%
large-graph-zoom: event listeners -70 -148 +111%
minimap-idle: avg frame time 17ms 17ms -0% z=-0.4
minimap-idle: p95 frame time 17ms 17ms +0%
minimap-idle: layout duration 0ms 0ms +0%
minimap-idle: style recalc duration 5ms 7ms +27% z=-3.2
minimap-idle: layout count 0 0 +0%
minimap-idle: style recalc count 9 9 +0% z=-1.6
minimap-idle: task duration 573ms 656ms +15% ⚠️ z=2.7
minimap-idle: script duration 77ms 93ms +21% z=-0.6
minimap-idle: TBT 0ms 0ms +0%
minimap-idle: heap used 64.8 MB 64.4 MB -1%
minimap-idle: DOM nodes -276 -275 -0% z=-215.1
minimap-idle: event listeners -143 -144 +1% z=-225.0
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 8ms 10ms +27% z=-3.0
subgraph-dom-widget-clipping: layout count 0 0 +0%
subgraph-dom-widget-clipping: style recalc count 48 46 -3% z=-3.3
subgraph-dom-widget-clipping: task duration 318ms 393ms +23% z=0.8
subgraph-dom-widget-clipping: script duration 93ms 121ms +31% z=-1.1
subgraph-dom-widget-clipping: TBT 0ms 0ms +0%
subgraph-dom-widget-clipping: heap used 53.4 MB 53.5 MB +0%
subgraph-dom-widget-clipping: DOM nodes 21 18 -14% z=-3.7
subgraph-dom-widget-clipping: event listeners 7 6 -14% z=-1.7
subgraph-idle: avg frame time 17ms 17ms +0% z=0.9
subgraph-idle: p95 frame time 17ms 17ms +0%
subgraph-idle: layout duration 0ms 0ms +0%
subgraph-idle: style recalc duration 6ms 8ms +37% z=-3.1
subgraph-idle: layout count 0 0 +0%
subgraph-idle: style recalc count 11 11 +0% z=-0.6
subgraph-idle: task duration 366ms 473ms +29% ⚠️ z=3.3
subgraph-idle: script duration 12ms 13ms +8% z=-2.7
subgraph-idle: TBT 0ms 0ms +0%
subgraph-idle: heap used 68.1 MB 55.9 MB -18%
subgraph-idle: DOM nodes 21 -125 -695% z=-98.2
subgraph-idle: event listeners 6 -72 -1300% variance too high
subgraph-mouse-sweep: avg frame time 17ms 17ms -0% z=-0.5
subgraph-mouse-sweep: p95 frame time 17ms 17ms -0%
subgraph-mouse-sweep: layout duration 3ms 5ms +45% z=0.2
subgraph-mouse-sweep: style recalc duration 27ms 36ms +34% z=-2.0
subgraph-mouse-sweep: layout count 16 16 +0%
subgraph-mouse-sweep: style recalc count 76 75 -1% z=-2.7
subgraph-mouse-sweep: task duration 602ms 797ms +32% z=0.4
subgraph-mouse-sweep: script duration 62ms 91ms +46% z=-1.6
subgraph-mouse-sweep: TBT 0ms 0ms +0%
subgraph-mouse-sweep: heap used 52.7 MB 45.8 MB -13%
subgraph-mouse-sweep: DOM nodes -104 -275 +164% z=-152.8
subgraph-mouse-sweep: event listeners -70 -148 +111% 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 8ms 11ms +32%
subgraph-transition-enter: style recalc duration 23ms 29ms +22%
subgraph-transition-enter: layout count 14 14 +0%
subgraph-transition-enter: style recalc count 18 18 +0%
subgraph-transition-enter: task duration 699ms 909ms +30%
subgraph-transition-enter: script duration 22ms 32ms +45%
subgraph-transition-enter: TBT 104ms 115ms +11%
subgraph-transition-enter: heap used 92.6 MB 92.2 MB -0%
subgraph-transition-enter: DOM nodes 13673 13673 +0%
subgraph-transition-enter: event listeners 2369 2371 +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 32ms 41ms +30%
viewport-pan-sweep: layout count 0 0 +0%
viewport-pan-sweep: style recalc count 250 250 +0%
viewport-pan-sweep: task duration 3561ms 4246ms +19%
viewport-pan-sweep: script duration 1017ms 1293ms +27%
viewport-pan-sweep: TBT 0ms 0ms +0%
viewport-pan-sweep: heap used 73.8 MB 64.6 MB -12%
viewport-pan-sweep: DOM nodes -275 -275 -0%
viewport-pan-sweep: event listeners -128 -128 +0%
vue-large-graph-idle: avg frame time 18ms 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 12566ms 17737ms +41%
vue-large-graph-idle: script duration 474ms 536ms +13%
vue-large-graph-idle: TBT 0ms 0ms +0%
vue-large-graph-idle: heap used 155.7 MB 158.8 MB +2%
vue-large-graph-idle: DOM nodes -8312 -8312 +0%
vue-large-graph-idle: event listeners -16388 -16387 -0%
vue-large-graph-pan: avg frame time 17ms 18ms +5%
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 14ms 20ms +41%
vue-large-graph-pan: layout count 0 0 +0%
vue-large-graph-pan: style recalc count 90 153 +70%
vue-large-graph-pan: task duration 15774ms 21639ms +37%
vue-large-graph-pan: script duration 730ms 886ms +21%
vue-large-graph-pan: TBT 14ms 410ms +2937%
vue-large-graph-pan: heap used 154.6 MB 157.5 MB +2%
vue-large-graph-pan: DOM nodes -8312 -8312 +0%
vue-large-graph-pan: event listeners -16387 -16381 -0%
workflow-execution: avg frame time 17ms 17ms -0% z=0.1
workflow-execution: p95 frame time 17ms 17ms -1%
workflow-execution: layout duration 1ms 1ms -44% z=-6.7
workflow-execution: style recalc duration 17ms 15ms -11% z=-4.1
workflow-execution: layout count 3 3 -17% z=-4.5
workflow-execution: style recalc count 17 10 -44% z=-4.0
workflow-execution: task duration 107ms 89ms -17% z=-3.2
workflow-execution: script duration 8ms 8ms -5% z=-7.2
workflow-execution: TBT 0ms 0ms +0%
workflow-execution: heap used 48.7 MB 57.8 MB +19%
workflow-execution: DOM nodes 139 117 -16% z=-6.2
workflow-execution: event listeners 66 49 -26% z=-0.7
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-07-31T17:31:33.817Z",
  "gitSha": "c977a5007041b422c496743d954c6f4476aa30f0",
  "branch": "backport-14461-to-core-1.48",
  "measurements": [
    {
      "name": "canvas-idle",
      "durationMs": 2202.150999999986,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 6.272000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 654.014,
      "heapDeltaBytes": -22609716,
      "heapUsedBytes": 45537776,
      "domNodes": -274,
      "jsHeapTotalBytes": 19656704,
      "scriptDurationMs": 21.546,
      "eventListeners": -148,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "canvas-idle",
      "durationMs": 2071.8070000000353,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 8.722000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 517.3180000000001,
      "heapDeltaBytes": -20471132,
      "heapUsedBytes": 47405196,
      "domNodes": -275,
      "jsHeapTotalBytes": 20180992,
      "scriptDurationMs": 15.757,
      "eventListeners": -148,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66999999999998,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1872.8449999999839,
      "styleRecalcs": 74,
      "styleRecalcDurationMs": 37.058,
      "layouts": 12,
      "layoutDurationMs": 3.676,
      "taskDurationMs": 874.2620000000001,
      "heapDeltaBytes": -16422032,
      "heapUsedBytes": 51471708,
      "domNodes": -274,
      "jsHeapTotalBytes": 21229568,
      "scriptDurationMs": 115.345,
      "eventListeners": -148,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1843.9789999999903,
      "styleRecalcs": 76,
      "styleRecalcDurationMs": 38.879999999999995,
      "layouts": 12,
      "layoutDurationMs": 3.8820000000000006,
      "taskDurationMs": 818.867,
      "heapDeltaBytes": -1442468,
      "heapUsedBytes": 66493132,
      "domNodes": 59,
      "jsHeapTotalBytes": 21102592,
      "scriptDurationMs": 115.06899999999999,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66999999999998,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1754.3249999999944,
      "styleRecalcs": 32,
      "styleRecalcDurationMs": 17.043,
      "layouts": 6,
      "layoutDurationMs": 0.745,
      "taskDurationMs": 371.41,
      "heapDeltaBytes": 7285096,
      "heapUsedBytes": 75188496,
      "domNodes": 78,
      "jsHeapTotalBytes": 20578304,
      "scriptDurationMs": 18.28,
      "eventListeners": 19,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1719.6290000000545,
      "styleRecalcs": 32,
      "styleRecalcDurationMs": 16.39,
      "layouts": 6,
      "layoutDurationMs": 0.5710000000000001,
      "taskDurationMs": 365.704,
      "heapDeltaBytes": 7065032,
      "heapUsedBytes": 74787796,
      "domNodes": 79,
      "jsHeapTotalBytes": 20054016,
      "scriptDurationMs": 18.073000000000004,
      "eventListeners": 19,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 561.505000000011,
      "styleRecalcs": 11,
      "styleRecalcDurationMs": 7.531999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 363.168,
      "heapDeltaBytes": -12031092,
      "heapUsedBytes": 55896736,
      "domNodes": 18,
      "jsHeapTotalBytes": 21102592,
      "scriptDurationMs": 53.459999999999994,
      "eventListeners": 0,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 579.2720000000031,
      "styleRecalcs": 12,
      "styleRecalcDurationMs": 8.848999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 379.406,
      "heapDeltaBytes": -12317028,
      "heapUsedBytes": 55527500,
      "domNodes": 20,
      "jsHeapTotalBytes": 20578304,
      "scriptDurationMs": 55.079,
      "eventListeners": 0,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2011.2680000000296,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 6.762999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 658.645,
      "heapDeltaBytes": 6728360,
      "heapUsedBytes": 65840628,
      "domNodes": -278,
      "jsHeapTotalBytes": 4521984,
      "scriptDurationMs": 90.167,
      "eventListeners": -144,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2033.2799999999907,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 6.391999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 657.038,
      "heapDeltaBytes": 7193812,
      "heapUsedBytes": 65905668,
      "domNodes": -277,
      "jsHeapTotalBytes": 4521984,
      "scriptDurationMs": 90.54399999999998,
      "eventListeners": -144,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2137.832000000003,
      "styleRecalcs": 67,
      "styleRecalcDurationMs": 13.191,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1243.916,
      "heapDeltaBytes": 2309700,
      "heapUsedBytes": 62624660,
      "domNodes": -281,
      "jsHeapTotalBytes": 5513216,
      "scriptDurationMs": 426.572,
      "eventListeners": -142,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2176.4360000000806,
      "styleRecalcs": 68,
      "styleRecalcDurationMs": 13.621999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1234.53,
      "heapDeltaBytes": 354404,
      "heapUsedBytes": 61090148,
      "domNodes": -275,
      "jsHeapTotalBytes": 4726784,
      "scriptDurationMs": 400.71399999999994,
      "eventListeners": -144,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3229.770999999971,
      "styleRecalcs": 65,
      "styleRecalcDurationMs": 14.992000000000003,
      "layouts": 60,
      "layoutDurationMs": 8,
      "taskDurationMs": 1488.0279999999998,
      "heapDeltaBytes": 745012,
      "heapUsedBytes": 62629072,
      "domNodes": -280,
      "jsHeapTotalBytes": 7143424,
      "scriptDurationMs": 518.489,
      "eventListeners": -148,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3196.187000000009,
      "styleRecalcs": 65,
      "styleRecalcDurationMs": 15.395,
      "layouts": 60,
      "layoutDurationMs": 7.866000000000001,
      "taskDurationMs": 1491.257,
      "heapDeltaBytes": -2088712,
      "heapUsedBytes": 59257924,
      "domNodes": -279,
      "jsHeapTotalBytes": 7405568,
      "scriptDurationMs": 516.482,
      "eventListeners": -148,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "minimap-idle",
      "durationMs": 2033.5380000000214,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 6.2810000000000015,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 648.417,
      "heapDeltaBytes": 7109640,
      "heapUsedBytes": 67872444,
      "domNodes": -276,
      "jsHeapTotalBytes": 4784128,
      "scriptDurationMs": 90.67499999999998,
      "eventListeners": -144,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "minimap-idle",
      "durationMs": 2037.1690000000626,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 7.514,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 664.1189999999999,
      "heapDeltaBytes": 6863988,
      "heapUsedBytes": 67108388,
      "domNodes": -274,
      "jsHeapTotalBytes": 4259840,
      "scriptDurationMs": 94.644,
      "eventListeners": -144,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 578.7250000000199,
      "styleRecalcs": 46,
      "styleRecalcDurationMs": 10.033,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 396.8440000000001,
      "heapDeltaBytes": -11512172,
      "heapUsedBytes": 56442080,
      "domNodes": 18,
      "jsHeapTotalBytes": 21364736,
      "scriptDurationMs": 123.02200000000002,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 581.0359999999264,
      "styleRecalcs": 46,
      "styleRecalcDurationMs": 9.665,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 388.728,
      "heapDeltaBytes": -12073544,
      "heapUsedBytes": 55829952,
      "domNodes": 18,
      "jsHeapTotalBytes": 21626880,
      "scriptDurationMs": 119.31000000000002,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2009.4269999999597,
      "styleRecalcs": 11,
      "styleRecalcDurationMs": 8.491,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 451.665,
      "heapDeltaBytes": 3525016,
      "heapUsedBytes": 71474724,
      "domNodes": 22,
      "jsHeapTotalBytes": 20840448,
      "scriptDurationMs": 12.721000000000002,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2026.9260000000031,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 7.457000000000002,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 494.813,
      "heapDeltaBytes": -22332128,
      "heapUsedBytes": 45696940,
      "domNodes": -272,
      "jsHeapTotalBytes": 20443136,
      "scriptDurationMs": 13.438,
      "eventListeners": -148,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1704.5439999999985,
      "styleRecalcs": 75,
      "styleRecalcDurationMs": 35.929,
      "layouts": 16,
      "layoutDurationMs": 4.677,
      "taskDurationMs": 802.3180000000001,
      "heapDeltaBytes": -18963456,
      "heapUsedBytes": 48951896,
      "domNodes": -275,
      "jsHeapTotalBytes": 21229568,
      "scriptDurationMs": 91.37299999999999,
      "eventListeners": -148,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1694.7830000000295,
      "styleRecalcs": 75,
      "styleRecalcDurationMs": 35.786,
      "layouts": 16,
      "layoutDurationMs": 4.869,
      "taskDurationMs": 790.797,
      "heapDeltaBytes": -20682376,
      "heapUsedBytes": 47181332,
      "domNodes": -274,
      "jsHeapTotalBytes": 20967424,
      "scriptDurationMs": 89.83400000000002,
      "eventListeners": -148,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-transition-enter",
      "durationMs": 1401.1649999999918,
      "styleRecalcs": 18,
      "styleRecalcDurationMs": 28.595999999999997,
      "layouts": 14,
      "layoutDurationMs": 11.158000000000001,
      "taskDurationMs": 908.6809999999998,
      "heapDeltaBytes": 29134312,
      "heapUsedBytes": 96695900,
      "domNodes": 13673,
      "jsHeapTotalBytes": 16252928,
      "scriptDurationMs": 31.827999999999996,
      "eventListeners": 2371,
      "totalBlockingTimeMs": 115,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8233.096999999987,
      "styleRecalcs": 250,
      "styleRecalcDurationMs": 41.044,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 4231.9710000000005,
      "heapDeltaBytes": 7728632,
      "heapUsedBytes": 66762048,
      "domNodes": -275,
      "jsHeapTotalBytes": 8134656,
      "scriptDurationMs": 1283.116,
      "eventListeners": -128,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8185.15699999989,
      "styleRecalcs": 250,
      "styleRecalcDurationMs": 41.041000000000004,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 4260.847,
      "heapDeltaBytes": 10296328,
      "heapUsedBytes": 68729732,
      "domNodes": -274,
      "jsHeapTotalBytes": 6299648,
      "scriptDurationMs": 1303.1819999999998,
      "eventListeners": -128,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 17919.038,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 17888.64,
      "heapDeltaBytes": -52128004,
      "heapUsedBytes": 165897696,
      "domNodes": -8312,
      "jsHeapTotalBytes": -11993088,
      "scriptDurationMs": 551.96,
      "eventListeners": -16387,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.776666666666642,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 17599.559999999998,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 17586.208,
      "heapDeltaBytes": -56667116,
      "heapUsedBytes": 167155736,
      "domNodes": -8312,
      "jsHeapTotalBytes": -12521472,
      "scriptDurationMs": 519.7910000000002,
      "eventListeners": -16387,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.77333333333336,
      "p95FrameDurationMs": 16.80000000000291
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 21518.24399999998,
      "styleRecalcs": 147,
      "styleRecalcDurationMs": 19.18700000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 21484.117,
      "heapDeltaBytes": -55196660,
      "heapUsedBytes": 153727536,
      "domNodes": -8312,
      "jsHeapTotalBytes": -16191488,
      "scriptDurationMs": 900.807,
      "eventListeners": -16381,
      "totalBlockingTimeMs": 325,
      "frameDurationMs": 18.330000000000048,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 21818.607000000044,
      "styleRecalcs": 158,
      "styleRecalcDurationMs": 21.042999999999978,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 21794.298000000003,
      "heapDeltaBytes": -47724236,
      "heapUsedBytes": 176639164,
      "domNodes": -8312,
      "jsHeapTotalBytes": -15749120,
      "scriptDurationMs": 871.6859999999999,
      "eventListeners": -16381,
      "totalBlockingTimeMs": 495,
      "frameDurationMs": 17.776666666666642,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "workflow-execution",
      "durationMs": 103.21199999998498,
      "styleRecalcs": 7,
      "styleRecalcDurationMs": 13.443,
      "layouts": 3,
      "layoutDurationMs": 0.7110000000000001,
      "taskDurationMs": 75.452,
      "heapDeltaBytes": 3202044,
      "heapUsedBytes": 70194332,
      "domNodes": 116,
      "jsHeapTotalBytes": 3145728,
      "scriptDurationMs": 6.264999999999998,
      "eventListeners": 33,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "workflow-execution",
      "durationMs": 459.53800000006595,
      "styleRecalcs": 12,
      "styleRecalcDurationMs": 16.871,
      "layouts": 2,
      "layoutDurationMs": 0.44299999999999984,
      "taskDurationMs": 102.168,
      "heapDeltaBytes": -16119540,
      "heapUsedBytes": 51050344,
      "domNodes": 117,
      "jsHeapTotalBytes": 7471104,
      "scriptDurationMs": 9.528,
      "eventListeners": 65,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    }
  ]
}

@codecov

codecov Bot commented Jul 31, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

@@              Coverage Diff              @@
##           core/1.48   #14491      +/-   ##
=============================================
- Coverage      79.31%   79.31%   -0.01%     
=============================================
  Files           1746     1746              
  Lines          99316    99314       -2     
  Branches       31834    32579     +745     
=============================================
- Hits           78776    78774       -2     
  Misses         20138    20138              
  Partials         402      402              
Flag Coverage Δ
unit 69.13% <100.00%> (-0.01%) ⬇️

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

Files with missing lines Coverage Δ
...ponents/rightSidePanel/subgraph/SubgraphEditor.vue 86.27% <100.00%> (-0.14%) ⬇️
src/core/graph/subgraph/promotionUtils.ts 89.84% <100.00%> (ø)
🚀 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.

@dante01yoon dante01yoon assigned DrJKL and unassigned christian-byrne Jul 31, 2026
@comfy-pr-bot
comfy-pr-bot merged commit f5aeb84 into core/1.48 Jul 31, 2026
100 of 102 checks passed
@comfy-pr-bot
comfy-pr-bot deleted the backport-14461-to-core-1.48 branch July 31, 2026 19:59
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 size:M This PR changes 30-99 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants