[backport cloud/1.45] feat(billing): align workspace Plan & Credits panel to DES-186 (FE-768)#13300
[backport cloud/1.45] feat(billing): align workspace Plan & Credits panel to DES-186 (FE-768)#13300comfy-pr-bot wants to merge 1 commit into
Conversation
…8) (#12761) ## Summary Aligns the Settings ▸ Workspaces **Plan & Credits** panel to DES-186: state-driven subtitle, team/personal header variants, design perks, and a shared footer help bar. Stacked on FE-964 (#12734), which owns the CreditsTile content. ## Changes - **What**: - Subtitle per design variants (Figma 3255-21472): Active → "Renews on {date}", Ending → "Ends on {date}". `subscription_status: 'scheduled'` falls back to the Active treatment — the facade exposes no scheduled-plan target/date fields yet, so "Changes to {plan} on {date}" cannot be rendered (template reserved in i18n-ready form; see Linear note). - Team-active header: plan name "Team" + seat-aware workspace total (`seat_summary.total_cost_cents` from `/billing/plans`) as "$X USD / mo"; the Next-month-invoice card reads the same computed so the two can't disagree. Per-member tier price + "USD / mo / member" kept as the plans-unresolved fallback. - CTAs per design + designer annotation: "Manage billing" + "Change plan" on a team plan, "Upgrade plan" on personal. - Team perks (Figma 2993-14789): "Your plan includes everything in **Pro**, plus:" (i18n-t, plan name emphasized) + invite members / concurrent runs / shared credit pool / role-based permissions. - Personal no-subscription variant (Figma 2993-14604): "Free · $0 USD / mo" header + primary Subscribe CTA + "What's included:" with the max-runtime perk → "10 min max runtime" (`subscription.maxDuration.free` set to 10 min per DES 3253-16079). - Footer help bar (Learn more / Partner Nodes pricing table / Message support / Invoice history) extracted into `SubscriptionFooterLinks.vue`, shared by workspace + legacy panels; new surface-specific key for "Partner Nodes pricing table". - **Breaking**: none. ## Review Focus - Seat-aware price source (`currentPlan.seat_summary.total_cost_cents`) vs per-member fallback — fixture locks $320 vs $80. - `'scheduled'` → Active fallback (adapter-level test in `useWorkspaceBilling.test.ts`). - Free-state perk copy: `subscription.maxDuration.free` set to **10 min** per DES 3253-16079 (design confirmed; was 30 min). - Free-state overflow (`⋯`) button intentionally omitted: the only existing menu item (Cancel Subscription) doesn't apply to a free plan. Linear: [FE-768](https://linear.app/comfyorg/issue/FE-768/updates-to-workspaces-tab-of-settings) (Plan & Credits half; Members invite UI ships in #12759) ## Screenshots Captured on `local.comfy.org` dev (cloud-prod backend, authenticated session). Team and free states use client-side API stubs (XHR-level for `/api/billing/*` + `/api/workspace/*`, fetch-level for legacy `/customers/*`) since the test workspaces are unsubscribed; personal-active rows are real account data. | State | Before (FE-964 base) | After (this PR) | |---|---|---| | Team plan — active | <img width="400" alt="before: Pro, $100 USD/mo/member, Renews, Manage Payment/Upgrade Plan" src="https://github.com/user-attachments/assets/622a9a27-1875-4c08-92b7-9e43a8067c59" /> | <img width="400" alt="after: Team, $300 USD/mo, Renews on, Manage billing/Change plan, design perks" src="https://github.com/user-attachments/assets/adb0f767-d508-4455-ad8e-ee2d6ac419dc" /> | | Team plan — ending (cancelled) | <img width="400" alt="before: Expires Jul 10, 2026" src="https://github.com/user-attachments/assets/cb4bb978-4e8b-4372-8ecc-7265f477a828" /> | <img width="400" alt="after: Ends on Jul 10, 2026" src="https://github.com/user-attachments/assets/5466b99a-d016-4eba-a60f-99b87bd2693e" /> | | Personal — active (real data) | <img width="400" alt="before: Renews Mar 10 2027, Manage Payment" src="https://github.com/user-attachments/assets/34018400-930b-4147-bd0d-398fb4d159ee" /> | <img width="400" alt="after: Renews on Mar 10 2027, Manage billing" src="https://github.com/user-attachments/assets/87af7fa7-28cf-4cdf-b9a2-158b2a6eb979" /> | | Personal — no subscription | <img width="400" alt="before: generic not-on-a-subscription prompt" src="https://github.com/user-attachments/assets/7ee5b36e-1e07-4630-a9b7-680f4fad349b" /> | <img width="400" alt="after: Free $0 USD/mo header + Subscribe + What's included" src="https://github.com/user-attachments/assets/1eda1791-e3de-46c3-bb69-df0365545211" /> | --- ## Perk descriptions — designer QA (DES `3253-16079`) CDP-verified the Plan & Credits **perk list** per current plan against Figma. Captured at the full 1280px settings layout (width fix: #12849; the perk text/content is identical at the current 960px). | Plan | "Includes" header | Perks shown | |---|---|---| | Free (no subscription) | What's included: | 10 min max runtime | | Personal — Pro | Your plan includes: | 1 hr max run duration · RTX 6000 Pro (96GB VRAM) · Add more credits whenever · Import your own LoRAs | | Team | Your plan includes everything in **Pro**, plus: | Invite members · Members can run workflows concurrently · Shared credit pool for all members · Role-based permissions | **Free — Figma `3253-16079` (left) vs implementation (right):** | Figma | Implementation | |---|---| | <img width="480" alt="Figma DES 3253-16079 free settings" src="https://github.com/user-attachments/assets/cfe79570-f3ba-4627-a8eb-348b9158f6ac" /> | <img width="480" alt="App free settings — What's included: 10 min max runtime" src="https://github.com/user-attachments/assets/d89898e4-d819-486c-9b4f-c2fd61916783" /> | **Personal — Pro:** <img width="640" alt="App personal Pro — Your plan includes" src="https://github.com/user-attachments/assets/adc2fd9f-d249-469f-b947-1ec8f674cbb0" /> **Team:** <img width="640" alt="App team — Your plan includes everything in Pro, plus" src="https://github.com/user-attachments/assets/e7378067-11a2-411b-b37b-98c8aecb82b1" /> Open items (design): - Free perk now reads **"10 min max runtime"** (`subscription.maxDuration.free` set to 10 min) per Figma `3253-16079` — ✅ applied in this PR. - Personal-plan perk **stacking** (show lower-tier perks under the current tier) is an unresolved Figma thread on this node — not implemented. --------- Co-authored-by: GitHub Action <action@github.com>
Codecov Report✅ All modified and coverable lines are covered by tests. @@ Coverage Diff @@
## cloud/1.45 #13300 +/- ##
=============================================
Coverage ? 62.41%
=============================================
Files ? 1466
Lines ? 75158
Branches ? 21046
=============================================
Hits ? 46910
Misses ? 27813
Partials ? 435
Flags with carried forward coverage won't be shown. Click here to find out more.
🚀 New features to boost your workflow:
|
📦 Bundle Size
⚡ Performance Report
Absolute values
Raw data{
"timestamp": "2026-06-30T00:00:19.846Z",
"gitSha": "5b94a5590af21cac0c365b121776127390de67d8",
"branch": "backport-12761-to-cloud-1.45",
"measurements": [
{
"name": "canvas-idle",
"durationMs": 2037.1710000000007,
"styleRecalcs": 8,
"styleRecalcDurationMs": 6.866999999999998,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 369.209,
"heapDeltaBytes": 10243516,
"heapUsedBytes": 63292108,
"domNodes": -294,
"jsHeapTotalBytes": 15663104,
"scriptDurationMs": 14.041999999999998,
"eventListeners": -178,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "canvas-idle",
"durationMs": 2042.895000000044,
"styleRecalcs": 9,
"styleRecalcDurationMs": 8.216,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 350.27,
"heapDeltaBytes": 2990972,
"heapUsedBytes": 65903308,
"domNodes": 18,
"jsHeapTotalBytes": 15204352,
"scriptDurationMs": 15.274,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "canvas-mouse-sweep",
"durationMs": 1882.630000000006,
"styleRecalcs": 76,
"styleRecalcDurationMs": 53.767999999999994,
"layouts": 12,
"layoutDurationMs": 3.75,
"taskDurationMs": 880.067,
"heapDeltaBytes": -2119220,
"heapUsedBytes": 62155448,
"domNodes": 58,
"jsHeapTotalBytes": 24117248,
"scriptDurationMs": 135.22,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "canvas-mouse-sweep",
"durationMs": 1792.416000000003,
"styleRecalcs": 74,
"styleRecalcDurationMs": 34.931999999999995,
"layouts": 12,
"layoutDurationMs": 3.078,
"taskDurationMs": 718.714,
"heapDeltaBytes": -7665168,
"heapUsedBytes": 52111664,
"domNodes": 57,
"jsHeapTotalBytes": 26476544,
"scriptDurationMs": 122.979,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "canvas-zoom-sweep",
"durationMs": 1757.1099999999547,
"styleRecalcs": 31,
"styleRecalcDurationMs": 19.415000000000003,
"layouts": 6,
"layoutDurationMs": 0.689,
"taskDurationMs": 413.096,
"heapDeltaBytes": -2952152,
"heapUsedBytes": 65183060,
"domNodes": -226,
"jsHeapTotalBytes": 12779520,
"scriptDurationMs": 30.523000000000003,
"eventListeners": -161,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "canvas-zoom-sweep",
"durationMs": 1739.0189999999848,
"styleRecalcs": 31,
"styleRecalcDurationMs": 18.874000000000002,
"layouts": 6,
"layoutDurationMs": 0.654,
"taskDurationMs": 381.36800000000005,
"heapDeltaBytes": 5588340,
"heapUsedBytes": 74095264,
"domNodes": -229,
"jsHeapTotalBytes": 17235968,
"scriptDurationMs": 28.315,
"eventListeners": -184,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "dom-widget-clipping",
"durationMs": 604.6160000000214,
"styleRecalcs": 12,
"styleRecalcDurationMs": 8.635,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 348.79900000000004,
"heapDeltaBytes": -11028060,
"heapUsedBytes": 51533412,
"domNodes": 20,
"jsHeapTotalBytes": 16252928,
"scriptDurationMs": 63.730999999999995,
"eventListeners": 2,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "dom-widget-clipping",
"durationMs": 580.6830000000218,
"styleRecalcs": 11,
"styleRecalcDurationMs": 7.668999999999999,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 339.166,
"heapDeltaBytes": 7395116,
"heapUsedBytes": 65911880,
"domNodes": 18,
"jsHeapTotalBytes": 16777216,
"scriptDurationMs": 59.3,
"eventListeners": 0,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000273
},
{
"name": "large-graph-idle",
"durationMs": 2024.768999999992,
"styleRecalcs": 10,
"styleRecalcDurationMs": 9.873,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 568.9329999999999,
"heapDeltaBytes": -7243236,
"heapUsedBytes": 63288456,
"domNodes": 20,
"jsHeapTotalBytes": 12988416,
"scriptDurationMs": 112.08100000000002,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333335,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "large-graph-idle",
"durationMs": 2033.2730000000083,
"styleRecalcs": 7,
"styleRecalcDurationMs": 5.464,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 533.9499999999999,
"heapDeltaBytes": 31915756,
"heapUsedBytes": 115020808,
"domNodes": -293,
"jsHeapTotalBytes": 36560896,
"scriptDurationMs": 82.826,
"eventListeners": -175,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "large-graph-pan",
"durationMs": 2119.700000000023,
"styleRecalcs": 66,
"styleRecalcDurationMs": 16.674000000000003,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 1136.438,
"heapDeltaBytes": 1661848,
"heapUsedBytes": 56451736,
"domNodes": -276,
"jsHeapTotalBytes": 262144,
"scriptDurationMs": 415.863,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "large-graph-pan",
"durationMs": 2127.4459999999635,
"styleRecalcs": 70,
"styleRecalcDurationMs": 19.679000000000002,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 1038.011,
"heapDeltaBytes": 7482084,
"heapUsedBytes": 68259676,
"domNodes": 20,
"jsHeapTotalBytes": 6467584,
"scriptDurationMs": 392.18800000000005,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333335,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "large-graph-zoom",
"durationMs": 3132.0160000000214,
"styleRecalcs": 62,
"styleRecalcDurationMs": 15.084000000000003,
"layouts": 60,
"layoutDurationMs": 7.7509999999999994,
"taskDurationMs": 1373.833,
"heapDeltaBytes": 57085144,
"heapUsedBytes": 113305036,
"domNodes": 4,
"jsHeapTotalBytes": 46137344,
"scriptDurationMs": 493.11499999999995,
"eventListeners": 8,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "large-graph-zoom",
"durationMs": 3116.031000000021,
"styleRecalcs": 66,
"styleRecalcDurationMs": 18.962,
"layouts": 60,
"layoutDurationMs": 7.33,
"taskDurationMs": 1285.072,
"heapDeltaBytes": -4868076,
"heapUsedBytes": 68908324,
"domNodes": 14,
"jsHeapTotalBytes": 9842688,
"scriptDurationMs": 491.94599999999997,
"eventListeners": 8,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "minimap-idle",
"durationMs": 2072.296000000051,
"styleRecalcs": 6,
"styleRecalcDurationMs": 5.342,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 679.9060000000002,
"heapDeltaBytes": 62416020,
"heapUsedBytes": 116675904,
"domNodes": -272,
"jsHeapTotalBytes": 36438016,
"scriptDurationMs": 121.506,
"eventListeners": -183,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "minimap-idle",
"durationMs": 2017.0029999999315,
"styleRecalcs": 9,
"styleRecalcDurationMs": 8.128,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 464.625,
"heapDeltaBytes": -10294232,
"heapUsedBytes": 62228200,
"domNodes": 18,
"jsHeapTotalBytes": 11153408,
"scriptDurationMs": 78.011,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "subgraph-dom-widget-clipping",
"durationMs": 626.2789999999541,
"styleRecalcs": 47,
"styleRecalcDurationMs": 12.754999999999999,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 452.02200000000005,
"heapDeltaBytes": -22162432,
"heapUsedBytes": 46309616,
"domNodes": -278,
"jsHeapTotalBytes": 5701632,
"scriptDurationMs": 129.04399999999998,
"eventListeners": -164,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333335,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "subgraph-dom-widget-clipping",
"durationMs": 586.153999999965,
"styleRecalcs": 48,
"styleRecalcDurationMs": 12.057,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 349.53599999999994,
"heapDeltaBytes": 8210516,
"heapUsedBytes": 67495840,
"domNodes": 22,
"jsHeapTotalBytes": 18350080,
"scriptDurationMs": 117.771,
"eventListeners": 8,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666682,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "subgraph-idle",
"durationMs": 2011.0880000000293,
"styleRecalcs": 11,
"styleRecalcDurationMs": 10.140999999999998,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 451.2200000000001,
"heapDeltaBytes": 25152680,
"heapUsedBytes": 74750544,
"domNodes": 22,
"jsHeapTotalBytes": 18350080,
"scriptDurationMs": 28.535999999999998,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "subgraph-idle",
"durationMs": 2015.1709999998957,
"styleRecalcs": 11,
"styleRecalcDurationMs": 10.496,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 359.644,
"heapDeltaBytes": -3325508,
"heapUsedBytes": 55316108,
"domNodes": 22,
"jsHeapTotalBytes": 26214400,
"scriptDurationMs": 14.069,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "subgraph-mouse-sweep",
"durationMs": 1731.724999999983,
"styleRecalcs": 75,
"styleRecalcDurationMs": 37.618,
"layouts": 16,
"layoutDurationMs": 4.574999999999999,
"taskDurationMs": 701.908,
"heapDeltaBytes": 18478508,
"heapUsedBytes": 76084376,
"domNodes": 62,
"jsHeapTotalBytes": 18874368,
"scriptDurationMs": 94.48100000000001,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "subgraph-mouse-sweep",
"durationMs": 1693.8219999999546,
"styleRecalcs": 76,
"styleRecalcDurationMs": 37.356,
"layouts": 16,
"layoutDurationMs": 3.9090000000000003,
"taskDurationMs": 685.8989999999999,
"heapDeltaBytes": -4885652,
"heapUsedBytes": 57937428,
"domNodes": 65,
"jsHeapTotalBytes": 15728640,
"scriptDurationMs": 96.944,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "subgraph-transition-enter",
"durationMs": 1479.8220000000128,
"styleRecalcs": 14,
"styleRecalcDurationMs": 31.537999999999997,
"layouts": 4,
"layoutDurationMs": 15.377000000000002,
"taskDurationMs": 1129.458,
"heapDeltaBytes": -23953932,
"heapUsedBytes": 139460964,
"domNodes": 12477,
"jsHeapTotalBytes": -13766656,
"scriptDurationMs": 46.30299999999998,
"eventListeners": 1290,
"totalBlockingTimeMs": 207,
"frameDurationMs": 16.66333333333335,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "viewport-pan-sweep",
"durationMs": 8297.650000000032,
"styleRecalcs": 251,
"styleRecalcDurationMs": 57.243,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 4376.196,
"heapDeltaBytes": 437484,
"heapUsedBytes": 69857716,
"domNodes": 20,
"jsHeapTotalBytes": 22863872,
"scriptDurationMs": 1477.244,
"eventListeners": 20,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "viewport-pan-sweep",
"durationMs": 8474.659000000087,
"styleRecalcs": 251,
"styleRecalcDurationMs": 55.696,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 4033.652,
"heapDeltaBytes": 75771964,
"heapUsedBytes": 157075596,
"domNodes": -309,
"jsHeapTotalBytes": 78446592,
"scriptDurationMs": 1364.684,
"eventListeners": -183,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "vue-large-graph-idle",
"durationMs": 13712.608999999986,
"styleRecalcs": 0,
"styleRecalcDurationMs": 0,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 13676.703999999998,
"heapDeltaBytes": -54229876,
"heapUsedBytes": 158277884,
"domNodes": -3302,
"jsHeapTotalBytes": 23330816,
"scriptDurationMs": 662.613,
"eventListeners": -16464,
"totalBlockingTimeMs": 0,
"frameDurationMs": 17.776666666666642,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "vue-large-graph-idle",
"durationMs": 11965.502000000015,
"styleRecalcs": 0,
"styleRecalcDurationMs": 0,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 11951.301000000001,
"heapDeltaBytes": -30691552,
"heapUsedBytes": 173562696,
"domNodes": -8331,
"jsHeapTotalBytes": 24580096,
"scriptDurationMs": 543.7149999999999,
"eventListeners": -16470,
"totalBlockingTimeMs": 0,
"frameDurationMs": 17.219999999999953,
"p95FrameDurationMs": 16.80000000000291
},
{
"name": "vue-large-graph-pan",
"durationMs": 14709.42500000001,
"styleRecalcs": 67,
"styleRecalcDurationMs": 21.94800000000002,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 14684.986,
"heapDeltaBytes": -38439452,
"heapUsedBytes": 158508612,
"domNodes": -3288,
"jsHeapTotalBytes": 19922944,
"scriptDurationMs": 876.17,
"eventListeners": -16464,
"totalBlockingTimeMs": 55,
"frameDurationMs": 17.219999999999953,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "vue-large-graph-pan",
"durationMs": 16019.65999999993,
"styleRecalcs": 85,
"styleRecalcDurationMs": 22.063,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 15994.105000000001,
"heapDeltaBytes": -32775908,
"heapUsedBytes": 167545752,
"domNodes": -3331,
"jsHeapTotalBytes": 17797120,
"scriptDurationMs": 937.535,
"eventListeners": -16469,
"totalBlockingTimeMs": 78,
"frameDurationMs": 17.779999999999927,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "workflow-execution",
"durationMs": 465.9639999999854,
"styleRecalcs": 14,
"styleRecalcDurationMs": 22.49,
"layouts": 5,
"layoutDurationMs": 1.477,
"taskDurationMs": 215.67999999999998,
"heapDeltaBytes": -22055548,
"heapUsedBytes": 47964408,
"domNodes": -191,
"jsHeapTotalBytes": 5177344,
"scriptDurationMs": 17.034999999999993,
"eventListeners": -124,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.663333333333338,
"p95FrameDurationMs": 16.700000000000273
},
{
"name": "workflow-execution",
"durationMs": 498.2919999999922,
"styleRecalcs": 16,
"styleRecalcDurationMs": 23.301000000000002,
"layouts": 6,
"layoutDurationMs": 1.4880000000000002,
"taskDurationMs": 219.23399999999998,
"heapDeltaBytes": -22389920,
"heapUsedBytes": 47725644,
"domNodes": -203,
"jsHeapTotalBytes": 5177344,
"scriptDurationMs": 19.516000000000002,
"eventListeners": -114,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
}
]
} |
Backport of #12761 to
cloud/1.45Automatically created by backport workflow.