Skip to content

[backport core/1.48] fix(billing): resume a pending top-up as a top-up, not a subscription - #14722

Merged
comfy-pr-bot merged 1 commit into
core/1.48from
backport-14715-to-core-1.48
Aug 4, 2026
Merged

[backport core/1.48] fix(billing): resume a pending top-up as a top-up, not a subscription#14722
comfy-pr-bot merged 1 commit into
core/1.48from
backport-14715-to-core-1.48

Conversation

@comfy-pr-bot

Copy link
Copy Markdown
Member

Backport of #14715 to core/1.48

Automatically created by backport workflow.

…#14715)

## Description

Billing status can return an in-flight billing operation
(`pending_billing_op_id` + `action_url`) so a client that lost its local
reference can resume the payment — a reload, a cleared browser, a
different device. The recovery path in `useWorkspaceBilling` assumed
that operation was always a subscription and passed a hardcoded
`'subscription'`.

That assumption is a latent bug regardless of what the server sends
today: any non-subscription operation surfaced there takes the wrong
branch throughout.

- `isSettingUp` turns true, so `SubscriptionPanelContentWorkspace`
replaces the whole panel with a "setting up your subscription" spinner —
hiding the user's actual plan for as long as the operation is pending
- `topupActionOperation` requires `type === 'topup'`, so the top-up
dialog's own recovery prompt never matches
- `handleSuccess` runs `reconcileSubscriptionSuccess()` instead of
`fetchStatus()` + `fetchBalance()`, so credits just purchased never
appear
- the toast and telemetry describe a subscription checkout

Uses the operation type when the API reports one, falling back to
`'subscription'` when it does not — so this is inert against a server
that never sends the field, and correct the moment one does.

**Status:** the server side does not populate a top-up here yet. This is
the client half, landing first because it is safe in isolation; without
it, a server that starts reporting top-ups would drive the wrong UI.
Treat it as removing a hardcoded assumption, not as shipping a
user-visible fix on its own.

## Checklist

- [x] Test added — `recovers a pending top-up as a top-up, not a
subscription`, confirmed to fail without the fix
- [x] `pnpm test:unit` (72 passed in the touched suite), `pnpm
typecheck`, `pnpm lint`, `pnpm format`

## Follow-up (not in this PR)

`billingOperationStore` gives a top-up 120s to discover an
authentication URL (`TIMEOUT_MS`) while a subscription gets 5min
(`SUBSCRIPTION_ACTION_DISCOVERY_TIMEOUT_MS`). Only bites when the
payment page is slow to appear, so it is kept separate.
@comfy-pr-bot comfy-pr-bot added the backport Backporting a PR onto a release candidate label Aug 4, 2026
@comfy-pr-bot
comfy-pr-bot enabled auto-merge (squash) August 4, 2026 23:37
@dosubot dosubot Bot added the size:XS This PR changes 0-9 lines, ignoring generated files. label Aug 4, 2026
@dosubot

dosubot Bot commented Aug 4, 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-09-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 Aug 4, 2026

Copy link
Copy Markdown

🎭 Playwright: ✅ 1765 passed, 0 failed · 2 flaky

📊 Browser Reports
  • chromium: View Report (✅ 1744 / ❌ 0 / ⚠️ 2 / ⏭️ 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)

🎨 Storybook: ✅ Built — View Storybook

Details

⏰ Completed at: 08/04/2026, 11:39:20 PM UTC

Links

📦 Bundle Size

⏳ Size data collection in progress…

⚡ Performance Report

canvas-idle: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 56.2 MB heap
canvas-mouse-sweep: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 49.2 MB heap
canvas-zoom-sweep: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 71.6 MB heap
dom-widget-clipping: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 52.9 MB heap
large-graph-idle: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 63.3 MB heap
large-graph-pan: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 61.0 MB heap
large-graph-zoom: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 57.1 MB heap
minimap-idle: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 64.8 MB heap
subgraph-dom-widget-clipping: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 53.3 MB heap
subgraph-idle: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 56.4 MB heap
subgraph-mouse-sweep: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 45.6 MB heap
subgraph-transition-enter: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 118ms TBT · 93.7 MB heap
viewport-pan-sweep: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 71.6 MB heap
vue-large-graph-idle: · 57.1 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 160.5 MB heap
vue-large-graph-pan: · 56.2 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 292ms TBT · 152.7 MB heap
workflow-execution: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 66.8 MB heap

⚠️ 6 regressions detected

Show regressions
Metric Baseline PR (median) Δ Sig
canvas-idle: task duration 560ms 475ms -15% ⚠️ z=2.6
canvas-mouse-sweep: task duration 939ms 988ms +5% ⚠️ z=2.1
large-graph-idle: task duration 779ms 664ms -15% ⚠️ z=2.3
large-graph-pan: task duration 1326ms 1236ms -7% ⚠️ z=3.6
minimap-idle: task duration 705ms 658ms -7% ⚠️ z=2.8
subgraph-idle: task duration 474ms 483ms +2% ⚠️ z=3.6
All metrics
Metric Baseline PR (median) Δ Sig
canvas-idle: avg frame time 17ms 17ms +0% z=-0.5
canvas-idle: p95 frame time 17ms 17ms -0%
canvas-idle: layout duration 0ms 0ms +0%
canvas-idle: style recalc duration 7ms 8ms +14% z=-3.1
canvas-idle: layout count 0 0 +0%
canvas-idle: style recalc count 9 10 +18% z=-2.1
canvas-idle: task duration 560ms 475ms -15% ⚠️ z=2.6
canvas-idle: script duration 23ms 15ms -35% z=-4.6
canvas-idle: TBT 0ms 0ms +0%
canvas-idle: heap used 56.2 MB 56.2 MB +0%
canvas-idle: DOM nodes -129 -125 -3% z=-115.7
canvas-idle: event listeners -71 -72 +1% z=-17.7
canvas-mouse-sweep: avg frame time 17ms 17ms +0% z=-0.9
canvas-mouse-sweep: p95 frame time 17ms 17ms -0%
canvas-mouse-sweep: layout duration 4ms 4ms -1% z=0.0
canvas-mouse-sweep: style recalc duration 42ms 40ms -4% z=-0.8
canvas-mouse-sweep: layout count 12 12 +0%
canvas-mouse-sweep: style recalc count 77 76 -2% z=-1.4
canvas-mouse-sweep: task duration 939ms 988ms +5% ⚠️ z=2.1
canvas-mouse-sweep: script duration 124ms 128ms +4% z=-1.1
canvas-mouse-sweep: TBT 0ms 0ms +0%
canvas-mouse-sweep: heap used 46.7 MB 49.2 MB +5%
canvas-mouse-sweep: DOM nodes -106 -274 +158% z=-130.0
canvas-mouse-sweep: event listeners -72 -148 +106% z=-37.5
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 -20% z=-0.6
canvas-zoom-sweep: style recalc duration 24ms 16ms -35% z=-2.4
canvas-zoom-sweep: layout count 6 6 +0%
canvas-zoom-sweep: style recalc count 31 31 +2% z=-0.6
canvas-zoom-sweep: task duration 409ms 362ms -11% z=1.5
canvas-zoom-sweep: script duration 23ms 17ms -25% z=-3.4
canvas-zoom-sweep: TBT 0ms 0ms +0%
canvas-zoom-sweep: heap used 71.7 MB 71.6 MB -0%
canvas-zoom-sweep: DOM nodes 76 77 +1% z=-2.8
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 +12% z=-2.2
dom-widget-clipping: layout count 0 0 +0%
dom-widget-clipping: style recalc count 11 13 +19% z=-1.2
dom-widget-clipping: task duration 382ms 386ms +1% z=1.3
dom-widget-clipping: script duration 58ms 58ms -1% z=-3.2
dom-widget-clipping: TBT 0ms 0ms +0%
dom-widget-clipping: heap used 53.3 MB 52.9 MB -1%
dom-widget-clipping: DOM nodes 17 21 +24% z=-0.8
dom-widget-clipping: event listeners 1 1 +0% 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 10ms 7ms -30% z=-5.3
large-graph-idle: layout count 0 0 +0%
large-graph-idle: style recalc count 9 8 -6% z=-11.5
large-graph-idle: task duration 779ms 664ms -15% ⚠️ z=2.3
large-graph-idle: script duration 115ms 94ms -18% z=-0.8
large-graph-idle: TBT 0ms 0ms +0%
large-graph-idle: heap used 63.2 MB 63.3 MB +0%
large-graph-idle: DOM nodes -278 -276 -1% z=-332.7
large-graph-idle: event listeners -143 -142 -1% z=-27.6
large-graph-pan: avg frame time 17ms 17ms +0% z=0.3
large-graph-pan: p95 frame time 17ms 17ms +1%
large-graph-pan: layout duration 0ms 0ms +0%
large-graph-pan: style recalc duration 15ms 15ms +5% z=-2.4
large-graph-pan: layout count 0 0 +0%
large-graph-pan: style recalc count 68 69 +1% z=-0.9
large-graph-pan: task duration 1326ms 1236ms -7% ⚠️ z=3.6
large-graph-pan: script duration 428ms 408ms -5% z=0.0
large-graph-pan: TBT 0ms 0ms +0%
large-graph-pan: heap used 62.6 MB 61.0 MB -3%
large-graph-pan: DOM nodes -278 -276 -1% z=-178.8
large-graph-pan: event listeners -143 -143 +0% 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 -5%
large-graph-zoom: style recalc duration 16ms 15ms -6%
large-graph-zoom: layout count 60 60 +0%
large-graph-zoom: style recalc count 65 65 +0%
large-graph-zoom: task duration 1493ms 1476ms -1%
large-graph-zoom: script duration 532ms 515ms -3%
large-graph-zoom: TBT 0ms 0ms +0%
large-graph-zoom: heap used 81.0 MB 57.1 MB -29%
large-graph-zoom: DOM nodes 11 -283 -2673%
large-graph-zoom: event listeners 8 -148 -1950%
minimap-idle: avg frame time 17ms 17ms +0% z=0.7
minimap-idle: p95 frame time 17ms 17ms -0%
minimap-idle: layout duration 0ms 0ms +0%
minimap-idle: style recalc duration 7ms 6ms -9% z=-3.9
minimap-idle: layout count 0 0 +0%
minimap-idle: style recalc count 8 8 +0% z=-2.3
minimap-idle: task duration 705ms 658ms -7% ⚠️ z=2.8
minimap-idle: script duration 106ms 91ms -14% z=-0.7
minimap-idle: TBT 0ms 0ms +0%
minimap-idle: heap used 64.8 MB 64.8 MB -0%
minimap-idle: DOM nodes -277 -276 -1% z=-215.4
minimap-idle: event listeners -143 -143 +0% z=-223.5
subgraph-dom-widget-clipping: avg frame time 17ms 17ms +0% z=-0.4
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 -8% z=-2.8
subgraph-dom-widget-clipping: layout count 0 0 +0%
subgraph-dom-widget-clipping: style recalc count 48 47 -1% z=-1.6
subgraph-dom-widget-clipping: task duration 401ms 394ms -2% z=0.9
subgraph-dom-widget-clipping: script duration 122ms 121ms -1% z=-1.2
subgraph-dom-widget-clipping: TBT 0ms 0ms +0%
subgraph-dom-widget-clipping: heap used 53.6 MB 53.3 MB -1%
subgraph-dom-widget-clipping: DOM nodes 21 20 -5% z=-1.9
subgraph-dom-widget-clipping: event listeners 7 6 -14% z=-1.7
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 8ms 7ms -8% z=-4.2
subgraph-idle: layout count 0 0 +0%
subgraph-idle: style recalc count 9 10 +6% z=-2.1
subgraph-idle: task duration 474ms 483ms +2% ⚠️ z=3.6
subgraph-idle: script duration 16ms 12ms -21% z=-3.0
subgraph-idle: TBT 0ms 0ms +0%
subgraph-idle: heap used 68.4 MB 56.4 MB -18%
subgraph-idle: DOM nodes 18 -127 -806% z=-99.5
subgraph-idle: event listeners 4 -72 -1900% 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 5ms 4ms -20% z=-1.6
subgraph-mouse-sweep: style recalc duration 42ms 34ms -19% z=-2.4
subgraph-mouse-sweep: layout count 16 16 +0%
subgraph-mouse-sweep: style recalc count 78 77 -1% z=-1.6
subgraph-mouse-sweep: task duration 868ms 772ms -11% z=0.1
subgraph-mouse-sweep: script duration 96ms 84ms -13% z=-2.5
subgraph-mouse-sweep: TBT 0ms 0ms +0%
subgraph-mouse-sweep: heap used 45.3 MB 45.6 MB +1%
subgraph-mouse-sweep: DOM nodes -272 -272 +0% z=-151.7
subgraph-mouse-sweep: event listeners -148 -148 +0% variance too high
subgraph-transition-enter: avg frame time 17ms 17ms +0%
subgraph-transition-enter: p95 frame time 17ms 17ms +0%
subgraph-transition-enter: layout duration 12ms 11ms -6%
subgraph-transition-enter: style recalc duration 31ms 29ms -6%
subgraph-transition-enter: layout count 15 14 -7%
subgraph-transition-enter: style recalc count 19 18 -5%
subgraph-transition-enter: task duration 978ms 893ms -9%
subgraph-transition-enter: script duration 35ms 41ms +17%
subgraph-transition-enter: TBT 130ms 118ms -9%
subgraph-transition-enter: heap used 94.6 MB 93.7 MB -1%
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 +1%
viewport-pan-sweep: layout duration 0ms 0ms +0%
viewport-pan-sweep: style recalc duration 43ms 40ms -7%
viewport-pan-sweep: layout count 0 0 +0%
viewport-pan-sweep: style recalc count 250 249 -0%
viewport-pan-sweep: task duration 4556ms 4274ms -6%
viewport-pan-sweep: script duration 1363ms 1310ms -4%
viewport-pan-sweep: TBT 0ms 0ms +0%
viewport-pan-sweep: heap used 66.7 MB 71.6 MB +7%
viewport-pan-sweep: DOM nodes -276 -276 +0%
viewport-pan-sweep: event listeners -128 -143 +12%
vue-large-graph-idle: avg frame time 18ms 17ms -3%
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 18070ms 15145ms -16%
vue-large-graph-idle: script duration 550ms 519ms -6%
vue-large-graph-idle: TBT 0ms 0ms +0%
vue-large-graph-idle: heap used 152.0 MB 160.5 MB +6%
vue-large-graph-idle: DOM nodes -8312 -8312 +0%
vue-large-graph-idle: event listeners -16387 -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 25ms 19ms -24%
vue-large-graph-pan: layout count 0 0 +0%
vue-large-graph-pan: style recalc count 168 147 -12%
vue-large-graph-pan: task duration 22594ms 21224ms -6%
vue-large-graph-pan: script duration 929ms 846ms -9%
vue-large-graph-pan: TBT 663ms 292ms -56%
vue-large-graph-pan: heap used 153.8 MB 152.7 MB -1%
vue-large-graph-pan: DOM nodes -8312 -8312 +0%
vue-large-graph-pan: event listeners -16381 -16381 +0%
workflow-execution: avg frame time 17ms 17ms +0% z=0.6
workflow-execution: p95 frame time 17ms 17ms +1%
workflow-execution: layout duration 1ms 1ms +37% z=-4.8
workflow-execution: style recalc duration 20ms 14ms -28% z=-4.6
workflow-execution: layout count 3 2 -33% z=-5.4
workflow-execution: style recalc count 12 8 -33% z=-4.8
workflow-execution: task duration 127ms 72ms -44% z=-4.7
workflow-execution: script duration 11ms 5ms -51% z=-8.0
workflow-execution: TBT 0ms 0ms +0%
workflow-execution: heap used 48.8 MB 66.8 MB +37%
workflow-execution: DOM nodes 124 121 -2% z=-5.6
workflow-execution: event listeners 66 25 -62% z=-6.1
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-04T23:49:23.657Z",
  "gitSha": "1db29348aad14c1aae5349b389cb97763e178818",
  "branch": "backport-14715-to-core-1.48",
  "measurements": [
    {
      "name": "canvas-idle",
      "durationMs": 2032.656999999972,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 7.897000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 498.174,
      "heapDeltaBytes": -22026168,
      "heapUsedBytes": 46018144,
      "domNodes": -270,
      "jsHeapTotalBytes": 20443136,
      "scriptDurationMs": 14.989999999999998,
      "eventListeners": -148,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-idle",
      "durationMs": 2040.7920000000104,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 8.160999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 451.19100000000003,
      "heapDeltaBytes": 3866688,
      "heapUsedBytes": 71903044,
      "domNodes": 20,
      "jsHeapTotalBytes": 20316160,
      "scriptDurationMs": 14.874000000000002,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 2173.944000000006,
      "styleRecalcs": 80,
      "styleRecalcDurationMs": 47.08,
      "layouts": 12,
      "layoutDurationMs": 3.7889999999999997,
      "taskDurationMs": 1120.5179999999998,
      "heapDeltaBytes": -15890668,
      "heapUsedBytes": 52305496,
      "domNodes": -275,
      "jsHeapTotalBytes": 20443136,
      "scriptDurationMs": 149.792,
      "eventListeners": -148,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1798.8149999999905,
      "styleRecalcs": 71,
      "styleRecalcDurationMs": 33.152,
      "layouts": 12,
      "layoutDurationMs": 3.438,
      "taskDurationMs": 855.5010000000001,
      "heapDeltaBytes": -17026328,
      "heapUsedBytes": 50913624,
      "domNodes": -273,
      "jsHeapTotalBytes": 21753856,
      "scriptDurationMs": 106.86499999999998,
      "eventListeners": -148,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1679.5960000000036,
      "styleRecalcs": 31,
      "styleRecalcDurationMs": 14.383999999999999,
      "layouts": 6,
      "layoutDurationMs": 0.576,
      "taskDurationMs": 360.88399999999996,
      "heapDeltaBytes": 7051988,
      "heapUsedBytes": 75059968,
      "domNodes": 76,
      "jsHeapTotalBytes": 20316160,
      "scriptDurationMs": 16.663999999999998,
      "eventListeners": 19,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1737.9689999999073,
      "styleRecalcs": 31,
      "styleRecalcDurationMs": 16.653000000000002,
      "layouts": 6,
      "layoutDurationMs": 0.6579999999999999,
      "taskDurationMs": 362.809,
      "heapDeltaBytes": 7123516,
      "heapUsedBytes": 75181896,
      "domNodes": 78,
      "jsHeapTotalBytes": 20316160,
      "scriptDurationMs": 17.297,
      "eventListeners": 19,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 687.6760000000104,
      "styleRecalcs": 13,
      "styleRecalcDurationMs": 8.579999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 407.476,
      "heapDeltaBytes": -12697628,
      "heapUsedBytes": 55314688,
      "domNodes": 22,
      "jsHeapTotalBytes": 21626880,
      "scriptDurationMs": 61.73199999999999,
      "eventListeners": 2,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 576.2670000000298,
      "styleRecalcs": 12,
      "styleRecalcDurationMs": 7.746999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 364.63,
      "heapDeltaBytes": -12458228,
      "heapUsedBytes": 55547872,
      "domNodes": 20,
      "jsHeapTotalBytes": 21364736,
      "scriptDurationMs": 53.278,
      "eventListeners": 0,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2041.957000000025,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 6.752999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 662.886,
      "heapDeltaBytes": 7464444,
      "heapUsedBytes": 66595528,
      "domNodes": -276,
      "jsHeapTotalBytes": 5046272,
      "scriptDurationMs": 93.633,
      "eventListeners": -142,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66999999999998,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2033.8269999999739,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 6.509000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 665.7850000000001,
      "heapDeltaBytes": 7239540,
      "heapUsedBytes": 66252804,
      "domNodes": -276,
      "jsHeapTotalBytes": 4521984,
      "scriptDurationMs": 94.84400000000001,
      "eventListeners": -142,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2184.9109999999996,
      "styleRecalcs": 69,
      "styleRecalcDurationMs": 15.747000000000003,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1280.424,
      "heapDeltaBytes": 2646188,
      "heapUsedBytes": 62452908,
      "domNodes": -275,
      "jsHeapTotalBytes": 5775360,
      "scriptDurationMs": 422.057,
      "eventListeners": -142,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2143.58100000004,
      "styleRecalcs": 69,
      "styleRecalcDurationMs": 14.954000000000002,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1192.184,
      "heapDeltaBytes": 5485672,
      "heapUsedBytes": 65460120,
      "domNodes": -277,
      "jsHeapTotalBytes": 5513216,
      "scriptDurationMs": 394.31699999999995,
      "eventListeners": -144,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3147.289999999998,
      "styleRecalcs": 64,
      "styleRecalcDurationMs": 14.107999999999999,
      "layouts": 60,
      "layoutDurationMs": 8.033,
      "taskDurationMs": 1471.298,
      "heapDeltaBytes": -5529636,
      "heapUsedBytes": 56550128,
      "domNodes": -283,
      "jsHeapTotalBytes": 7929856,
      "scriptDurationMs": 511.695,
      "eventListeners": -148,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3232.5490000000627,
      "styleRecalcs": 65,
      "styleRecalcDurationMs": 15.414000000000001,
      "layouts": 60,
      "layoutDurationMs": 7.96,
      "taskDurationMs": 1481.633,
      "heapDeltaBytes": 1231584,
      "heapUsedBytes": 63164416,
      "domNodes": -283,
      "jsHeapTotalBytes": 7929856,
      "scriptDurationMs": 517.984,
      "eventListeners": -148,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "minimap-idle",
      "durationMs": 2026.4940000000138,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 7.120000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 656.4669999999999,
      "heapDeltaBytes": 6956444,
      "heapUsedBytes": 67904308,
      "domNodes": -277,
      "jsHeapTotalBytes": 4784128,
      "scriptDurationMs": 91.26799999999999,
      "eventListeners": -144,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "minimap-idle",
      "durationMs": 2039.5320000000083,
      "styleRecalcs": 7,
      "styleRecalcDurationMs": 5.572000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 660.334,
      "heapDeltaBytes": 7330632,
      "heapUsedBytes": 67923056,
      "domNodes": -274,
      "jsHeapTotalBytes": 4521984,
      "scriptDurationMs": 91.11899999999999,
      "eventListeners": -142,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 577.8339999999957,
      "styleRecalcs": 47,
      "styleRecalcDurationMs": 9.798,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 389.206,
      "heapDeltaBytes": -12376992,
      "heapUsedBytes": 55842432,
      "domNodes": 20,
      "jsHeapTotalBytes": 22151168,
      "scriptDurationMs": 119.093,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 600.0689999999622,
      "styleRecalcs": 47,
      "styleRecalcDurationMs": 10.352,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 399.39000000000004,
      "heapDeltaBytes": -12005672,
      "heapUsedBytes": 55873372,
      "domNodes": 20,
      "jsHeapTotalBytes": 22413312,
      "scriptDurationMs": 122.173,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2010.9460000000468,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 5.991000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 491.113,
      "heapDeltaBytes": -21797668,
      "heapUsedBytes": 46182808,
      "domNodes": -276,
      "jsHeapTotalBytes": 20443136,
      "scriptDurationMs": 12.324,
      "eventListeners": -148,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2013.508999999999,
      "styleRecalcs": 11,
      "styleRecalcDurationMs": 8.270000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 474.967,
      "heapDeltaBytes": 3833708,
      "heapUsedBytes": 72068596,
      "domNodes": 22,
      "jsHeapTotalBytes": 20840448,
      "scriptDurationMs": 12.285999999999998,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1713.2050000000163,
      "styleRecalcs": 75,
      "styleRecalcDurationMs": 33.351,
      "layouts": 16,
      "layoutDurationMs": 4.324,
      "taskDurationMs": 765.548,
      "heapDeltaBytes": -19063540,
      "heapUsedBytes": 48927668,
      "domNodes": -273,
      "jsHeapTotalBytes": 21229568,
      "scriptDurationMs": 86.149,
      "eventListeners": -148,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1746.857000000091,
      "styleRecalcs": 79,
      "styleRecalcDurationMs": 35.301,
      "layouts": 16,
      "layoutDurationMs": 4.027,
      "taskDurationMs": 778.9939999999999,
      "heapDeltaBytes": -21305428,
      "heapUsedBytes": 46797216,
      "domNodes": -271,
      "jsHeapTotalBytes": 21491712,
      "scriptDurationMs": 82.16900000000001,
      "eventListeners": -148,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-transition-enter",
      "durationMs": 1401.9289999999955,
      "styleRecalcs": 18,
      "styleRecalcDurationMs": 28.876000000000005,
      "layouts": 14,
      "layoutDurationMs": 11.348,
      "taskDurationMs": 892.9110000000003,
      "heapDeltaBytes": 29125160,
      "heapUsedBytes": 98241740,
      "domNodes": 13673,
      "jsHeapTotalBytes": 15990784,
      "scriptDurationMs": 41.409,
      "eventListeners": 2375,
      "totalBlockingTimeMs": 118,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8181.47799999997,
      "styleRecalcs": 250,
      "styleRecalcDurationMs": 41.043000000000006,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 4311.638,
      "heapDeltaBytes": 21662576,
      "heapUsedBytes": 80547324,
      "domNodes": -274,
      "jsHeapTotalBytes": 6299648,
      "scriptDurationMs": 1314.7920000000001,
      "eventListeners": -158,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8190.067999999997,
      "styleRecalcs": 248,
      "styleRecalcDurationMs": 39.599999999999994,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 4237.112,
      "heapDeltaBytes": 9632028,
      "heapUsedBytes": 69670812,
      "domNodes": -278,
      "jsHeapTotalBytes": 7348224,
      "scriptDurationMs": 1305.129,
      "eventListeners": -128,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 17406.588999999996,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 17377.178999999996,
      "heapDeltaBytes": -53129128,
      "heapUsedBytes": 165771176,
      "domNodes": -8312,
      "jsHeapTotalBytes": -11997184,
      "scriptDurationMs": 528.906,
      "eventListeners": -16387,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.776666666666642,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 12928.500999999982,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 12913.009,
      "heapDeltaBytes": -51117440,
      "heapUsedBytes": 170827844,
      "domNodes": -8312,
      "jsHeapTotalBytes": -9900032,
      "scriptDurationMs": 508.19499999999994,
      "eventListeners": -16389,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.220000000000073,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 21538.207,
      "styleRecalcs": 151,
      "styleRecalcDurationMs": 19.06299999999997,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 21485.06,
      "heapDeltaBytes": -69179412,
      "heapUsedBytes": 153834980,
      "domNodes": -8312,
      "jsHeapTotalBytes": -11993088,
      "scriptDurationMs": 858.343,
      "eventListeners": -16381,
      "totalBlockingTimeMs": 312,
      "frameDurationMs": 17.779999999999927,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 20988.427000000003,
      "styleRecalcs": 143,
      "styleRecalcDurationMs": 18.687000000000037,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 20963.406,
      "heapDeltaBytes": -51700648,
      "heapUsedBytes": 166470760,
      "domNodes": -8312,
      "jsHeapTotalBytes": -14618624,
      "scriptDurationMs": 832.9580000000001,
      "eventListeners": -16381,
      "totalBlockingTimeMs": 271,
      "frameDurationMs": 17.776666666666642,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "workflow-execution",
      "durationMs": 100.43999999993503,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 15.017000000000001,
      "layouts": 2,
      "layoutDurationMs": 1.1419999999999997,
      "taskDurationMs": 75.465,
      "heapDeltaBytes": 3104072,
      "heapUsedBytes": 70160496,
      "domNodes": 136,
      "jsHeapTotalBytes": 2621440,
      "scriptDurationMs": 6.14,
      "eventListeners": 17,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "workflow-execution",
      "durationMs": 96.69300000007297,
      "styleRecalcs": 7,
      "styleRecalcDurationMs": 12.956999999999999,
      "layouts": 2,
      "layoutDurationMs": 0.5659999999999998,
      "taskDurationMs": 68.39800000000001,
      "heapDeltaBytes": 2888184,
      "heapUsedBytes": 70002892,
      "domNodes": 106,
      "jsHeapTotalBytes": 3145728,
      "scriptDurationMs": 4.4559999999999995,
      "eventListeners": 33,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999727
    }
  ]
}

@codecov

codecov Bot commented Aug 4, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

@@             Coverage Diff             @@
##           core/1.48   #14722    +/-   ##
===========================================
  Coverage      79.39%   79.39%            
===========================================
  Files           1749     1749            
  Lines          99604    99605     +1     
  Branches       31920    32671   +751     
===========================================
+ Hits           79080    79081     +1     
  Misses         20124    20124            
  Partials         400      400            
Flag Coverage Δ
unit 69.31% <100.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/workspace/api/workspaceApi.ts 47.82% <ø> (ø)
...tform/workspace/composables/useWorkspaceBilling.ts 97.22% <100.00%> (+0.01%) ⬆️
🚀 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 16f14bd into core/1.48 Aug 4, 2026
75 checks passed
@comfy-pr-bot
comfy-pr-bot deleted the backport-14715-to-core-1.48 branch August 4, 2026 23: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 size:XS This PR changes 0-9 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants