feat: 3/x record RUM workflow execution vitals#13767
Conversation
🎭 Playwright: ✅ 1711 passed, 0 failed · 2 flaky📊 Browser Reports
🎨 Storybook: ✅ Built — View Storybook📦 Bundle Size
⚡ Performance Report
Absolute values
Raw data{
"timestamp": "2026-07-17T21:41:36.282Z",
"gitSha": "502c38209dde87b3d8a2941862c4fd80c7e18c61",
"branch": "codex/datadog-rum-workflow-execution-vital",
"measurements": [
{
"name": "canvas-idle",
"durationMs": 2067.157000000009,
"styleRecalcs": 10,
"styleRecalcDurationMs": 8.043999999999999,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 389.41,
"heapDeltaBytes": -6382732,
"heapUsedBytes": 63929756,
"domNodes": -273,
"jsHeapTotalBytes": 18231296,
"scriptDurationMs": 13.967,
"eventListeners": -199,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333335,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "canvas-idle",
"durationMs": 2012.0429999999487,
"styleRecalcs": 10,
"styleRecalcDurationMs": 6.873000000000002,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 349.639,
"heapDeltaBytes": -6989924,
"heapUsedBytes": 63170344,
"domNodes": -276,
"jsHeapTotalBytes": 19017728,
"scriptDurationMs": 13.19,
"eventListeners": -195,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "canvas-mouse-sweep",
"durationMs": 1808.1599999999867,
"styleRecalcs": 71,
"styleRecalcDurationMs": 31.142,
"layouts": 12,
"layoutDurationMs": 3.3360000000000003,
"taskDurationMs": 739.6279999999999,
"heapDeltaBytes": -4117692,
"heapUsedBytes": 48421508,
"domNodes": -270,
"jsHeapTotalBytes": 17952768,
"scriptDurationMs": 95.2,
"eventListeners": -199,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "canvas-mouse-sweep",
"durationMs": 1699.324000000047,
"styleRecalcs": 71,
"styleRecalcDurationMs": 25.509999999999998,
"layouts": 12,
"layoutDurationMs": 2.5719999999999996,
"taskDurationMs": 591.68,
"heapDeltaBytes": -6397500,
"heapUsedBytes": 52635548,
"domNodes": 53,
"jsHeapTotalBytes": 25427968,
"scriptDurationMs": 84.093,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.670000000000012,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "canvas-zoom-sweep",
"durationMs": 1740.4699999999593,
"styleRecalcs": 31,
"styleRecalcDurationMs": 12.427,
"layouts": 6,
"layoutDurationMs": 0.51,
"taskDurationMs": 304.454,
"heapDeltaBytes": -2734204,
"heapUsedBytes": 67538920,
"domNodes": -221,
"jsHeapTotalBytes": 14299136,
"scriptDurationMs": 14.957999999999998,
"eventListeners": -180,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "canvas-zoom-sweep",
"durationMs": 1735.7019999999466,
"styleRecalcs": 30,
"styleRecalcDurationMs": 13.984,
"layouts": 6,
"layoutDurationMs": 0.46799999999999997,
"taskDurationMs": 300.845,
"heapDeltaBytes": -3243396,
"heapUsedBytes": 67034564,
"domNodes": -221,
"jsHeapTotalBytes": 14036992,
"scriptDurationMs": 14.365,
"eventListeners": -182,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "dom-widget-clipping",
"durationMs": 512.4989999999912,
"styleRecalcs": 12,
"styleRecalcDurationMs": 5.885,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 325.702,
"heapDeltaBytes": 4043380,
"heapUsedBytes": 56758284,
"domNodes": -288,
"jsHeapTotalBytes": 13758464,
"scriptDurationMs": 45.032999999999994,
"eventListeners": -203,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.663333333333338,
"p95FrameDurationMs": 16.700000000000273
},
{
"name": "dom-widget-clipping",
"durationMs": 434.3059999999923,
"styleRecalcs": 12,
"styleRecalcDurationMs": 5.8469999999999995,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 272.281,
"heapDeltaBytes": 10115596,
"heapUsedBytes": 62704236,
"domNodes": -289,
"jsHeapTotalBytes": 6418432,
"scriptDurationMs": 35.348,
"eventListeners": -201,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.799999999999727
},
{
"name": "large-graph-idle",
"durationMs": 2020.3500000000076,
"styleRecalcs": 9,
"styleRecalcDurationMs": 5.750000000000002,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 459.618,
"heapDeltaBytes": -24642448,
"heapUsedBytes": 61086780,
"domNodes": -263,
"jsHeapTotalBytes": 1904640,
"scriptDurationMs": 65.415,
"eventListeners": -195,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "large-graph-idle",
"durationMs": 2016.255000000001,
"styleRecalcs": 10,
"styleRecalcDurationMs": 5.801,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 452.351,
"heapDeltaBytes": -8194188,
"heapUsedBytes": 59921588,
"domNodes": -263,
"jsHeapTotalBytes": -1327104,
"scriptDurationMs": 59.32000000000001,
"eventListeners": -199,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "large-graph-pan",
"durationMs": 2068.4029999999893,
"styleRecalcs": 68,
"styleRecalcDurationMs": 14.081,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 866.936,
"heapDeltaBytes": 11373276,
"heapUsedBytes": 80765248,
"domNodes": -272,
"jsHeapTotalBytes": -1384448,
"scriptDurationMs": 292.821,
"eventListeners": -199,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "large-graph-pan",
"durationMs": 2038.347999999985,
"styleRecalcs": 67,
"styleRecalcDurationMs": 12.024,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 786.278,
"heapDeltaBytes": 29405352,
"heapUsedBytes": 84138672,
"domNodes": 12,
"jsHeapTotalBytes": 1777664,
"scriptDurationMs": 269.596,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "large-graph-zoom",
"durationMs": 3035.7099999999946,
"styleRecalcs": 65,
"styleRecalcDurationMs": 16.866,
"layouts": 60,
"layoutDurationMs": 7.81,
"taskDurationMs": 1056.3740000000003,
"heapDeltaBytes": 12166744,
"heapUsedBytes": 67878280,
"domNodes": 12,
"jsHeapTotalBytes": 0,
"scriptDurationMs": 357.875,
"eventListeners": 8,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333335,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "large-graph-zoom",
"durationMs": 3030.282999999997,
"styleRecalcs": 64,
"styleRecalcDurationMs": 12.995,
"layouts": 60,
"layoutDurationMs": 6.023000000000001,
"taskDurationMs": 925.2310000000001,
"heapDeltaBytes": 12271600,
"heapUsedBytes": 66667472,
"domNodes": 10,
"jsHeapTotalBytes": 0,
"scriptDurationMs": 319.81,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "minimap-idle",
"durationMs": 2014.9700000000053,
"styleRecalcs": 6,
"styleRecalcDurationMs": 4.134000000000002,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 426.804,
"heapDeltaBytes": -3588632,
"heapUsedBytes": 59762696,
"domNodes": -276,
"jsHeapTotalBytes": -835584,
"scriptDurationMs": 57.30499999999999,
"eventListeners": -199,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.670000000000012,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "minimap-idle",
"durationMs": 2015.1400000000876,
"styleRecalcs": 8,
"styleRecalcDurationMs": 4.649000000000002,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 421.171,
"heapDeltaBytes": -3368660,
"heapUsedBytes": 59940008,
"domNodes": -275,
"jsHeapTotalBytes": -835584,
"scriptDurationMs": 55.532000000000004,
"eventListeners": -197,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "subgraph-dom-widget-clipping",
"durationMs": 515.0520000000256,
"styleRecalcs": 47,
"styleRecalcDurationMs": 8.198000000000002,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 333.048,
"heapDeltaBytes": 7420908,
"heapUsedBytes": 59987012,
"domNodes": -289,
"jsHeapTotalBytes": 10612736,
"scriptDurationMs": 98.73899999999999,
"eventListeners": -195,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.799999999999727
},
{
"name": "subgraph-dom-widget-clipping",
"durationMs": 488.37399999990794,
"styleRecalcs": 48,
"styleRecalcDurationMs": 7.725,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 281.023,
"heapDeltaBytes": 8152888,
"heapUsedBytes": 67504176,
"domNodes": 22,
"jsHeapTotalBytes": 19922944,
"scriptDurationMs": 88.46900000000001,
"eventListeners": 8,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.663333333333338,
"p95FrameDurationMs": 16.700000000000273
},
{
"name": "subgraph-idle",
"durationMs": 1997.9379999999765,
"styleRecalcs": 9,
"styleRecalcDurationMs": 5.213000000000001,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 352.24600000000004,
"heapDeltaBytes": -4069112,
"heapUsedBytes": 48095568,
"domNodes": -291,
"jsHeapTotalBytes": 18214912,
"scriptDurationMs": 11.796999999999999,
"eventListeners": -197,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "subgraph-idle",
"durationMs": 2009.635000000003,
"styleRecalcs": 10,
"styleRecalcDurationMs": 5.896,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 340.07000000000005,
"heapDeltaBytes": -2664040,
"heapUsedBytes": 49895660,
"domNodes": -289,
"jsHeapTotalBytes": 16904192,
"scriptDurationMs": 11.674,
"eventListeners": -197,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.670000000000012,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "subgraph-mouse-sweep",
"durationMs": 1719.2099999999755,
"styleRecalcs": 78,
"styleRecalcDurationMs": 34.458999999999996,
"layouts": 16,
"layoutDurationMs": 3.7199999999999998,
"taskDurationMs": 617.548,
"heapDeltaBytes": -16430092,
"heapUsedBytes": 53808096,
"domNodes": -230,
"jsHeapTotalBytes": 19804160,
"scriptDurationMs": 68.133,
"eventListeners": -197,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66999999999998,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "subgraph-mouse-sweep",
"durationMs": 1700.9140000000116,
"styleRecalcs": 76,
"styleRecalcDurationMs": 24.407999999999998,
"layouts": 16,
"layoutDurationMs": 2.689,
"taskDurationMs": 506.35599999999994,
"heapDeltaBytes": -9565580,
"heapUsedBytes": 49535652,
"domNodes": 65,
"jsHeapTotalBytes": 25165824,
"scriptDurationMs": 60.471000000000004,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "subgraph-transition-enter",
"durationMs": 914.873,
"styleRecalcs": 19,
"styleRecalcDurationMs": 24.208000000000002,
"layouts": 15,
"layoutDurationMs": 9.869000000000002,
"taskDurationMs": 642.625,
"heapDeltaBytes": 27655328,
"heapUsedBytes": 99572240,
"domNodes": 13673,
"jsHeapTotalBytes": 16252928,
"scriptDurationMs": 22.225,
"eventListeners": 2533,
"totalBlockingTimeMs": 130,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "viewport-pan-sweep",
"durationMs": 8074.995000000001,
"styleRecalcs": 248,
"styleRecalcDurationMs": 37.064,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 2818.287,
"heapDeltaBytes": 17561600,
"heapUsedBytes": 71244340,
"domNodes": -271,
"jsHeapTotalBytes": 2564096,
"scriptDurationMs": 853.74,
"eventListeners": -183,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "viewport-pan-sweep",
"durationMs": 8105.7450000000135,
"styleRecalcs": 250,
"styleRecalcDurationMs": 38.884,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 2804.955,
"heapDeltaBytes": 6576744,
"heapUsedBytes": 67951680,
"domNodes": -272,
"jsHeapTotalBytes": 679936,
"scriptDurationMs": 838.2630000000001,
"eventListeners": -183,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.80000000000109
},
{
"name": "vue-large-graph-idle",
"durationMs": 8380.847000000016,
"styleRecalcs": 0,
"styleRecalcDurationMs": 0,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 8355.542,
"heapDeltaBytes": -45085344,
"heapUsedBytes": 166754512,
"domNodes": -3300,
"jsHeapTotalBytes": -6029312,
"scriptDurationMs": 423.08399999999995,
"eventListeners": -16372,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "vue-large-graph-idle",
"durationMs": 7873.254000000088,
"styleRecalcs": 0,
"styleRecalcDurationMs": 0,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 7832.487,
"heapDeltaBytes": -30093164,
"heapUsedBytes": 174141452,
"domNodes": -3300,
"jsHeapTotalBytes": 3641344,
"scriptDurationMs": 380.009,
"eventListeners": -16378,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "vue-large-graph-pan",
"durationMs": 10905.637000000013,
"styleRecalcs": 65,
"styleRecalcDurationMs": 21.63100000000001,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 10883.348999999998,
"heapDeltaBytes": -27030804,
"heapUsedBytes": 182696612,
"domNodes": -3300,
"jsHeapTotalBytes": 1982464,
"scriptDurationMs": 701.329,
"eventListeners": -16378,
"totalBlockingTimeMs": 0,
"frameDurationMs": 17.220000000000073,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "vue-large-graph-pan",
"durationMs": 10340.57299999995,
"styleRecalcs": 65,
"styleRecalcDurationMs": 18.093999999999998,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 10315.755,
"heapDeltaBytes": -71164668,
"heapUsedBytes": 155281228,
"domNodes": -3301,
"jsHeapTotalBytes": 13864960,
"scriptDurationMs": 661.4209999999999,
"eventListeners": -16385,
"totalBlockingTimeMs": 0,
"frameDurationMs": 17.220000000000073,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "workflow-execution",
"durationMs": 448.3889999999633,
"styleRecalcs": 19,
"styleRecalcDurationMs": 19.543,
"layouts": 3,
"layoutDurationMs": 1.04,
"taskDurationMs": 179.046,
"heapDeltaBytes": -22467184,
"heapUsedBytes": 47070060,
"domNodes": -167,
"jsHeapTotalBytes": 5648384,
"scriptDurationMs": 8.128000000000002,
"eventListeners": -140,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "workflow-execution",
"durationMs": 79.4380000000956,
"styleRecalcs": 6,
"styleRecalcDurationMs": 9.144000000000002,
"layouts": 2,
"layoutDurationMs": 0.4699999999999999,
"taskDurationMs": 53.07500000000001,
"heapDeltaBytes": 2892528,
"heapUsedBytes": 55343384,
"domNodes": 104,
"jsHeapTotalBytes": 0,
"scriptDurationMs": 3.8209999999999997,
"eventListeners": 33,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
}
]
} |
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
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. Comment |
Codecov Report✅ All modified and coverable lines are covered by tests. @@ Coverage Diff @@
## codex/rum-workflow-outcomes #13767 +/- ##
=============================================================
Coverage 78.31% 78.31%
=============================================================
Files 1672 1673 +1
Lines 104023 104035 +12
Branches 36688 37361 +673
=============================================================
+ Hits 81465 81478 +13
Misses 21775 21775
+ Partials 783 782 -1
Flags with carried forward coverage won't be shown. Click here to find out more.
🚀 New features to boost your workflow:
|
c614d58 to
4f3ff80
Compare
8ebaebe to
0cd72df
Compare
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_14074658-9119-4bc3-a197-9bd51cd9d3e7) |
4f3ff80 to
3fdfc2a
Compare
0cd72df to
1f2f738
Compare
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_37f6f858-315e-46aa-b26a-e773553611c6) |
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_7d3236b6-54e3-479f-a0db-5841cb5fbb64) |
Summary
Reports one
workflow_executionDatadog RUM duration vital when a queued workflow reaches a terminal state.Changes
performance.now()before prompt construction and retain it on the queued job.Origin-view attribution remains in #13764.
Verification
pnpm exec vitest run src/platform/telemetry/providers/cloud/DatadogRumTelemetryProvider.test.ts src/stores/executionStore.test.ts(97 tests)pnpm typecheckpnpm lintpnpm format:checkpnpm knipCreated by Codex
Note
Low Risk
Observability-only changes gated on optional
DD_RUM; execution status and queue behavior are unchanged aside from storing an optional timestamp and firing telemetry at terminal states.Overview
Adds end-to-end workflow execution timing for cloud: one Datadog RUM
workflow_executionduration vital per queued run when the job reaches a terminal state (completed or failed).Queue → store:
queuePromptnow recordsperformance.now()before prompt construction and passes thatstartTimeintoexecutionStore.storeJobwith the queued job metadata.Terminal reporting: The execution store calls
trackExecutionOutcomewhen workflow status settles (not onrunning), reusing the existing pending-status path so WebSocket terminal events that arrive before the queue HTTP response still emit telemetry oncestoreJobruns.Datadog:
DatadogRumTelemetryProvidermaps outcomes toDD_RUM.addDurationVitalwith duration, absolute start time (performance.timeOrigin + startTime), and context (outcome,product: cloud_generation). Global types declareDD_RUMonwindow.Reviewed by Cursor Bugbot for commit 65f51ff. Bugbot is set up for automated code reviews on this repo. Configure here.