Skip to content

[backport core/1.45] Add Desktop telemetry event sink (#12802)#12994

Open
benceruleanlu wants to merge 7 commits into
core/1.45from
bl/backport-12802-core-1.45
Open

[backport core/1.45] Add Desktop telemetry event sink (#12802)#12994
benceruleanlu wants to merge 7 commits into
core/1.45from
bl/backport-12802-core-1.45

Conversation

@benceruleanlu

Copy link
Copy Markdown
Member

Summary

Backports #12802 on top of the #12925 core/1.45 backport branch so Desktop host telemetry can register a host sink and forward supported telemetry events through the Desktop bridge.

Changes

Review Focus

Cherry-pick conflicts were in refreshRemoteConfig and executionStore execution_success handling. I kept the release-branch remote config shape and added only the unauthenticated fetch helper needed for host telemetry bootstrap. I trimmed main-only host sink methods/events and test fixture fields that do not exist on core/1.45, and kept dock_state out of this release backport stack.

Validation: pnpm typecheck via amend hook; pnpm test:unit src/platform/telemetry/initHostTelemetry.test.ts src/platform/telemetry/providers/host/HostTelemetrySink.test.ts src/stores/executionStore.test.ts. Pre-push knip passed; it still reports the existing flac metadata tag hint.

Adds `@comfyorg/comfyui-desktop-bridge-types` as a workspace package in
the frontend monorepo and changes the frontend app dependency to
`workspace:*`.

Adds a dedicated `Publish Desktop Bridge Types` workflow for publishing
`packages/comfyui-desktop-bridge-types` by its own package version,
without coupling it to the generated `@comfyorg/comfyui-frontend-types`
release. The generated frontend types package still emits a concrete
`@comfyorg/comfyui-desktop-bridge-types@0.1.2` dependency instead of
leaking workspace/catalog protocol references.

The Desktop2 missing-model path uses `window.__comfyDesktop2.isRemote()`
when available, but falls back to the legacy
`window.__comfyDesktop2Remote` marker so frontend rollout stays
compatible with older Desktop builds.

Paired Desktop PR: Comfy-Org/Comfy-Desktop#1112

(cherry picked from commit 05efee0)
Move run-button context assembly out of telemetry providers so telemetry
can initialize without importing app-mode/workspace state.

- **What**: Providers now accept completed `RunButtonProperties`;
run-button call sites use a workspace composable to build that payload.
- **Dependencies**: None.

(cherry picked from commit bc885f3)
@coderabbitai

coderabbitai Bot commented Jun 19, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Ignore keyword(s) in the title.

⛔ Ignored keywords (2)
  • [release]
  • [backport

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 8762774d-7239-495b-9dd2-74b9b0cf6079

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch bl/backport-12802-core-1.45

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@vercel

vercel Bot commented Jun 19, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
comfyui-frontend-node-search-preview Ready Ready Preview, Comment Jun 19, 2026 5:37am

@codecov

codecov Bot commented Jun 19, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 91.66667% with 12 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
src/main.ts 0.00% 7 Missing ⚠️
src/scripts/ui.ts 0.00% 4 Missing ⚠️
.../telemetry/providers/cloud/GtmTelemetryProvider.ts 0.00% 1 Missing ⚠️
@@              Coverage Diff              @@
##           core/1.45   #12994      +/-   ##
=============================================
+ Coverage      60.60%   60.68%   +0.08%     
=============================================
  Files           1424     1426       +2     
  Lines          73031    73159     +128     
  Branches       19382    19403      +21     
=============================================
+ Hits           44258    44395     +137     
+ Misses         28299    28290       -9     
  Partials         474      474              
Flag Coverage Δ
unit 60.68% <91.66%> (+0.08%) ⬆️

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

Files with missing lines Coverage Δ
src/platform/remoteConfig/refreshRemoteConfig.ts 100.00% <100.00%> (ø)
src/platform/telemetry/initHostTelemetry.ts 100.00% <100.00%> (ø)
...form/telemetry/providers/host/HostTelemetrySink.ts 100.00% <100.00%> (ø)
src/platform/telemetry/types.ts 100.00% <ø> (ø)
src/stores/executionStore.ts 87.82% <100.00%> (+0.72%) ⬆️
.../telemetry/providers/cloud/GtmTelemetryProvider.ts 65.11% <0.00%> (ø)
src/scripts/ui.ts 35.84% <0.00%> (+0.26%) ⬆️
src/main.ts 0.00% <0.00%> (ø)

... and 2 files with indirect coverage changes

🚀 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.

@benceruleanlu benceruleanlu marked this pull request as ready for review June 19, 2026 05:55
@dosubot dosubot Bot added the size:L This PR changes 100-499 lines, ignoring generated files. label Jun 19, 2026
@benceruleanlu

Copy link
Copy Markdown
Member Author

Better, some things dropped that don't exist in 45, core addition is here though

@github-actions

github-actions Bot commented Jun 19, 2026

Copy link
Copy Markdown

📦 Bundle Size

⏳ Size data collection in progress…

⚡ Performance Report

canvas-idle: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 83.8 MB heap
canvas-mouse-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 76.0 MB heap
canvas-zoom-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 60.7 MB heap
dom-widget-clipping: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 58.3 MB heap
large-graph-idle: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 78.2 MB heap
large-graph-pan: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 67.7 MB heap
large-graph-zoom: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 86.1 MB heap
minimap-idle: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 82.5 MB heap
subgraph-dom-widget-clipping: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 64.4 MB heap
subgraph-idle: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 61.5 MB heap
subgraph-mouse-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 74.3 MB heap
subgraph-transition-enter: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 161ms TBT · 75.4 MB heap
viewport-pan-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 135.5 MB heap
vue-large-graph-idle: · 58.1 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 158.6 MB heap
vue-large-graph-pan: · 58.1 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 45ms TBT · 162.6 MB heap
workflow-execution: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 54.0 MB heap

⚠️ 5 regressions detected

Show regressions
Metric Baseline PR (median) Δ Sig
canvas-idle: task duration 414ms 494ms +19% ⚠️ z=3.2
canvas-mouse-sweep: layout duration 3ms 6ms +72% ⚠️ z=12.1
canvas-zoom-sweep: task duration 409ms 377ms -8% ⚠️ z=2.2
dom-widget-clipping: task duration 402ms 409ms +2% ⚠️ z=2.7
large-graph-pan: script duration 441ms 454ms +3% ⚠️ z=2.3
All metrics
Metric Baseline PR (median) Δ Sig
canvas-idle: avg frame time 17ms 17ms +0% z=0.4
canvas-idle: p95 frame time 17ms 17ms +1%
canvas-idle: layout duration 0ms 0ms +0%
canvas-idle: style recalc duration 9ms 9ms -3% z=-2.4
canvas-idle: layout count 0 0 +0%
canvas-idle: style recalc count 9 9 -6% z=-4.7
canvas-idle: task duration 414ms 494ms +19% ⚠️ z=3.2
canvas-idle: script duration 21ms 22ms +2% z=-1.5
canvas-idle: TBT 0ms 0ms +0%
canvas-idle: heap used 53.4 MB 83.8 MB +57%
canvas-idle: DOM nodes 18 -289 -1703% z=-243.9
canvas-idle: event listeners 5 -181 -3710% z=-40.6
canvas-mouse-sweep: avg frame time 17ms 17ms +0% z=0.2
canvas-mouse-sweep: p95 frame time 17ms 17ms +0%
canvas-mouse-sweep: layout duration 3ms 6ms +72% ⚠️ z=12.1
canvas-mouse-sweep: style recalc duration 34ms 46ms +37% z=1.2
canvas-mouse-sweep: layout count 12 12 +0%
canvas-mouse-sweep: style recalc count 64 76 +18% z=-1.4
canvas-mouse-sweep: task duration 851ms 961ms +13% z=1.6
canvas-mouse-sweep: script duration 134ms 138ms +3% z=0.3
canvas-mouse-sweep: TBT 0ms 0ms +0%
canvas-mouse-sweep: heap used 57.0 MB 76.0 MB +33%
canvas-mouse-sweep: DOM nodes -206 -237 +15% z=-115.7
canvas-mouse-sweep: event listeners -84 -186 +123% z=-46.6
canvas-zoom-sweep: avg frame time 17ms 17ms +0% z=1.4
canvas-zoom-sweep: p95 frame time 17ms 17ms +0%
canvas-zoom-sweep: layout duration 1ms 1ms -1% z=-1.1
canvas-zoom-sweep: style recalc duration 23ms 18ms -21% z=-0.7
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 409ms 377ms -8% ⚠️ z=2.2
canvas-zoom-sweep: script duration 29ms 24ms -18% z=-1.1
canvas-zoom-sweep: TBT 0ms 0ms +0%
canvas-zoom-sweep: heap used 63.7 MB 60.7 MB -5%
canvas-zoom-sweep: DOM nodes -230 -77 -67% z=-197.4
canvas-zoom-sweep: event listeners -150 -78 -48% z=-19.5
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 11ms 9ms -19% z=-1.4
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 402ms 409ms +2% ⚠️ z=2.7
dom-widget-clipping: script duration 64ms 61ms -4% z=-2.1
dom-widget-clipping: TBT 0ms 0ms +0%
dom-widget-clipping: heap used 47.6 MB 58.3 MB +22%
dom-widget-clipping: DOM nodes -271 -279 +3% z=-211.9
dom-widget-clipping: event listeners -172 -184 +7% 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 10ms 10ms -2% z=-2.0
large-graph-idle: layout count 0 0 +0%
large-graph-idle: style recalc count 9 10 +18% z=-5.1
large-graph-idle: task duration 637ms 623ms -2% z=1.5
large-graph-idle: script duration 110ms 109ms -1% z=0.7
large-graph-idle: TBT 0ms 0ms +0%
large-graph-idle: heap used 57.6 MB 78.2 MB +36%
large-graph-idle: DOM nodes -134 -133 -1% z=-173.9
large-graph-idle: event listeners -74 -91 +24% z=-19.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 19ms 18ms -3% z=0.8
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 1213ms 1157ms -5% z=1.7
large-graph-pan: script duration 441ms 454ms +3% ⚠️ z=2.3
large-graph-pan: TBT 0ms 0ms +0%
large-graph-pan: heap used 88.5 MB 67.7 MB -24%
large-graph-pan: DOM nodes -127 -131 +3% z=-90.6
large-graph-pan: event listeners -85 6 -107% z=1.3
large-graph-zoom: avg frame time 17ms 17ms +0%
large-graph-zoom: p95 frame time 17ms 17ms -0%
large-graph-zoom: layout duration 8ms 8ms -2%
large-graph-zoom: style recalc duration 16ms 15ms -4%
large-graph-zoom: layout count 60 60 +0%
large-graph-zoom: style recalc count 62 62 -1%
large-graph-zoom: task duration 1433ms 1371ms -4%
large-graph-zoom: script duration 521ms 510ms -2%
large-graph-zoom: TBT 0ms 0ms +0%
large-graph-zoom: heap used 106.8 MB 86.1 MB -19%
large-graph-zoom: DOM nodes -139 3 -102%
large-graph-zoom: event listeners 8 8 +0%
minimap-idle: avg frame time 17ms 17ms -0% z=-0.4
minimap-idle: p95 frame time 17ms 17ms -0%
minimap-idle: layout duration 0ms 0ms +0%
minimap-idle: style recalc duration 7ms 8ms +14% z=-1.9
minimap-idle: layout count 0 0 +0%
minimap-idle: style recalc count 7 8 +15% z=-3.0
minimap-idle: task duration 669ms 584ms -13% z=1.2
minimap-idle: script duration 114ms 105ms -9% z=0.7
minimap-idle: TBT 0ms 0ms +0%
minimap-idle: heap used 78.1 MB 82.5 MB +6%
minimap-idle: DOM nodes -274 -127 -54% z=-106.9
minimap-idle: event listeners -174 -89 -49% z=-141.0
subgraph-dom-widget-clipping: avg frame time 17ms 17ms +0% z=0.1
subgraph-dom-widget-clipping: p95 frame time 17ms 17ms -0%
subgraph-dom-widget-clipping: layout duration 0ms 0ms +0%
subgraph-dom-widget-clipping: style recalc duration 11ms 12ms +8% z=-0.9
subgraph-dom-widget-clipping: layout count 0 0 +0%
subgraph-dom-widget-clipping: style recalc count 47 47 +0% z=-2.5
subgraph-dom-widget-clipping: task duration 379ms 385ms +1% z=0.4
subgraph-dom-widget-clipping: script duration 121ms 127ms +5% z=-0.2
subgraph-dom-widget-clipping: TBT 0ms 0ms +0%
subgraph-dom-widget-clipping: heap used 49.6 MB 64.4 MB +30%
subgraph-dom-widget-clipping: DOM nodes 19 19 +0% z=-2.8
subgraph-dom-widget-clipping: event listeners 8 8 +0% z=-1.4
subgraph-idle: avg frame time 17ms 17ms +0% z=0.4
subgraph-idle: p95 frame time 17ms 17ms -0%
subgraph-idle: layout duration 0ms 0ms +0%
subgraph-idle: style recalc duration 9ms 7ms -20% z=-4.1
subgraph-idle: layout count 0 0 +0%
subgraph-idle: style recalc count 10 8 -25% z=-5.2
subgraph-idle: task duration 478ms 392ms -18% z=0.7
subgraph-idle: script duration 22ms 17ms -22% z=-1.1
subgraph-idle: TBT 0ms 0ms +0%
subgraph-idle: heap used 71.3 MB 61.5 MB -14%
subgraph-idle: DOM nodes -273 -272 -0% z=-196.2
subgraph-idle: event listeners -176 -169 -4% variance too high
subgraph-mouse-sweep: avg frame time 17ms 17ms +0% z=0.8
subgraph-mouse-sweep: p95 frame time 17ms 17ms -0%
subgraph-mouse-sweep: layout duration 6ms 5ms -15% z=0.5
subgraph-mouse-sweep: style recalc duration 41ms 41ms -2% z=-0.6
subgraph-mouse-sweep: layout count 16 16 +0%
subgraph-mouse-sweep: style recalc count 75 75 -1% z=-2.9
subgraph-mouse-sweep: task duration 748ms 811ms +8% z=0.6
subgraph-mouse-sweep: script duration 103ms 104ms +1% z=0.5
subgraph-mouse-sweep: TBT 0ms 0ms +0%
subgraph-mouse-sweep: heap used 53.4 MB 74.3 MB +39%
subgraph-mouse-sweep: DOM nodes -224 -234 +4% z=-134.7
subgraph-mouse-sweep: event listeners -172 -194 +13% 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 14ms 14ms +0%
subgraph-transition-enter: style recalc duration 29ms 30ms +2%
subgraph-transition-enter: layout count 4 4 +0%
subgraph-transition-enter: style recalc count 14 16 +14%
subgraph-transition-enter: task duration 956ms 788ms -18%
subgraph-transition-enter: script duration 43ms 34ms -22%
subgraph-transition-enter: TBT 161ms 161ms +0%
subgraph-transition-enter: heap used 134.9 MB 75.4 MB -44%
subgraph-transition-enter: DOM nodes 12442 13513 +9%
subgraph-transition-enter: event listeners 1286 2527 +97%
viewport-pan-sweep: avg frame time 17ms 17ms -0%
viewport-pan-sweep: p95 frame time 17ms 17ms -0%
viewport-pan-sweep: layout duration 0ms 0ms +0%
viewport-pan-sweep: style recalc duration 55ms 56ms +1%
viewport-pan-sweep: layout count 0 0 +0%
viewport-pan-sweep: style recalc count 251 251 +0%
viewport-pan-sweep: task duration 4396ms 4525ms +3%
viewport-pan-sweep: script duration 1405ms 1488ms +6%
viewport-pan-sweep: TBT 0ms 0ms +0%
viewport-pan-sweep: heap used 98.5 MB 135.5 MB +38%
viewport-pan-sweep: DOM nodes -279 -298 +7%
viewport-pan-sweep: event listeners -168 -182 +8%
vue-large-graph-idle: avg frame time 17ms 17ms +0%
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 13525ms 13242ms -2%
vue-large-graph-idle: script duration 626ms 622ms -1%
vue-large-graph-idle: TBT 0ms 0ms +0%
vue-large-graph-idle: heap used 159.3 MB 158.6 MB -0%
vue-large-graph-idle: DOM nodes -3320 -3298 -1%
vue-large-graph-idle: event listeners -16474 -16468 -0%
vue-large-graph-pan: avg frame time 18ms 17ms -3%
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 20ms 20ms -1%
vue-large-graph-pan: layout count 0 0 +0%
vue-large-graph-pan: style recalc count 73 72 -2%
vue-large-graph-pan: task duration 15002ms 14991ms -0%
vue-large-graph-pan: script duration 917ms 925ms +1%
vue-large-graph-pan: TBT 37ms 45ms +23%
vue-large-graph-pan: heap used 154.2 MB 162.6 MB +5%
vue-large-graph-pan: DOM nodes -3304 -5815 +76%
vue-large-graph-pan: event listeners -16467 -16465 -0%
workflow-execution: avg frame time 17ms 17ms -0% z=0.1
workflow-execution: p95 frame time 17ms 17ms +0%
workflow-execution: layout duration 1ms 2ms +12% z=0.5
workflow-execution: style recalc duration 24ms 24ms +1% z=-0.0
workflow-execution: layout count 5 5 +0% z=0.1
workflow-execution: style recalc count 13 15 +12% z=-1.6
workflow-execution: task duration 188ms 144ms -23% z=2.0
workflow-execution: script duration 19ms 21ms +12% z=-2.6
workflow-execution: TBT 0ms 0ms +0%
workflow-execution: heap used 46.2 MB 54.0 MB +17%
workflow-execution: DOM nodes -161 -3 -98% z=-23.0
workflow-execution: event listeners -136 -29 -79% z=-18.4
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-06-19T17:55:40.979Z",
  "gitSha": "21ecb5c8df68c0c8a2e82f51d8ffc2fde3d61101",
  "branch": "bl/backport-12802-core-1.45",
  "measurements": [
    {
      "name": "canvas-idle",
      "durationMs": 2042.7839999999833,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 7.719,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 480.731,
      "heapDeltaBytes": 36095276,
      "heapUsedBytes": 88986820,
      "domNodes": -274,
      "jsHeapTotalBytes": 35868672,
      "scriptDurationMs": 21.085,
      "eventListeners": -174,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "canvas-idle",
      "durationMs": 2078.41499999995,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 9.665000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 507.336,
      "heapDeltaBytes": 17857008,
      "heapUsedBytes": 86659688,
      "domNodes": -303,
      "jsHeapTotalBytes": 39276544,
      "scriptDurationMs": 22.591,
      "eventListeners": -187,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 2093.1850000000054,
      "styleRecalcs": 79,
      "styleRecalcDurationMs": 51.525,
      "layouts": 12,
      "layoutDurationMs": 7.832999999999999,
      "taskDurationMs": 1049.3220000000001,
      "heapDeltaBytes": 10093496,
      "heapUsedBytes": 78477228,
      "domNodes": -241,
      "jsHeapTotalBytes": 35344384,
      "scriptDurationMs": 144.753,
      "eventListeners": -180,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1820.8170000000337,
      "styleRecalcs": 72,
      "styleRecalcDurationMs": 41.241,
      "layouts": 12,
      "layoutDurationMs": 4.14,
      "taskDurationMs": 872.12,
      "heapDeltaBytes": 27722592,
      "heapUsedBytes": 80981628,
      "domNodes": -233,
      "jsHeapTotalBytes": 30101504,
      "scriptDurationMs": 130.581,
      "eventListeners": -192,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1738.0559999999718,
      "styleRecalcs": 31,
      "styleRecalcDurationMs": 17.823999999999998,
      "layouts": 6,
      "layoutDurationMs": 0.5630000000000002,
      "taskDurationMs": 346.698,
      "heapDeltaBytes": 1501940,
      "heapUsedBytes": 59895844,
      "domNodes": 77,
      "jsHeapTotalBytes": 26476544,
      "scriptDurationMs": 23.896,
      "eventListeners": 19,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1782.3419999999714,
      "styleRecalcs": 30,
      "styleRecalcDurationMs": 18.341,
      "layouts": 6,
      "layoutDurationMs": 0.624,
      "taskDurationMs": 407.84099999999995,
      "heapDeltaBytes": 14116468,
      "heapUsedBytes": 67331372,
      "domNodes": -231,
      "jsHeapTotalBytes": 23810048,
      "scriptDurationMs": 23.706999999999997,
      "eventListeners": -174,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 621.9839999999976,
      "styleRecalcs": 12,
      "styleRecalcDurationMs": 10.229000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 432.981,
      "heapDeltaBytes": 4384208,
      "heapUsedBytes": 72576008,
      "domNodes": -283,
      "jsHeapTotalBytes": 6508544,
      "scriptDurationMs": 63.60399999999999,
      "eventListeners": -198,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 591.9619999999668,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 7.275,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 385.034,
      "heapDeltaBytes": -2729464,
      "heapUsedBytes": 49700332,
      "domNodes": -274,
      "jsHeapTotalBytes": -2404352,
      "scriptDurationMs": 58.24999999999999,
      "eventListeners": -170,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666682,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2058.8010000000168,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 11.134,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 691.0540000000001,
      "heapDeltaBytes": 20528632,
      "heapUsedBytes": 103235664,
      "domNodes": -285,
      "jsHeapTotalBytes": 42610688,
      "scriptDurationMs": 120.475,
      "eventListeners": -188,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2004.1410000000042,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 9.191,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 554.3340000000001,
      "heapDeltaBytes": -10192792,
      "heapUsedBytes": 60763952,
      "domNodes": 20,
      "jsHeapTotalBytes": 11939840,
      "scriptDurationMs": 98.18999999999998,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2085.286999999994,
      "styleRecalcs": 67,
      "styleRecalcDurationMs": 16.381000000000004,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1101.158,
      "heapDeltaBytes": 2190808,
      "heapUsedBytes": 56483920,
      "domNodes": -277,
      "jsHeapTotalBytes": 262144,
      "scriptDurationMs": 411.682,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2137.832000000003,
      "styleRecalcs": 69,
      "styleRecalcDurationMs": 19.521000000000004,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1213.012,
      "heapDeltaBytes": 12975316,
      "heapUsedBytes": 85462660,
      "domNodes": 16,
      "jsHeapTotalBytes": 16834560,
      "scriptDurationMs": 496.8210000000001,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3112.667999999985,
      "styleRecalcs": 61,
      "styleRecalcDurationMs": 14.549,
      "layouts": 60,
      "layoutDurationMs": 7.704999999999999,
      "taskDurationMs": 1347.753,
      "heapDeltaBytes": 13472580,
      "heapUsedBytes": 69236136,
      "domNodes": 2,
      "jsHeapTotalBytes": 524288,
      "scriptDurationMs": 510.36800000000005,
      "eventListeners": 8,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3200.080000000071,
      "styleRecalcs": 62,
      "styleRecalcDurationMs": 15.279000000000002,
      "layouts": 60,
      "layoutDurationMs": 7.693999999999999,
      "taskDurationMs": 1393.892,
      "heapDeltaBytes": 57153632,
      "heapUsedBytes": 111347980,
      "domNodes": 4,
      "jsHeapTotalBytes": 44564480,
      "scriptDurationMs": 509.77700000000004,
      "eventListeners": 8,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "minimap-idle",
      "durationMs": 1993.8599999999838,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 9.275000000000002,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 558.106,
      "heapDeltaBytes": 10348436,
      "heapUsedBytes": 69248008,
      "domNodes": 16,
      "jsHeapTotalBytes": 5767168,
      "scriptDurationMs": 101.87400000000001,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "minimap-idle",
      "durationMs": 2013.6849999998958,
      "styleRecalcs": 7,
      "styleRecalcDurationMs": 6.644000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 609.127,
      "heapDeltaBytes": 51310936,
      "heapUsedBytes": 103768236,
      "domNodes": -270,
      "jsHeapTotalBytes": 40894464,
      "scriptDurationMs": 107.58300000000001,
      "eventListeners": -183,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 572.4769999999921,
      "styleRecalcs": 46,
      "styleRecalcDurationMs": 10.836,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 376.37600000000003,
      "heapDeltaBytes": 7719540,
      "heapUsedBytes": 66299204,
      "domNodes": 18,
      "jsHeapTotalBytes": 17301504,
      "scriptDurationMs": 123.28699999999999,
      "eventListeners": 8,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 580.4929999999331,
      "styleRecalcs": 47,
      "styleRecalcDurationMs": 12.879999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 393.178,
      "heapDeltaBytes": 13293436,
      "heapUsedBytes": 68656240,
      "domNodes": 20,
      "jsHeapTotalBytes": 18350080,
      "scriptDurationMs": 130.12900000000002,
      "eventListeners": 8,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2009.3219999999974,
      "styleRecalcs": 6,
      "styleRecalcDurationMs": 5.844,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 386.4310000000001,
      "heapDeltaBytes": 19902948,
      "heapUsedBytes": 64646436,
      "domNodes": -274,
      "jsHeapTotalBytes": 17825792,
      "scriptDurationMs": 18.059999999999995,
      "eventListeners": -157,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2006.528000000003,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 8.528,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 396.57499999999993,
      "heapDeltaBytes": 11813600,
      "heapUsedBytes": 64294324,
      "domNodes": -269,
      "jsHeapTotalBytes": 15421440,
      "scriptDurationMs": 16.325,
      "eventListeners": -181,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1746.0640000000467,
      "styleRecalcs": 72,
      "styleRecalcDurationMs": 38.904999999999994,
      "layouts": 16,
      "layoutDurationMs": 4.715999999999999,
      "taskDurationMs": 808.833,
      "heapDeltaBytes": 26229724,
      "heapUsedBytes": 79442184,
      "domNodes": -231,
      "jsHeapTotalBytes": 31936512,
      "scriptDurationMs": 102.94500000000001,
      "eventListeners": -195,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1756.9320000000062,
      "styleRecalcs": 77,
      "styleRecalcDurationMs": 42.11300000000001,
      "layouts": 16,
      "layoutDurationMs": 4.983,
      "taskDurationMs": 812.807,
      "heapDeltaBytes": 8020672,
      "heapUsedBytes": 76437292,
      "domNodes": -237,
      "jsHeapTotalBytes": 36392960,
      "scriptDurationMs": 104.84900000000002,
      "eventListeners": -192,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-transition-enter",
      "durationMs": 1133.7470000000849,
      "styleRecalcs": 16,
      "styleRecalcDurationMs": 29.567999999999998,
      "layouts": 4,
      "layoutDurationMs": 14.406999999999996,
      "taskDurationMs": 788.3830000000003,
      "heapDeltaBytes": 4215228,
      "heapUsedBytes": 79037640,
      "domNodes": 13513,
      "jsHeapTotalBytes": 15728640,
      "scriptDurationMs": 33.689,
      "eventListeners": 2527,
      "totalBlockingTimeMs": 161,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8525.433000000021,
      "styleRecalcs": 251,
      "styleRecalcDurationMs": 56.793,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 4437.9039999999995,
      "heapDeltaBytes": 83882872,
      "heapUsedBytes": 135783208,
      "domNodes": -310,
      "jsHeapTotalBytes": 74448896,
      "scriptDurationMs": 1396.306,
      "eventListeners": -180,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8546.024999999987,
      "styleRecalcs": 251,
      "styleRecalcDurationMs": 54.745000000000005,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 4612.739,
      "heapDeltaBytes": 67339028,
      "heapUsedBytes": 148405924,
      "domNodes": -286,
      "jsHeapTotalBytes": 83972096,
      "scriptDurationMs": 1579.836,
      "eventListeners": -183,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 13513.418000000001,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 13495.948999999999,
      "heapDeltaBytes": -12145200,
      "heapUsedBytes": 167702344,
      "domNodes": -3288,
      "jsHeapTotalBytes": 19398656,
      "scriptDurationMs": 659.67,
      "eventListeners": -16462,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.223333333333358,
      "p95FrameDurationMs": 16.80000000000291
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 13007.960000000025,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 12988.292000000001,
      "heapDeltaBytes": -38469248,
      "heapUsedBytes": 164982132,
      "domNodes": -3308,
      "jsHeapTotalBytes": 17010688,
      "scriptDurationMs": 584.195,
      "eventListeners": -16474,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.220000000000073,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 15311.780999999995,
      "styleRecalcs": 76,
      "styleRecalcDurationMs": 20.793000000000006,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 15286.671999999999,
      "heapDeltaBytes": -33673652,
      "heapUsedBytes": 163474796,
      "domNodes": -3300,
      "jsHeapTotalBytes": 17563648,
      "scriptDurationMs": 928.9409999999999,
      "eventListeners": -16466,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.223333333333237,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 14718.386999999893,
      "styleRecalcs": 67,
      "styleRecalcDurationMs": 18.496000000000013,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 14694.438000000002,
      "heapDeltaBytes": -39434220,
      "heapUsedBytes": 177549592,
      "domNodes": -8329,
      "jsHeapTotalBytes": 26017792,
      "scriptDurationMs": 921.0019999999998,
      "eventListeners": -16464,
      "totalBlockingTimeMs": 90,
      "frameDurationMs": 17.220000000000073,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "workflow-execution",
      "durationMs": 467.4400000000105,
      "styleRecalcs": 18,
      "styleRecalcDurationMs": 26.439999999999998,
      "layouts": 5,
      "layoutDurationMs": 1.479,
      "taskDurationMs": 133.065,
      "heapDeltaBytes": 5308916,
      "heapUsedBytes": 64759156,
      "domNodes": 168,
      "jsHeapTotalBytes": 3145728,
      "scriptDurationMs": 23.088,
      "eventListeners": 69,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "workflow-execution",
      "durationMs": 182.82199999998738,
      "styleRecalcs": 11,
      "styleRecalcDurationMs": 21.841,
      "layouts": 5,
      "layoutDurationMs": 1.767,
      "taskDurationMs": 155.81199999999998,
      "heapDeltaBytes": -5303120,
      "heapUsedBytes": 48553720,
      "domNodes": -173,
      "jsHeapTotalBytes": -1880064,
      "scriptDurationMs": 19.643,
      "eventListeners": -126,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000273
    }
  ]
}

- initialize a Desktop-only telemetry provider in ComfyUI_frontend
- forward existing typed telemetry events through
`window.__comfyDesktop2.Telemetry.capture` using the existing event
names
- move the Desktop 2 bridge typing to the shared ambient types and let
run/execution telemetry fire when any provider is registered

- Desktop PR: Comfy-Org/Comfy-Desktop#1069

- `pnpm typecheck`
- `pnpm format:check`
- `pnpm lint`
- `pnpm knip`
- `pnpm test:unit src/platform/missingModel/missingModelDownload.test.ts
src/platform/telemetry/initDesktopTelemetry.test.ts
src/platform/telemetry/providers/desktop/DesktopTelemetryProvider.test.ts`
- YAML lint over tracked YAML files with `.yamllint`

[MAR-240](https://linear.app/comfyorg/issue/MAR-240/frontend-telemetry-pipeline-for-desktop-app-eventsink-refactor)

(cherry picked from commit 5acd76c)
@benceruleanlu benceruleanlu force-pushed the bl/backport-12802-core-1.45 branch from cbd8976 to a6e7fac Compare June 19, 2026 06:03
Base automatically changed from bl/backport-12925-core-1.45 to core/1.45 June 19, 2026 16:42
@dosubot dosubot Bot added size:XL This PR changes 500-999 lines, ignoring generated files. and removed size:L This PR changes 100-499 lines, ignoring generated files. labels Jun 19, 2026
@dosubot dosubot Bot added size:L This PR changes 100-499 lines, ignoring generated files. and removed size:XL This PR changes 500-999 lines, ignoring generated files. labels Jun 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L This PR changes 100-499 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants