Skip to content

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

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

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

Conversation

@comfy-pr-bot

Copy link
Copy Markdown
Member

Backport of #14715 to core/1.49

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

🎨 Storybook: ✅ Built — View Storybook

Details

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

Links

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

📊 Browser Reports
  • chromium: View Report (✅ 1767 / ❌ 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.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 69.9 MB heap
canvas-mouse-sweep: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 64.5 MB heap
canvas-zoom-sweep: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 72.6 MB heap
dom-widget-clipping: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 53.3 MB heap
large-graph-idle: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 64.1 MB heap
large-graph-pan: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 58.1 MB heap
large-graph-zoom: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 81.7 MB heap
minimap-idle: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 65.1 MB heap
subgraph-dom-widget-clipping: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 53.7 MB heap
subgraph-idle: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 56.9 MB heap
subgraph-mouse-sweep: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 61.1 MB heap
subgraph-transition-enter: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 135ms TBT · 95.1 MB heap
viewport-pan-sweep: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 68.4 MB heap
vue-large-graph-idle: · 56.3 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 159.6 MB heap
vue-large-graph-pan: · 56.2 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 167ms TBT · 158.5 MB heap
workflow-execution: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 49.2 MB heap

⚠️ 6 regressions detected

Show regressions
Metric Baseline PR (median) Δ Sig
canvas-idle: task duration 502ms 506ms +1% ⚠️ z=3.6
canvas-zoom-sweep: task duration 397ms 386ms -3% ⚠️ z=2.5
large-graph-idle: task duration 744ms 691ms -7% ⚠️ z=2.7
large-graph-pan: task duration 1342ms 1287ms -4% ⚠️ z=4.8
minimap-idle: task duration 704ms 687ms -3% ⚠️ z=3.4
subgraph-idle: task duration 497ms 469ms -6% ⚠️ z=3.2
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 9ms 8ms -7% z=-3.0
canvas-idle: layout count 0 0 +0%
canvas-idle: style recalc count 9 9 +0% z=-3.8
canvas-idle: task duration 502ms 506ms +1% ⚠️ z=3.6
canvas-idle: script duration 21ms 20ms -3% z=-2.3
canvas-idle: TBT 0ms 0ms +0%
canvas-idle: heap used 69.6 MB 69.9 MB +0%
canvas-idle: DOM nodes 18 18 +0% z=-3.6
canvas-idle: event listeners 4 4 +0% z=-1.6
canvas-mouse-sweep: avg frame time 17ms 17ms -0% z=-0.4
canvas-mouse-sweep: p95 frame time 17ms 17ms +0%
canvas-mouse-sweep: layout duration 4ms 3ms -19% z=-1.1
canvas-mouse-sweep: style recalc duration 45ms 40ms -11% z=-0.9
canvas-mouse-sweep: layout count 12 12 +0%
canvas-mouse-sweep: style recalc count 78 76 -3% z=-1.4
canvas-mouse-sweep: task duration 984ms 895ms -9% z=0.5
canvas-mouse-sweep: script duration 138ms 131ms -5% z=-0.7
canvas-mouse-sweep: TBT 0ms 0ms +0%
canvas-mouse-sweep: heap used 56.7 MB 64.5 MB +14%
canvas-mouse-sweep: DOM nodes -112 60 -154% z=-0.9
canvas-mouse-sweep: event listeners -75 5 -107% z=-0.8
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 +15% z=1.3
canvas-zoom-sweep: style recalc duration 18ms 18ms -0% z=-0.9
canvas-zoom-sweep: layout count 6 6 +0%
canvas-zoom-sweep: style recalc count 31 31 +0% z=-1.7
canvas-zoom-sweep: task duration 397ms 386ms -3% ⚠️ z=2.5
canvas-zoom-sweep: script duration 20ms 19ms -4% z=-2.6
canvas-zoom-sweep: TBT 0ms 0ms +0%
canvas-zoom-sweep: heap used 72.6 MB 72.6 MB +0%
canvas-zoom-sweep: DOM nodes 77 77 -1% z=-3.5
canvas-zoom-sweep: event listeners 19 19 +0% 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 8ms 9ms +4% z=-1.7
dom-widget-clipping: layout count 0 0 +0%
dom-widget-clipping: style recalc count 12 11 -4% z=-4.2
dom-widget-clipping: task duration 411ms 390ms -5% z=1.6
dom-widget-clipping: script duration 64ms 61ms -5% z=-2.1
dom-widget-clipping: TBT 0ms 0ms +0%
dom-widget-clipping: heap used 53.5 MB 53.3 MB -0%
dom-widget-clipping: DOM nodes 19 18 -5% z=-2.9
dom-widget-clipping: event listeners 2 1 -50% variance too high
large-graph-idle: avg frame time 17ms 17ms +0% z=-0.2
large-graph-idle: p95 frame time 17ms 17ms +0%
large-graph-idle: layout duration 0ms 0ms +0%
large-graph-idle: style recalc duration 9ms 9ms -7% z=-3.3
large-graph-idle: layout count 0 0 +0%
large-graph-idle: style recalc count 9 9 +6% z=-8.3
large-graph-idle: task duration 744ms 691ms -7% ⚠️ z=2.7
large-graph-idle: script duration 119ms 109ms -8% z=0.7
large-graph-idle: TBT 0ms 0ms +0%
large-graph-idle: heap used 64.5 MB 64.1 MB -1%
large-graph-idle: DOM nodes -284 -283 -0% z=-339.9
large-graph-idle: event listeners -149 -164 +10% z=-31.2
large-graph-pan: avg frame time 17ms 17ms +0% z=0.3
large-graph-pan: p95 frame time 17ms 17ms +0%
large-graph-pan: layout duration 0ms 0ms +0%
large-graph-pan: style recalc duration 14ms 13ms -5% z=-5.0
large-graph-pan: layout count 0 0 +0%
large-graph-pan: style recalc count 69 68 -1% z=-2.4
large-graph-pan: task duration 1342ms 1287ms -4% ⚠️ z=4.8
large-graph-pan: script duration 438ms 429ms -2% z=1.0
large-graph-pan: TBT 0ms 0ms +0%
large-graph-pan: heap used 61.2 MB 58.1 MB -5%
large-graph-pan: DOM nodes -284 -287 +1% z=-185.2
large-graph-pan: event listeners -148 -163 +10% z=-202.8
large-graph-zoom: avg frame time 17ms 17ms +0%
large-graph-zoom: p95 frame time 17ms 17ms +0%
large-graph-zoom: layout duration 7ms 7ms -0%
large-graph-zoom: style recalc duration 15ms 15ms -6%
large-graph-zoom: layout count 60 60 +0%
large-graph-zoom: style recalc count 64 65 +1%
large-graph-zoom: task duration 1551ms 1496ms -4%
large-graph-zoom: script duration 541ms 536ms -1%
large-graph-zoom: TBT 0ms 0ms +0%
large-graph-zoom: heap used 57.4 MB 81.7 MB +42%
large-graph-zoom: DOM nodes -289 11 -104%
large-graph-zoom: event listeners -168 8 -105%
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 8ms 9ms +20% z=-0.7
minimap-idle: layout count 0 0 +0%
minimap-idle: style recalc count 8 9 +6% z=-1.6
minimap-idle: task duration 704ms 687ms -3% ⚠️ z=3.4
minimap-idle: script duration 112ms 109ms -3% z=1.1
minimap-idle: TBT 0ms 0ms +0%
minimap-idle: heap used 66.4 MB 65.1 MB -2%
minimap-idle: DOM nodes -283 -283 +0% z=-220.9
minimap-idle: event listeners -149 -163 +9% z=-253.8
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.3
subgraph-dom-widget-clipping: layout count 0 0 +0%
subgraph-dom-widget-clipping: style recalc count 46 47 +2% z=-1.6
subgraph-dom-widget-clipping: task duration 407ms 400ms -2% z=1.2
subgraph-dom-widget-clipping: script duration 121ms 117ms -3% z=-1.7
subgraph-dom-widget-clipping: TBT 0ms 0ms +0%
subgraph-dom-widget-clipping: heap used 53.9 MB 53.7 MB -0%
subgraph-dom-widget-clipping: DOM nodes 18 20 +11% z=-1.9
subgraph-dom-widget-clipping: event listeners 7 8 +14% z=-1.4
subgraph-idle: avg frame time 17ms 17ms +0% z=1.5
subgraph-idle: p95 frame time 17ms 17ms +0%
subgraph-idle: layout duration 0ms 0ms +0%
subgraph-idle: style recalc duration 9ms 8ms -5% z=-2.6
subgraph-idle: layout count 0 0 +0%
subgraph-idle: style recalc count 9 10 +6% z=-2.1
subgraph-idle: task duration 497ms 469ms -6% ⚠️ z=3.2
subgraph-idle: script duration 19ms 14ms -24% z=-2.3
subgraph-idle: TBT 0ms 0ms +0%
subgraph-idle: heap used 70.0 MB 56.9 MB -19%
subgraph-idle: DOM nodes 18 19 +6% z=-1.9
subgraph-idle: event listeners 4 4 +0% 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 4ms 4ms -0% z=-0.7
subgraph-mouse-sweep: style recalc duration 39ms 38ms -4% z=-1.4
subgraph-mouse-sweep: layout count 16 16 +0%
subgraph-mouse-sweep: style recalc count 75 76 +1% z=-2.1
subgraph-mouse-sweep: task duration 826ms 792ms -4% z=0.4
subgraph-mouse-sweep: script duration 97ms 92ms -5% z=-1.3
subgraph-mouse-sweep: TBT 0ms 0ms +0%
subgraph-mouse-sweep: heap used 52.3 MB 61.1 MB +17%
subgraph-mouse-sweep: DOM nodes 40 63 +59% z=-1.8
subgraph-mouse-sweep: event listeners -75 4 -105% 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 13ms 12ms -5%
subgraph-transition-enter: style recalc duration 31ms 30ms -4%
subgraph-transition-enter: layout count 14 13 -7%
subgraph-transition-enter: style recalc count 18 17 -6%
subgraph-transition-enter: task duration 994ms 962ms -3%
subgraph-transition-enter: script duration 38ms 37ms -1%
subgraph-transition-enter: TBT 146ms 135ms -8%
subgraph-transition-enter: heap used 96.5 MB 95.1 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 37ms 37ms +2%
viewport-pan-sweep: layout count 0 0 +0%
viewport-pan-sweep: style recalc count 250 250 +0%
viewport-pan-sweep: task duration 4605ms 4672ms +1%
viewport-pan-sweep: script duration 1414ms 1430ms +1%
viewport-pan-sweep: TBT 0ms 0ms +0%
viewport-pan-sweep: heap used 69.0 MB 68.4 MB -1%
viewport-pan-sweep: DOM nodes -283 -284 +0%
viewport-pan-sweep: event listeners -131 -131 +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 17215ms 17242ms +0%
vue-large-graph-idle: script duration 533ms 609ms +14%
vue-large-graph-idle: TBT 0ms 0ms +0%
vue-large-graph-idle: heap used 159.0 MB 159.6 MB +0%
vue-large-graph-idle: DOM nodes -8312 -8314 +0%
vue-large-graph-idle: event listeners -16387 -16389 +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 18ms 16ms -9%
vue-large-graph-pan: layout count 0 0 +0%
vue-large-graph-pan: style recalc count 143 140 -2%
vue-large-graph-pan: task duration 20827ms 20509ms -2%
vue-large-graph-pan: script duration 880ms 887ms +1%
vue-large-graph-pan: TBT 169ms 167ms -1%
vue-large-graph-pan: heap used 170.0 MB 158.5 MB -7%
vue-large-graph-pan: DOM nodes -8312 -8312 +0%
vue-large-graph-pan: event listeners -16384 -16382 -0%
workflow-execution: avg frame time 17ms 17ms -0% z=0.6
workflow-execution: p95 frame time 17ms 17ms +0%
workflow-execution: layout duration 1ms 0ms -18% z=-7.5
workflow-execution: style recalc duration 19ms 19ms +2% z=-2.2
workflow-execution: layout count 3 3 +0% z=-4.5
workflow-execution: style recalc count 14 15 +4% z=-1.6
workflow-execution: task duration 121ms 126ms +4% z=0.3
workflow-execution: script duration 10ms 10ms -1% z=-6.6
workflow-execution: TBT 0ms 0ms +0%
workflow-execution: heap used 49.3 MB 49.2 MB -0%
workflow-execution: DOM nodes 129 130 +1% z=-4.4
workflow-execution: event listeners 98 98 +0% z=10.6
Historical variance (last 15 runs)
Metric μ σ CV
canvas-idle: avg frame time 17ms 0ms 0.0%
canvas-idle: layout duration 0ms 0ms 0.0%
canvas-idle: style recalc duration 11ms 1ms 8.2%
canvas-idle: layout count 0 0 0.0%
canvas-idle: style recalc count 11 1 5.0%
canvas-idle: task duration 395ms 31ms 7.9%
canvas-idle: script duration 25ms 2ms 8.8%
canvas-idle: TBT 0ms 0ms 0.0%
canvas-idle: DOM nodes 23 1 5.6%
canvas-idle: event listeners 12 5 40.9%
canvas-mouse-sweep: avg frame time 17ms 0ms 0.0%
canvas-mouse-sweep: layout duration 4ms 0ms 5.4%
canvas-mouse-sweep: style recalc duration 43ms 3ms 7.4%
canvas-mouse-sweep: layout count 12 0 0.0%
canvas-mouse-sweep: style recalc count 79 2 3.0%
canvas-mouse-sweep: task duration 865ms 58ms 6.7%
canvas-mouse-sweep: script duration 136ms 6ms 4.8%
canvas-mouse-sweep: TBT 0ms 0ms 0.0%
canvas-mouse-sweep: DOM nodes 62 3 4.2%
canvas-mouse-sweep: event listeners 8 4 49.4%
canvas-zoom-sweep: avg frame time 17ms 0ms 0.0%
canvas-zoom-sweep: layout duration 1ms 0ms 7.0%
canvas-zoom-sweep: style recalc duration 19ms 2ms 8.0%
canvas-zoom-sweep: layout count 6 0 0.0%
canvas-zoom-sweep: style recalc count 31 0 1.5%
canvas-zoom-sweep: task duration 327ms 23ms 7.1%
canvas-zoom-sweep: script duration 27ms 3ms 11.1%
canvas-zoom-sweep: TBT 0ms 0ms 0.0%
canvas-zoom-sweep: DOM nodes 79 1 1.0%
canvas-zoom-sweep: event listeners 24 5 21.8%
dom-widget-clipping: avg frame time 17ms 0ms 0.0%
dom-widget-clipping: layout duration 0ms 0ms 0.0%
dom-widget-clipping: style recalc duration 10ms 1ms 8.0%
dom-widget-clipping: layout count 0 0 0.0%
dom-widget-clipping: style recalc count 13 0 3.8%
dom-widget-clipping: task duration 365ms 16ms 4.5%
dom-widget-clipping: script duration 68ms 3ms 4.8%
dom-widget-clipping: TBT 0ms 0ms 0.0%
dom-widget-clipping: DOM nodes 22 1 6.4%
dom-widget-clipping: event listeners 8 6 81.2%
large-graph-idle: avg frame time 17ms 0ms 0.0%
large-graph-idle: layout duration 0ms 0ms 0.0%
large-graph-idle: style recalc duration 12ms 1ms 8.6%
large-graph-idle: layout count 0 0 0.0%
large-graph-idle: style recalc count 12 0 2.7%
large-graph-idle: task duration 542ms 54ms 10.0%
large-graph-idle: script duration 102ms 11ms 10.3%
large-graph-idle: TBT 0ms 0ms 0.0%
large-graph-idle: DOM nodes 25 1 3.7%
large-graph-idle: event listeners 26 6 23.2%
large-graph-pan: avg frame time 17ms 0ms 0.0%
large-graph-pan: layout duration 0ms 0ms 0.0%
large-graph-pan: style recalc duration 17ms 1ms 4.6%
large-graph-pan: layout count 0 0 0.0%
large-graph-pan: style recalc count 70 1 0.9%
large-graph-pan: task duration 1082ms 43ms 4.0%
large-graph-pan: script duration 408ms 20ms 4.8%
large-graph-pan: TBT 0ms 0ms 0.0%
large-graph-pan: DOM nodes 19 2 8.7%
large-graph-pan: event listeners 5 1 16.8%
minimap-idle: avg frame time 17ms 0ms 0.0%
minimap-idle: layout duration 0ms 0ms 0.0%
minimap-idle: style recalc duration 10ms 1ms 8.6%
minimap-idle: layout count 0 0 0.0%
minimap-idle: style recalc count 10 1 7.1%
minimap-idle: task duration 527ms 47ms 9.0%
minimap-idle: script duration 98ms 10ms 10.1%
minimap-idle: TBT 0ms 0ms 0.0%
minimap-idle: DOM nodes 19 1 7.1%
minimap-idle: event listeners 5 1 14.4%
subgraph-dom-widget-clipping: avg frame time 17ms 0ms 0.0%
subgraph-dom-widget-clipping: layout duration 0ms 0ms 0.0%
subgraph-dom-widget-clipping: style recalc duration 13ms 1ms 7.4%
subgraph-dom-widget-clipping: layout count 0 0 0.0%
subgraph-dom-widget-clipping: style recalc count 48 1 1.2%
subgraph-dom-widget-clipping: task duration 378ms 18ms 4.9%
subgraph-dom-widget-clipping: script duration 128ms 6ms 4.9%
subgraph-dom-widget-clipping: TBT 0ms 0ms 0.0%
subgraph-dom-widget-clipping: DOM nodes 22 1 5.0%
subgraph-dom-widget-clipping: event listeners 16 6 36.0%
subgraph-idle: avg frame time 17ms 0ms 0.0%
subgraph-idle: layout duration 0ms 0ms 0.0%
subgraph-idle: style recalc duration 10ms 1ms 7.5%
subgraph-idle: layout count 0 0 0.0%
subgraph-idle: style recalc count 11 1 6.0%
subgraph-idle: task duration 370ms 31ms 8.5%
subgraph-idle: script duration 20ms 3ms 13.2%
subgraph-idle: TBT 0ms 0ms 0.0%
subgraph-idle: DOM nodes 22 1 6.9%
subgraph-idle: event listeners 10 7 64.5%
subgraph-mouse-sweep: avg frame time 17ms 0ms 0.0%
subgraph-mouse-sweep: layout duration 5ms 0ms 6.8%
subgraph-mouse-sweep: style recalc duration 42ms 3ms 7.8%
subgraph-mouse-sweep: layout count 16 0 0.0%
subgraph-mouse-sweep: style recalc count 80 2 2.4%
subgraph-mouse-sweep: task duration 766ms 69ms 9.0%
subgraph-mouse-sweep: script duration 101ms 7ms 6.5%
subgraph-mouse-sweep: TBT 0ms 0ms 0.0%
subgraph-mouse-sweep: DOM nodes 67 2 3.3%
subgraph-mouse-sweep: event listeners 8 4 52.6%
workflow-execution: avg frame time 17ms 0ms 0.0%
workflow-execution: layout duration 2ms 0ms 9.4%
workflow-execution: style recalc duration 24ms 2ms 9.1%
workflow-execution: layout count 5 1 11.0%
workflow-execution: style recalc count 18 2 11.5%
workflow-execution: task duration 123ms 11ms 8.8%
workflow-execution: script duration 29ms 3ms 10.2%
workflow-execution: TBT 0ms 0ms 0.0%
workflow-execution: DOM nodes 161 7 4.4%
workflow-execution: event listeners 52 4 8.4%
Trend (last 15 commits on main)
Metric Trend Dir Latest
canvas-idle: avg frame time ▆▃▆▁▆▃▆█▆▆▄▃▃▄▃ ➡️ 17ms
canvas-idle: p95 frame time ➡️ NaNms
canvas-idle: layout duration ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
canvas-idle: style recalc duration ▇▇▆▆▃█▄▃▄▃▇▄▁▆▇ ➡️ 11ms
canvas-idle: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0
canvas-idle: style recalc count █▃▅▂▅▆▃▁▂▁▂▅▆▅▆ ➡️ 12
canvas-idle: task duration ▃▃▃▆▂▃▃▅▆▂█▃▁▃▃ ➡️ 391ms
canvas-idle: script duration ▄▃▅▇▂▅▃▆▇▅█▄▁▅▆ ➡️ 27ms
canvas-idle: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
canvas-idle: heap used ➡️ NaN MB
canvas-idle: DOM nodes █▇▆▅▃▇▃▁▂▂▅▆▆▆▇ ➡️ 24
canvas-idle: event listeners ▅█▅▄▁▅▁▁▁▄▅▅▁▅▄ 📉 11
canvas-mouse-sweep: avg frame time ▆█▆▃▁▃▁▆▆▁▃▆▆▃▃ ➡️ 17ms
canvas-mouse-sweep: p95 frame time ➡️ NaNms
canvas-mouse-sweep: layout duration ▁▃▂▄▁▂▁▃▆▂█▇▆▄▃ ➡️ 4ms
canvas-mouse-sweep: style recalc duration ▄▄▂▄▁▂▃▃▅▄█▆▂▄▄ ➡️ 43ms
canvas-mouse-sweep: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 12
canvas-mouse-sweep: style recalc count █▅▄▃▂▂▁▄▄▅▆▅▂▇▄ ➡️ 79
canvas-mouse-sweep: task duration █▆▄▂▂▃▂▄▄▅█▆▁▆▄ ➡️ 868ms
canvas-mouse-sweep: script duration ▄▅▄▆▄▆▆▆▅▅█▆▁▅▆ ➡️ 139ms
canvas-mouse-sweep: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
canvas-mouse-sweep: heap used ➡️ NaN MB
canvas-mouse-sweep: DOM nodes █▅▃▃▁▂▂▃▂▄▆▅▃▅▅ ➡️ 64
canvas-mouse-sweep: event listeners █▁▁▁▁▁▇▁▁▁██▇▁█ 📈 13
canvas-zoom-sweep: avg frame time ▅▅█▄▅▁▁▁▅▁▁▅▄▅▁ ➡️ 17ms
canvas-zoom-sweep: p95 frame time ➡️ NaNms
canvas-zoom-sweep: layout duration ▆▅▅▄▁▁█▅▃▅▇▆▁▂▆ ➡️ 1ms
canvas-zoom-sweep: style recalc duration ▆▅▄▆▅▃█▆▇▅▇▄▁▃▅ ➡️ 20ms
canvas-zoom-sweep: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 6
canvas-zoom-sweep: style recalc count ▁▁▃▄▆▃▆█▄▄▆▁▆▁▆ ➡️ 32
canvas-zoom-sweep: task duration ▄▂▁▇▂▂▄▅▆▃█▄▁▁▅ ➡️ 338ms
canvas-zoom-sweep: script duration ▃▃▂▇▂▂▅▇▆▅█▄▁▂▆ ➡️ 30ms
canvas-zoom-sweep: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
canvas-zoom-sweep: heap used ➡️ NaN MB
canvas-zoom-sweep: DOM nodes ▄▃▁▅█▁▃▆▄▅▅▃▃▄▃ ➡️ 79
canvas-zoom-sweep: event listeners ▁▁▂▅█▂▁▅▁▅▅▄▁▅▁ ➡️ 19
dom-widget-clipping: avg frame time ▂▄▅▅▂▄█▇▅▇▇▅▅▁▇ ➡️ 17ms
dom-widget-clipping: p95 frame time ➡️ NaNms
dom-widget-clipping: layout duration ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
dom-widget-clipping: style recalc duration ▆▆▂▆▄▃██▄▁▆▇▆▃▅ ➡️ 10ms
dom-widget-clipping: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0
dom-widget-clipping: style recalc count ▇█▅█▅▄█▇▇▁▇▄▇▂▅ ➡️ 13
dom-widget-clipping: task duration ▃▃▁▅▄▃▅▆▅▂▇█▁▅▅ ➡️ 371ms
dom-widget-clipping: script duration ▅▄▄▆▆▅▇▇▆▃█▇▁▇▇ ➡️ 71ms
dom-widget-clipping: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
dom-widget-clipping: heap used ➡️ NaN MB
dom-widget-clipping: DOM nodes ▇▇▄▇▅▄█▇▅▁▅▄▇▃▄ ➡️ 21
dom-widget-clipping: event listeners ▅▅▅▅▁▅██▁▁▁▁█▁▁ 📉 2
large-graph-idle: avg frame time ▅▅▅▅▅▂▁▂▄▅▄▂▂▅█ ➡️ 17ms
large-graph-idle: p95 frame time ➡️ NaNms
large-graph-idle: layout duration ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
large-graph-idle: style recalc duration ▅▅▅▆▄▅▃▄▅▅▆█▁▄▆ ➡️ 13ms
large-graph-idle: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0
large-graph-idle: style recalc count █▆█▃▃▁▃▆▃▆▆▃▆██ ➡️ 12
large-graph-idle: task duration ▂▃▂▆▂▃▃▇▅▃██▁▂▅ ➡️ 569ms
large-graph-idle: script duration ▄▅▄▆▄▅▅▇▆▅█▆▁▃▆ ➡️ 110ms
large-graph-idle: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
large-graph-idle: heap used ➡️ NaN MB
large-graph-idle: DOM nodes ▆█▅▂▅▃▁▂▃▅▅▆▂▆▅ ➡️ 25
large-graph-idle: event listeners ███▇██▄▁▄▇▇█▂█▇ ➡️ 29
large-graph-pan: avg frame time ▆▃▃▆█▃▁█▆▆▆▆█▁▆ ➡️ 17ms
large-graph-pan: p95 frame time ➡️ NaNms
large-graph-pan: layout duration ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
large-graph-pan: style recalc duration ▃▂▄▄▁▅▂▂▁▄▄█▃▁▂ ➡️ 17ms
large-graph-pan: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0
large-graph-pan: style recalc count ▆▃█▂▃▂▂▂▁▇▅▃█▆▃ ➡️ 69
large-graph-pan: task duration ▄▃▄▆▄▄▄▆▄▄█▆▁▂▅ ➡️ 1100ms
large-graph-pan: script duration ▅▄▅▆▆▅▄▆▄▅█▄▁▄▅ ➡️ 413ms
large-graph-pan: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
large-graph-pan: heap used ➡️ NaN MB
large-graph-pan: DOM nodes ▅▃▆▂▄▁▃▁▁▅▁▂█▅▂ ➡️ 18
large-graph-pan: event listeners █▆█▁▁▆▁▁▃▆▁▃██▃ ➡️ 5
minimap-idle: avg frame time ▃▆▆▃█▁█▆▆▃▃▆█▆█ ➡️ 17ms
minimap-idle: p95 frame time ➡️ NaNms
minimap-idle: layout duration ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
minimap-idle: style recalc duration ▄█▁█▅▅█▅▅▃▅▁▁▄▆ ➡️ 10ms
minimap-idle: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0
minimap-idle: style recalc count ▃▅▂▄█▃▆▁▂▅▂▁▅▆▃ ➡️ 9
minimap-idle: task duration ▃▄▁▅▁▃▄▅▇▃█▅▁▁▅ ➡️ 547ms
minimap-idle: script duration ▄▆▃▇▃▅▆▆▇▅█▅▁▃▆ ➡️ 106ms
minimap-idle: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
minimap-idle: heap used ➡️ NaN MB
minimap-idle: DOM nodes ▃▅▂▄█▃▆▁▂▅▂▁▅▆▃ ➡️ 19
minimap-idle: event listeners ▃▃▆▁▁▁▃▁▁▆▁▃█▆▁ ➡️ 4
subgraph-dom-widget-clipping: avg frame time ▅▄▄▄▄▄█▄▄▄▃▁▆▃▃ ➡️ 17ms
subgraph-dom-widget-clipping: p95 frame time ➡️ NaNms
subgraph-dom-widget-clipping: layout duration ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
subgraph-dom-widget-clipping: style recalc duration ▂▄▃▅▅▃▂▅▇▃▄█▁▄▆ ➡️ 14ms
subgraph-dom-widget-clipping: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0
subgraph-dom-widget-clipping: style recalc count ▇█▆▃▆▃▁▆█▇▃▆▇█▅ ➡️ 48
subgraph-dom-widget-clipping: task duration ▂▃▃▆▅▅▂▅█▂▆█▁▂▇ ➡️ 398ms
subgraph-dom-widget-clipping: script duration ▃▃▃▄▅▅▂▄█▂▅▇▁▂▅ ➡️ 131ms
subgraph-dom-widget-clipping: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
subgraph-dom-widget-clipping: heap used ➡️ NaN MB
subgraph-dom-widget-clipping: DOM nodes ▅▇▅▂▅▂▁▅▅▅▁▇▅█▄ ➡️ 22
subgraph-dom-widget-clipping: event listeners ▅▅▅▂▅▁▅██▁▁█▅█▅ 📈 16
subgraph-idle: avg frame time ▆▆█▁▆▃▆▆▆▃▆▁▃▆█ ➡️ 17ms
subgraph-idle: p95 frame time ➡️ NaNms
subgraph-idle: layout duration ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
subgraph-idle: style recalc duration ▁▇▃▆▂▄▂▃▃▆▆▄▃▇█ ➡️ 12ms
subgraph-idle: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0
subgraph-idle: style recalc count ▃▆▃▃▂▅▁▂▁▆▃▃██▇ ➡️ 12
subgraph-idle: task duration ▁▃▁▇▁▁▃▆▅▂█▅▁▁▄ ➡️ 378ms
subgraph-idle: script duration ▁▃▂▇▁▂▃▇▆▂█▅▂▁▅ ➡️ 22ms
subgraph-idle: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
subgraph-idle: heap used ➡️ NaN MB
subgraph-idle: DOM nodes ▃▅▃▂▁▄▁▂▁▅▃▂▇█▇ ➡️ 24
subgraph-idle: event listeners ▁▅▁▁▁▁▁▁▁▅▄▁███ 📈 21
subgraph-mouse-sweep: avg frame time ▅▄▁▃▃▄▆▄▆▃▃█▁▃▃ ➡️ 17ms
subgraph-mouse-sweep: p95 frame time ➡️ NaNms
subgraph-mouse-sweep: layout duration ▁▄▄▄▃▃▅▅▅▂█▇▂▃▆ ➡️ 5ms
subgraph-mouse-sweep: style recalc duration ▃▂▄▅▂▃▄▅█▃█▆▁▂▅ ➡️ 43ms
subgraph-mouse-sweep: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 16
subgraph-mouse-sweep: style recalc count ▅▂▅▅▁▄▃▅█▅▆▄▂▄▅ ➡️ 81
subgraph-mouse-sweep: task duration ▃▂▄▅▂▄▄▅▇▄█▆▁▃▅ ➡️ 785ms
subgraph-mouse-sweep: script duration ▄▅▄▇▅▅▆▇▆▅██▁▄▆ ➡️ 105ms
subgraph-mouse-sweep: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
subgraph-mouse-sweep: heap used ➡️ NaN MB
subgraph-mouse-sweep: DOM nodes ▅▁▄▅▁▄▃▃█▅▅▄▂▅▃ ➡️ 66
subgraph-mouse-sweep: event listeners ▇▁▂▇▁▂▂▂█▇▂▂▇▇▂ 📈 5
workflow-execution: avg frame time ▆▆▆▄▆▆▃▄▁▄█▆▅▄▆ ➡️ 17ms
workflow-execution: p95 frame time ➡️ NaNms
workflow-execution: layout duration ▁▆▁▃▂▄▃▂▃▃▅█▄▂▅ ➡️ 2ms
workflow-execution: style recalc duration ▃▇▅▇▁▅▆▇█▁██▂▄▆ ➡️ 25ms
workflow-execution: layout count ▁█▂▃▂▃▃▁▃▃▄▃▂▃▂ ➡️ 5
workflow-execution: style recalc count ▃█▅▇▁▄▅▆▅▅▅▅▄▄▂ ➡️ 15
workflow-execution: task duration ▂▅▄▅▁▄▆▆▆▁▇█▁▃▃ ➡️ 120ms
workflow-execution: script duration ▄▃▄▄▃▅▄▅▆▂▇█▁▃▄ ➡️ 29ms
workflow-execution: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
workflow-execution: heap used ➡️ NaN MB
workflow-execution: DOM nodes ▂█▃▆▁▄▃▅▃█▃▃▄▃▁ ➡️ 152
workflow-execution: event listeners ▅███▁▅███▁██▅█▅ ➡️ 49
Raw data
{
  "timestamp": "2026-08-04T23:49:51.208Z",
  "gitSha": "c6b28b8923ff5ae4e904cde8e70036c4537a50d0",
  "branch": "backport-14715-to-core-1.49",
  "measurements": [
    {
      "name": "canvas-idle",
      "durationMs": 2114.682000000016,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 8.302,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 542.473,
      "heapDeltaBytes": 5105228,
      "heapUsedBytes": 73227912,
      "domNodes": 18,
      "jsHeapTotalBytes": 20303872,
      "scriptDurationMs": 22.062,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "canvas-idle",
      "durationMs": 2054.726999999957,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 8.091,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 469.001,
      "heapDeltaBytes": 5078848,
      "heapUsedBytes": 73261616,
      "domNodes": 18,
      "jsHeapTotalBytes": 20041728,
      "scriptDurationMs": 18.234,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1986.586999999986,
      "styleRecalcs": 78,
      "styleRecalcDurationMs": 43.52,
      "layouts": 12,
      "layoutDurationMs": 3.623,
      "taskDurationMs": 941.538,
      "heapDeltaBytes": -252556,
      "heapUsedBytes": 67766380,
      "domNodes": 63,
      "jsHeapTotalBytes": 21352448,
      "scriptDurationMs": 136.86599999999999,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1811.286999999993,
      "styleRecalcs": 73,
      "styleRecalcDurationMs": 35.78000000000001,
      "layouts": 12,
      "layoutDurationMs": 3.164,
      "taskDurationMs": 847.6570000000002,
      "heapDeltaBytes": -581460,
      "heapUsedBytes": 67494648,
      "domNodes": 57,
      "jsHeapTotalBytes": 21352448,
      "scriptDurationMs": 125.21200000000002,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1743.0850000000078,
      "styleRecalcs": 30,
      "styleRecalcDurationMs": 17.598,
      "layouts": 6,
      "layoutDurationMs": 0.7770000000000001,
      "taskDurationMs": 393.475,
      "heapDeltaBytes": 7864896,
      "heapUsedBytes": 75933844,
      "domNodes": 76,
      "jsHeapTotalBytes": 20303872,
      "scriptDurationMs": 19.499,
      "eventListeners": 19,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1739.5660000000817,
      "styleRecalcs": 31,
      "styleRecalcDurationMs": 17.86,
      "layouts": 6,
      "layoutDurationMs": 0.624,
      "taskDurationMs": 377.8419999999999,
      "heapDeltaBytes": 7973412,
      "heapUsedBytes": 76391496,
      "domNodes": 77,
      "jsHeapTotalBytes": 20041728,
      "scriptDurationMs": 19.394000000000002,
      "eventListeners": 19,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 593.3440000000019,
      "styleRecalcs": 11,
      "styleRecalcDurationMs": 8.261000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 400.068,
      "heapDeltaBytes": -12273836,
      "heapUsedBytes": 55937432,
      "domNodes": 18,
      "jsHeapTotalBytes": 21876736,
      "scriptDurationMs": 61.483000000000004,
      "eventListeners": 2,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 577.6479999999538,
      "styleRecalcs": 11,
      "styleRecalcDurationMs": 8.76,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 380.42600000000004,
      "heapDeltaBytes": -12227028,
      "heapUsedBytes": 55909328,
      "domNodes": 18,
      "jsHeapTotalBytes": 21614592,
      "scriptDurationMs": 60.503,
      "eventListeners": 0,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2033.2149999999842,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 8.549999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 685.7600000000001,
      "heapDeltaBytes": 8124040,
      "heapUsedBytes": 67713900,
      "domNodes": -283,
      "jsHeapTotalBytes": 5300224,
      "scriptDurationMs": 108.88499999999999,
      "eventListeners": -149,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2026.5249999999924,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 9.055,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 695.855,
      "heapDeltaBytes": 7705524,
      "heapUsedBytes": 66691776,
      "domNodes": -282,
      "jsHeapTotalBytes": 4513792,
      "scriptDurationMs": 109.926,
      "eventListeners": -179,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2208.712000000048,
      "styleRecalcs": 68,
      "styleRecalcDurationMs": 12.956,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1287.829,
      "heapDeltaBytes": 5569020,
      "heapUsedBytes": 65720584,
      "domNodes": -286,
      "jsHeapTotalBytes": 4739072,
      "scriptDurationMs": 431.566,
      "eventListeners": -147,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2190.59900000002,
      "styleRecalcs": 68,
      "styleRecalcDurationMs": 13.724999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1285.714,
      "heapDeltaBytes": -4176452,
      "heapUsedBytes": 56158776,
      "domNodes": -287,
      "jsHeapTotalBytes": 4775936,
      "scriptDurationMs": 426.182,
      "eventListeners": -179,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3182.512000000031,
      "styleRecalcs": 65,
      "styleRecalcDurationMs": 14.879,
      "layouts": 60,
      "layoutDurationMs": 7.1979999999999995,
      "taskDurationMs": 1482.0919999999999,
      "heapDeltaBytes": 23898540,
      "heapUsedBytes": 86081152,
      "domNodes": 12,
      "jsHeapTotalBytes": 8126464,
      "scriptDurationMs": 523.845,
      "eventListeners": 8,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3231.665000000021,
      "styleRecalcs": 64,
      "styleRecalcDurationMs": 14.211000000000002,
      "layouts": 60,
      "layoutDurationMs": 7.213000000000001,
      "taskDurationMs": 1510.8300000000002,
      "heapDeltaBytes": 23376560,
      "heapUsedBytes": 85297684,
      "domNodes": 10,
      "jsHeapTotalBytes": 8650752,
      "scriptDurationMs": 548.985,
      "eventListeners": 8,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "minimap-idle",
      "durationMs": 2030.5000000000177,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 7.397000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 677.1850000000001,
      "heapDeltaBytes": 8187608,
      "heapUsedBytes": 69644332,
      "domNodes": -284,
      "jsHeapTotalBytes": 4251648,
      "scriptDurationMs": 108.198,
      "eventListeners": -149,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "minimap-idle",
      "durationMs": 2068.538999999987,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 10.638000000000002,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 696.202,
      "heapDeltaBytes": 5978252,
      "heapUsedBytes": 66885324,
      "domNodes": -282,
      "jsHeapTotalBytes": 4775936,
      "scriptDurationMs": 109.671,
      "eventListeners": -177,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 601.6700000000128,
      "styleRecalcs": 47,
      "styleRecalcDurationMs": 10.543999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 404.713,
      "heapDeltaBytes": -12177200,
      "heapUsedBytes": 56221568,
      "domNodes": 20,
      "jsHeapTotalBytes": 22138880,
      "scriptDurationMs": 119.557,
      "eventListeners": 8,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 583.4150000000591,
      "styleRecalcs": 47,
      "styleRecalcDurationMs": 10.447,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 396.004,
      "heapDeltaBytes": -11969520,
      "heapUsedBytes": 56368044,
      "domNodes": 20,
      "jsHeapTotalBytes": 22401024,
      "scriptDurationMs": 114.823,
      "eventListeners": 8,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2031.517000000008,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 9.311000000000002,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 488.31499999999994,
      "heapDeltaBytes": -22065876,
      "heapUsedBytes": 46173256,
      "domNodes": 20,
      "jsHeapTotalBytes": 19906560,
      "scriptDurationMs": 14.279999999999998,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2016.7599999999766,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 7.378000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 449.74399999999997,
      "heapDeltaBytes": 5046852,
      "heapUsedBytes": 73178732,
      "domNodes": 18,
      "jsHeapTotalBytes": 20303872,
      "scriptDurationMs": 14.158999999999999,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1697.0509999999877,
      "styleRecalcs": 76,
      "styleRecalcDurationMs": 38.481,
      "layouts": 16,
      "layoutDurationMs": 5.009,
      "taskDurationMs": 781.6070000000001,
      "heapDeltaBytes": -4538520,
      "heapUsedBytes": 63938120,
      "domNodes": 62,
      "jsHeapTotalBytes": 20566016,
      "scriptDurationMs": 92.215,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1682.9020000000128,
      "styleRecalcs": 76,
      "styleRecalcDurationMs": 36.862,
      "layouts": 16,
      "layoutDurationMs": 3.9510000000000005,
      "taskDurationMs": 802.044,
      "heapDeltaBytes": -4141128,
      "heapUsedBytes": 64291472,
      "domNodes": 64,
      "jsHeapTotalBytes": 20566016,
      "scriptDurationMs": 91.76200000000001,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-transition-enter",
      "durationMs": 1430.3750000000264,
      "styleRecalcs": 17,
      "styleRecalcDurationMs": 30.148000000000007,
      "layouts": 13,
      "layoutDurationMs": 12.277,
      "taskDurationMs": 961.8240000000002,
      "heapDeltaBytes": 31094864,
      "heapUsedBytes": 99687476,
      "domNodes": 13673,
      "jsHeapTotalBytes": 15204352,
      "scriptDurationMs": 37.04099999999999,
      "eventListeners": 2375,
      "totalBlockingTimeMs": 135,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.80000000000109
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8354.217000000006,
      "styleRecalcs": 249,
      "styleRecalcDurationMs": 35.62,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 4565.599,
      "heapDeltaBytes": 9881156,
      "heapUsedBytes": 69197996,
      "domNodes": -284,
      "jsHeapTotalBytes": 6541312,
      "scriptDurationMs": 1413.25,
      "eventListeners": -131,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8493.360999999935,
      "styleRecalcs": 250,
      "styleRecalcDurationMs": 39.337,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 4777.892,
      "heapDeltaBytes": 15308968,
      "heapUsedBytes": 74347252,
      "domNodes": -283,
      "jsHeapTotalBytes": 7065600,
      "scriptDurationMs": 1447.0400000000002,
      "eventListeners": -131,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 17257.46700000002,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 17212.867,
      "heapDeltaBytes": -43991116,
      "heapUsedBytes": 167075668,
      "domNodes": -8312,
      "jsHeapTotalBytes": -9379840,
      "scriptDurationMs": 604.192,
      "eventListeners": -16389,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.776666666666763,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 17314.28500000004,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 17271.802,
      "heapDeltaBytes": -58648056,
      "heapUsedBytes": 167641572,
      "domNodes": -8315,
      "jsHeapTotalBytes": -8855552,
      "scriptDurationMs": 613.6129999999999,
      "eventListeners": -16389,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.776666666666763,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 20263.374,
      "styleRecalcs": 138,
      "styleRecalcDurationMs": 16.41900000000002,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 20216.313,
      "heapDeltaBytes": -30664696,
      "heapUsedBytes": 178173260,
      "domNodes": -8312,
      "jsHeapTotalBytes": -11022336,
      "scriptDurationMs": 887.205,
      "eventListeners": -16381,
      "totalBlockingTimeMs": 169,
      "frameDurationMs": 17.776666666666642,
      "p95FrameDurationMs": 16.80000000000291
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 20868.077000000085,
      "styleRecalcs": 141,
      "styleRecalcDurationMs": 16.569999999999972,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 20801.392,
      "heapDeltaBytes": -55575440,
      "heapUsedBytes": 154249892,
      "domNodes": -8312,
      "jsHeapTotalBytes": -10690560,
      "scriptDurationMs": 887.3350000000002,
      "eventListeners": -16383,
      "totalBlockingTimeMs": 164,
      "frameDurationMs": 17.780000000000047,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "workflow-execution",
      "durationMs": 481.1700000000201,
      "styleRecalcs": 15,
      "styleRecalcDurationMs": 19.355999999999998,
      "layouts": 2,
      "layoutDurationMs": 0.312,
      "taskDurationMs": 131.537,
      "heapDeltaBytes": -15591728,
      "heapUsedBytes": 51670340,
      "domNodes": 136,
      "jsHeapTotalBytes": 7720960,
      "scriptDurationMs": 10.072999999999999,
      "eventListeners": 99,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "workflow-execution",
      "durationMs": 450.26800000005096,
      "styleRecalcs": 14,
      "styleRecalcDurationMs": 19.403999999999996,
      "layouts": 3,
      "layoutDurationMs": 0.611,
      "taskDurationMs": 120.74399999999999,
      "heapDeltaBytes": -15763152,
      "heapUsedBytes": 51588356,
      "domNodes": 123,
      "jsHeapTotalBytes": 7720960,
      "scriptDurationMs": 9.001,
      "eventListeners": 97,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.700000000000728
    }
  ]
}

@comfy-pr-bot
comfy-pr-bot merged commit 2277943 into core/1.49 Aug 4, 2026
74 checks passed
@comfy-pr-bot
comfy-pr-bot deleted the backport-14715-to-core-1.49 branch August 4, 2026 23:51
@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.49   #14724    +/-   ##
===========================================
  Coverage      78.60%   78.60%            
===========================================
  Files           1789     1789            
  Lines         104423   104424     +1     
  Branches       32882    32025   -857     
===========================================
+ Hits           82078    82079     +1     
  Misses         21915    21915            
  Partials         430      430            
Flag Coverage Δ
unit 70.75% <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 61.50% <ø> (ø)
...tform/workspace/composables/useWorkspaceBilling.ts 74.91% <100.00%> (+0.08%) ⬆️
🚀 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.

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