From ba80a253c18927d7866dc71c23c34f6da752bed6 Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Wed, 15 Apr 2026 14:10:10 +0200 Subject: [PATCH 1/2] feat(dashboards): Update mobile vitals prebuilt dashboards to use EAP span fields Migrate prebuilt mobile vitals dashboard configs to reference EAP span field names via SpanFields constants instead of hardcoded strings. Made-with: Cursor --- .../prebuiltConfigs/mobileVitals/appStarts.ts | 49 ++++++----- .../mobileVitals/mobileVitals.ts | 84 ++++++++++--------- .../mobileVitals/screenLoads.ts | 53 ++++++------ .../mobileVitals/screenRendering.ts | 14 ++-- static/app/views/insights/types.tsx | 15 +++- 5 files changed, 111 insertions(+), 104 deletions(-) diff --git a/static/app/views/dashboards/utils/prebuiltConfigs/mobileVitals/appStarts.ts b/static/app/views/dashboards/utils/prebuiltConfigs/mobileVitals/appStarts.ts index c7f043537f5eec..cff169956b7b38 100644 --- a/static/app/views/dashboards/utils/prebuiltConfigs/mobileVitals/appStarts.ts +++ b/static/app/views/dashboards/utils/prebuiltConfigs/mobileVitals/appStarts.ts @@ -5,13 +5,12 @@ import type {Widget} from 'sentry/views/dashboards/types'; import type {PrebuiltDashboard} from 'sentry/views/dashboards/utils/prebuiltConfigs'; import {SpanFields} from 'sentry/views/insights/types'; -const TRANSACTION_OP_CONDITION = `${SpanFields.TRANSACTION_OP}:[ui.load,navigation]`; -const COLD_START_CONDITION = `${SpanFields.SPAN_OP}:app.start.cold ${SpanFields.SPAN_DESCRIPTION}:["Cold Start","Cold App Start"]`; -const WARM_START_CONDITION = `${SpanFields.SPAN_OP}:app.start.warm ${SpanFields.SPAN_DESCRIPTION}:["Warm Start","Warm App Start"]`; +const COLD_START_CONDITION = `has:${SpanFields.APP_VITALS_START_COLD_VALUE}`; +const WARM_START_CONDITION = `has:${SpanFields.APP_VITALS_START_WARM_VALUE}`; -const COLD_START_TABLE_OPERATIONS_CONDITION = `!${SpanFields.SPAN_DESCRIPTION}:"Cold Start" !${SpanFields.SPAN_DESCRIPTION}:"Warm Start" !${SpanFields.SPAN_DESCRIPTION}:"Cold App Start" !${SpanFields.SPAN_DESCRIPTION}:"Warm App Start" !${SpanFields.SPAN_DESCRIPTION}:"Initial Frame Render" has:${SpanFields.SPAN_DESCRIPTION} ${SpanFields.TRANSACTION_OP}:[ui.load,navigation] has:ttid app_start_type:cold ${SpanFields.SPAN_OP}:[app.start.cold,app.start.warm,contentprovider.load,application.load,activity.load,ui.load,process.load]`; +const COLD_START_TABLE_OPERATIONS_CONDITION = `!${SpanFields.SPAN_DESCRIPTION}:"Cold Start" !${SpanFields.SPAN_DESCRIPTION}:"Warm Start" !${SpanFields.SPAN_DESCRIPTION}:"Cold App Start" !${SpanFields.SPAN_DESCRIPTION}:"Warm App Start" !${SpanFields.SPAN_DESCRIPTION}:"Initial Frame Render" has:${SpanFields.SPAN_DESCRIPTION} ${SpanFields.TRANSACTION_OP}:[ui.load,navigation,app.start] has:ttid ${SpanFields.APP_VITALS_START_TYPE}:cold ${SpanFields.SPAN_OP}:[app.start.cold,app.start.warm,contentprovider.load,application.load,activity.load,ui.load,process.load]`; -const WARM_START_TABLE_OPERATIONS_CONDITION = `!${SpanFields.SPAN_DESCRIPTION}:"Cold Start" !${SpanFields.SPAN_DESCRIPTION}:"Warm Start" !${SpanFields.SPAN_DESCRIPTION}:"Cold App Start" !${SpanFields.SPAN_DESCRIPTION}:"Warm App Start" !${SpanFields.SPAN_DESCRIPTION}:"Initial Frame Render" has:${SpanFields.SPAN_DESCRIPTION} ${SpanFields.TRANSACTION_OP}:[ui.load,navigation] has:ttid app_start_type:warm ${SpanFields.SPAN_OP}:[app.start.cold,app.start.warm,contentprovider.load,application.load,activity.load,ui.load,process.load]`; +const WARM_START_TABLE_OPERATIONS_CONDITION = `!${SpanFields.SPAN_DESCRIPTION}:"Cold Start" !${SpanFields.SPAN_DESCRIPTION}:"Warm Start" !${SpanFields.SPAN_DESCRIPTION}:"Cold App Start" !${SpanFields.SPAN_DESCRIPTION}:"Warm App Start" !${SpanFields.SPAN_DESCRIPTION}:"Initial Frame Render" has:${SpanFields.SPAN_DESCRIPTION} ${SpanFields.TRANSACTION_OP}:[ui.load,navigation,app.start] has:ttid ${SpanFields.APP_VITALS_START_TYPE}:warm ${SpanFields.SPAN_OP}:[app.start.cold,app.start.warm,contentprovider.load,application.load,activity.load,ui.load,process.load]`; const AVG_COLD_STARTS_BIG_NUMBER_WIDGET: Widget = { id: 'avg-cold-starts-big-number', @@ -24,8 +23,8 @@ const AVG_COLD_STARTS_BIG_NUMBER_WIDGET: Widget = { queries: [ { name: '', - fields: [`avg(${SpanFields.SPAN_DURATION})`], - aggregates: [`avg(${SpanFields.SPAN_DURATION})`], + fields: [`avg(${SpanFields.APP_VITALS_START_COLD_VALUE})`], + aggregates: [`avg(${SpanFields.APP_VITALS_START_COLD_VALUE})`], columns: [], conditions: COLD_START_CONDITION, orderby: '', @@ -51,8 +50,8 @@ const TOTAL_COLD_START_COUNT_BIG_NUMBER_WIDGET: Widget = { queries: [ { name: '', - fields: [`count(${SpanFields.SPAN_DURATION})`], - aggregates: [`count(${SpanFields.SPAN_DURATION})`], + fields: [`count(${SpanFields.APP_VITALS_START_COLD_VALUE})`], + aggregates: [`count(${SpanFields.APP_VITALS_START_COLD_VALUE})`], columns: [], conditions: COLD_START_CONDITION, orderby: '', @@ -78,8 +77,8 @@ const AVG_WARM_STARTS_BIG_NUMBER_WIDGET: Widget = { queries: [ { name: '', - fields: [`avg(${SpanFields.SPAN_DURATION})`], - aggregates: [`avg(${SpanFields.SPAN_DURATION})`], + fields: [`avg(${SpanFields.APP_VITALS_START_WARM_VALUE})`], + aggregates: [`avg(${SpanFields.APP_VITALS_START_WARM_VALUE})`], columns: [], conditions: WARM_START_CONDITION, orderby: '', @@ -105,8 +104,8 @@ const TOTAL_WARM_START_COUNT_BIG_NUMBER_WIDGET: Widget = { queries: [ { name: '', - fields: [`count(${SpanFields.SPAN_DURATION})`], - aggregates: [`count(${SpanFields.SPAN_DURATION})`], + fields: [`count(${SpanFields.APP_VITALS_START_WARM_VALUE})`], + aggregates: [`count(${SpanFields.APP_VITALS_START_WARM_VALUE})`], columns: [], conditions: WARM_START_CONDITION, orderby: '', @@ -132,12 +131,12 @@ const AVG_COLD_START_LINE_WIDGET: Widget = { queries: [ { name: '', - fields: [`avg(${SpanFields.SPAN_DURATION})`], - aggregates: [`avg(${SpanFields.SPAN_DURATION})`], + fields: [`avg(${SpanFields.APP_VITALS_START_COLD_VALUE})`], + aggregates: [`avg(${SpanFields.APP_VITALS_START_COLD_VALUE})`], columns: [], fieldAliases: [], conditions: COLD_START_CONDITION, - orderby: `-avg(${SpanFields.SPAN_DURATION})`, + orderby: `-avg(${SpanFields.APP_VITALS_START_COLD_VALUE})`, }, ], layout: { @@ -160,12 +159,12 @@ const AVG_WARM_START_LINE_WIDGET: Widget = { queries: [ { name: '', - fields: [`avg(${SpanFields.SPAN_DURATION})`], - aggregates: [`avg(${SpanFields.SPAN_DURATION})`], + fields: [`avg(${SpanFields.APP_VITALS_START_WARM_VALUE})`], + aggregates: [`avg(${SpanFields.APP_VITALS_START_WARM_VALUE})`], columns: [], fieldAliases: [], conditions: WARM_START_CONDITION, - orderby: `-avg(${SpanFields.SPAN_DURATION})`, + orderby: `-avg(${SpanFields.APP_VITALS_START_WARM_VALUE})`, }, ], layout: { @@ -188,10 +187,10 @@ const COLD_START_DEVICE_DISTRIBUTION_WIDGET: Widget = { queries: [ { name: '', - fields: [SpanFields.DEVICE_CLASS, `avg(${SpanFields.APP_START_COLD})`], - aggregates: [`avg(${SpanFields.APP_START_COLD})`], + fields: [SpanFields.DEVICE_CLASS, `avg(${SpanFields.APP_VITALS_START_COLD_VALUE})`], + aggregates: [`avg(${SpanFields.APP_VITALS_START_COLD_VALUE})`], columns: [SpanFields.DEVICE_CLASS], - conditions: TRANSACTION_OP_CONDITION, + conditions: COLD_START_CONDITION, orderby: `${SpanFields.DEVICE_CLASS}`, }, ], @@ -215,10 +214,10 @@ const WARM_START_DEVICE_DISTRIBUTION_WIDGET: Widget = { queries: [ { name: '', - fields: [SpanFields.DEVICE_CLASS, `avg(${SpanFields.APP_START_WARM})`], - aggregates: [`avg(${SpanFields.APP_START_WARM})`], + fields: [SpanFields.DEVICE_CLASS, `avg(${SpanFields.APP_VITALS_START_WARM_VALUE})`], + aggregates: [`avg(${SpanFields.APP_VITALS_START_WARM_VALUE})`], columns: [SpanFields.DEVICE_CLASS], - conditions: TRANSACTION_OP_CONDITION, + conditions: WARM_START_CONDITION, orderby: `${SpanFields.DEVICE_CLASS}`, }, ], diff --git a/static/app/views/dashboards/utils/prebuiltConfigs/mobileVitals/mobileVitals.ts b/static/app/views/dashboards/utils/prebuiltConfigs/mobileVitals/mobileVitals.ts index d836202514dff7..3c52f03dc6d16e 100644 --- a/static/app/views/dashboards/utils/prebuiltConfigs/mobileVitals/mobileVitals.ts +++ b/static/app/views/dashboards/utils/prebuiltConfigs/mobileVitals/mobileVitals.ts @@ -6,6 +6,10 @@ import type {PrebuiltDashboard} from 'sentry/views/dashboards/utils/prebuiltConf import {SpanFields} from 'sentry/views/insights/types'; const TRANSACTION_OP_CONDITION = `${SpanFields.TRANSACTION_OP}:[ui.load,navigation]`; +const COLD_START_CONDITION = `has:${SpanFields.APP_VITALS_START_COLD_VALUE}`; +const WARM_START_CONDITION = `has:${SpanFields.APP_VITALS_START_WARM_VALUE}`; +const TTID_CONDITION = `has:${SpanFields.APP_VITALS_TTID_VALUE}`; +const TTFD_CONDITION = `has:${SpanFields.APP_VITALS_TTFD_VALUE}`; const COLD_START_BIG_NUMBER_WIDGET: Widget = { id: 'cold-start-big-number', @@ -24,10 +28,10 @@ const COLD_START_BIG_NUMBER_WIDGET: Widget = { queries: [ { name: '', - fields: [`avg(${SpanFields.APP_START_COLD})`], - aggregates: [`avg(${SpanFields.APP_START_COLD})`], + fields: [`avg(${SpanFields.APP_VITALS_START_COLD_VALUE})`], + aggregates: [`avg(${SpanFields.APP_VITALS_START_COLD_VALUE})`], columns: [], - conditions: TRANSACTION_OP_CONDITION, + conditions: COLD_START_CONDITION, orderby: '', }, ], @@ -57,10 +61,10 @@ const WARM_START_BIG_NUMBER_WIDGET: Widget = { queries: [ { name: '', - fields: [`avg(${SpanFields.APP_START_WARM})`], - aggregates: [`avg(${SpanFields.APP_START_WARM})`], + fields: [`avg(${SpanFields.APP_VITALS_START_WARM_VALUE})`], + aggregates: [`avg(${SpanFields.APP_VITALS_START_WARM_VALUE})`], columns: [], - conditions: TRANSACTION_OP_CONDITION, + conditions: WARM_START_CONDITION, orderby: '', }, ], @@ -84,10 +88,10 @@ const AVG_TTID_BIG_NUMBER_WIDGET: Widget = { queries: [ { name: '', - fields: [`avg(${SpanFields.MEASUREMENTS_TIME_TO_INITIAL_DISPLAY})`], - aggregates: [`avg(${SpanFields.MEASUREMENTS_TIME_TO_INITIAL_DISPLAY})`], + fields: [`avg(${SpanFields.APP_VITALS_TTID_VALUE})`], + aggregates: [`avg(${SpanFields.APP_VITALS_TTID_VALUE})`], columns: [], - conditions: TRANSACTION_OP_CONDITION, + conditions: TTID_CONDITION, orderby: '', }, ], @@ -111,10 +115,10 @@ const AVG_TTFD_BIG_NUMBER_WIDGET: Widget = { queries: [ { name: '', - fields: [`avg(${SpanFields.MEASUREMENTS_TIME_TO_FULL_DISPLAY})`], - aggregates: [`avg(${SpanFields.MEASUREMENTS_TIME_TO_FULL_DISPLAY})`], + fields: [`avg(${SpanFields.APP_VITALS_TTFD_VALUE})`], + aggregates: [`avg(${SpanFields.APP_VITALS_TTFD_VALUE})`], columns: [], - conditions: TRANSACTION_OP_CONDITION, + conditions: TTFD_CONDITION, orderby: '', }, ], @@ -139,14 +143,14 @@ const SLOW_FRAME_RATE_WIDGET: Widget = { { name: '', fields: [ - `sum(${SpanFields.MOBILE_SLOW_FRAMES})`, - `sum(${SpanFields.MOBILE_TOTAL_FRAMES})`, - `equation|sum(${SpanFields.MOBILE_SLOW_FRAMES}) / sum(${SpanFields.MOBILE_TOTAL_FRAMES})`, + `sum(${SpanFields.APP_VITALS_FRAMES_SLOW_COUNT})`, + `sum(${SpanFields.APP_VITALS_FRAMES_TOTAL_COUNT})`, + `equation|sum(${SpanFields.APP_VITALS_FRAMES_SLOW_COUNT}) / sum(${SpanFields.APP_VITALS_FRAMES_TOTAL_COUNT})`, ], aggregates: [ - `sum(${SpanFields.MOBILE_SLOW_FRAMES})`, - `sum(${SpanFields.MOBILE_TOTAL_FRAMES})`, - `equation|sum(${SpanFields.MOBILE_SLOW_FRAMES}) / sum(${SpanFields.MOBILE_TOTAL_FRAMES})`, + `sum(${SpanFields.APP_VITALS_FRAMES_SLOW_COUNT})`, + `sum(${SpanFields.APP_VITALS_FRAMES_TOTAL_COUNT})`, + `equation|sum(${SpanFields.APP_VITALS_FRAMES_SLOW_COUNT}) / sum(${SpanFields.APP_VITALS_FRAMES_TOTAL_COUNT})`, ], fieldMeta: [ null, @@ -183,14 +187,14 @@ const FROZEN_FRAME_RATE_WIDGET: Widget = { { name: '', fields: [ - `sum(${SpanFields.MOBILE_FROZEN_FRAMES})`, - `sum(${SpanFields.MOBILE_TOTAL_FRAMES})`, - `equation|sum(${SpanFields.MOBILE_FROZEN_FRAMES}) / sum(${SpanFields.MOBILE_TOTAL_FRAMES})`, + `sum(${SpanFields.APP_VITALS_FRAMES_FROZEN_COUNT})`, + `sum(${SpanFields.APP_VITALS_FRAMES_TOTAL_COUNT})`, + `equation|sum(${SpanFields.APP_VITALS_FRAMES_FROZEN_COUNT}) / sum(${SpanFields.APP_VITALS_FRAMES_TOTAL_COUNT})`, ], aggregates: [ - `sum(${SpanFields.MOBILE_FROZEN_FRAMES})`, - `sum(${SpanFields.MOBILE_TOTAL_FRAMES})`, - `equation|sum(${SpanFields.MOBILE_FROZEN_FRAMES}) / sum(${SpanFields.MOBILE_TOTAL_FRAMES})`, + `sum(${SpanFields.APP_VITALS_FRAMES_FROZEN_COUNT})`, + `sum(${SpanFields.APP_VITALS_FRAMES_TOTAL_COUNT})`, + `equation|sum(${SpanFields.APP_VITALS_FRAMES_FROZEN_COUNT}) / sum(${SpanFields.APP_VITALS_FRAMES_TOTAL_COUNT})`, ], fieldMeta: [ null, @@ -226,8 +230,8 @@ const AVG_FRAME_DELAY_WIDGET: Widget = { queries: [ { name: '', - fields: [`avg(${SpanFields.MOBILE_FRAMES_DELAY})`], - aggregates: [`avg(${SpanFields.MOBILE_FRAMES_DELAY})`], + fields: [`avg(${SpanFields.APP_VITALS_FRAMES_DELAY_VALUE})`], + aggregates: [`avg(${SpanFields.APP_VITALS_FRAMES_DELAY_VALUE})`], columns: [], conditions: TRANSACTION_OP_CONDITION, orderby: '', @@ -255,18 +259,18 @@ const APP_START_TABLE: Widget = { name: '', fields: [ SpanFields.TRANSACTION, - `avg(${SpanFields.APP_START_COLD})`, - `avg(${SpanFields.APP_START_WARM})`, + `avg(${SpanFields.APP_VITALS_START_COLD_VALUE})`, + `avg(${SpanFields.APP_VITALS_START_WARM_VALUE})`, `count(${SpanFields.SPAN_DURATION})`, ], aggregates: [ - `avg(${SpanFields.APP_START_COLD})`, - `avg(${SpanFields.APP_START_WARM})`, + `avg(${SpanFields.APP_VITALS_START_COLD_VALUE})`, + `avg(${SpanFields.APP_VITALS_START_WARM_VALUE})`, `count(${SpanFields.SPAN_DURATION})`, ], columns: [SpanFields.TRANSACTION], fieldAliases: ['Screen', 'Cold Start', 'Warm Start', 'Screen Loads'], - conditions: '', + conditions: COLD_START_CONDITION, orderby: '-count(span.duration)', linkedDashboards: [ { @@ -299,13 +303,13 @@ const SCREEN_RENDERING_TABLE: Widget = { name: '', fields: [ SpanFields.TRANSACTION, - `equation|sum(${SpanFields.MOBILE_SLOW_FRAMES})/sum(${SpanFields.MOBILE_TOTAL_FRAMES})`, - `equation|sum(${SpanFields.MOBILE_FROZEN_FRAMES})/sum(${SpanFields.MOBILE_TOTAL_FRAMES})`, + `equation|sum(${SpanFields.APP_VITALS_FRAMES_SLOW_COUNT})/sum(${SpanFields.APP_VITALS_FRAMES_TOTAL_COUNT})`, + `equation|sum(${SpanFields.APP_VITALS_FRAMES_FROZEN_COUNT})/sum(${SpanFields.APP_VITALS_FRAMES_TOTAL_COUNT})`, `count(${SpanFields.SPAN_DURATION})`, ], aggregates: [ - `equation|sum(${SpanFields.MOBILE_SLOW_FRAMES})/sum(${SpanFields.MOBILE_TOTAL_FRAMES})`, - `equation|sum(${SpanFields.MOBILE_FROZEN_FRAMES})/sum(${SpanFields.MOBILE_TOTAL_FRAMES})`, + `equation|sum(${SpanFields.APP_VITALS_FRAMES_SLOW_COUNT})/sum(${SpanFields.APP_VITALS_FRAMES_TOTAL_COUNT})`, + `equation|sum(${SpanFields.APP_VITALS_FRAMES_FROZEN_COUNT})/sum(${SpanFields.APP_VITALS_FRAMES_TOTAL_COUNT})`, `count(${SpanFields.SPAN_DURATION})`, ], columns: [SpanFields.TRANSACTION], @@ -349,18 +353,18 @@ const SCREEN_LOAD_TABLE: Widget = { name: '', fields: [ SpanFields.TRANSACTION, - `avg(${SpanFields.MEASUREMENTS_TIME_TO_INITIAL_DISPLAY})`, - `avg(${SpanFields.MEASUREMENTS_TIME_TO_FULL_DISPLAY})`, + `avg(${SpanFields.APP_VITALS_TTID_VALUE})`, + `avg(${SpanFields.APP_VITALS_TTFD_VALUE})`, `count(${SpanFields.SPAN_DURATION})`, ], aggregates: [ - `avg(${SpanFields.MEASUREMENTS_TIME_TO_INITIAL_DISPLAY})`, - `avg(${SpanFields.MEASUREMENTS_TIME_TO_FULL_DISPLAY})`, + `avg(${SpanFields.APP_VITALS_TTID_VALUE})`, + `avg(${SpanFields.APP_VITALS_TTFD_VALUE})`, `count(${SpanFields.SPAN_DURATION})`, ], columns: [SpanFields.TRANSACTION], fieldAliases: ['Screen', 'TTID', 'TTFD', 'Screen Loads'], - conditions: '', + conditions: TTID_CONDITION, orderby: '-count(span.duration)', linkedDashboards: [ { diff --git a/static/app/views/dashboards/utils/prebuiltConfigs/mobileVitals/screenLoads.ts b/static/app/views/dashboards/utils/prebuiltConfigs/mobileVitals/screenLoads.ts index 441488a25701db..40ecd8443afd86 100644 --- a/static/app/views/dashboards/utils/prebuiltConfigs/mobileVitals/screenLoads.ts +++ b/static/app/views/dashboards/utils/prebuiltConfigs/mobileVitals/screenLoads.ts @@ -5,7 +5,8 @@ import type {Widget} from 'sentry/views/dashboards/types'; import type {PrebuiltDashboard} from 'sentry/views/dashboards/utils/prebuiltConfigs'; import {SpanFields} from 'sentry/views/insights/types'; -const TRANSACTION_CONDITION = `is_transaction:true ${SpanFields.TRANSACTION_OP}:[ui.load,navigation]`; +const TTID_CONDITION = `has:${SpanFields.APP_VITALS_TTID_VALUE} ${SpanFields.TRANSACTION_OP}:[ui.load,navigation]`; +const TTFD_CONDITION = `has:${SpanFields.APP_VITALS_TTFD_VALUE} ${SpanFields.TRANSACTION_OP}:[ui.load,navigation]`; const SPAN_OPERATIONS_CONDITION = `${SpanFields.TRANSACTION_OP}:[ui.load,navigation] has:${SpanFields.SPAN_DESCRIPTION} ${SpanFields.SPAN_OP}:[file.read,file.write,ui.load,navigation,http.client,db,db.sql.room,db.sql.query,db.sql.transaction]`; const AVG_TTID_BIG_NUMBER_WIDGET: Widget = { @@ -19,10 +20,10 @@ const AVG_TTID_BIG_NUMBER_WIDGET: Widget = { queries: [ { name: '', - fields: [`avg(${SpanFields.MEASUREMENTS_TIME_TO_INITIAL_DISPLAY})`], - aggregates: [`avg(${SpanFields.MEASUREMENTS_TIME_TO_INITIAL_DISPLAY})`], + fields: [`avg(${SpanFields.APP_VITALS_TTID_VALUE})`], + aggregates: [`avg(${SpanFields.APP_VITALS_TTID_VALUE})`], columns: [], - conditions: TRANSACTION_CONDITION, + conditions: TTID_CONDITION, orderby: '', }, ], @@ -46,10 +47,10 @@ const AVG_TTFD_BIG_NUMBER_WIDGET: Widget = { queries: [ { name: '', - fields: [`avg(${SpanFields.MEASUREMENTS_TIME_TO_FULL_DISPLAY})`], - aggregates: [`avg(${SpanFields.MEASUREMENTS_TIME_TO_FULL_DISPLAY})`], + fields: [`avg(${SpanFields.APP_VITALS_TTFD_VALUE})`], + aggregates: [`avg(${SpanFields.APP_VITALS_TTFD_VALUE})`], columns: [], - conditions: TRANSACTION_CONDITION, + conditions: TTFD_CONDITION, orderby: '', }, ], @@ -76,7 +77,7 @@ const TOTAL_COUNT_BIG_NUMBER_WIDGET: Widget = { fields: [`count(${SpanFields.SPAN_DURATION})`], aggregates: [`count(${SpanFields.SPAN_DURATION})`], columns: [], - conditions: TRANSACTION_CONDITION, + conditions: TTID_CONDITION, orderby: '', }, ], @@ -100,12 +101,12 @@ const AVG_TTID_LINE_WIDGET: Widget = { queries: [ { name: 'TTID', - fields: [`avg(${SpanFields.MEASUREMENTS_TIME_TO_INITIAL_DISPLAY})`], - aggregates: [`avg(${SpanFields.MEASUREMENTS_TIME_TO_INITIAL_DISPLAY})`], + fields: [`avg(${SpanFields.APP_VITALS_TTID_VALUE})`], + aggregates: [`avg(${SpanFields.APP_VITALS_TTID_VALUE})`], columns: [], fieldAliases: [], - conditions: TRANSACTION_CONDITION, - orderby: 'avg(measurements.time_to_initial_display)', + conditions: TTID_CONDITION, + orderby: `avg(${SpanFields.APP_VITALS_TTID_VALUE})`, }, ], layout: { @@ -128,12 +129,12 @@ const AVG_TTFD_LINE_WIDGET: Widget = { queries: [ { name: 'TTFD', - fields: [`avg(${SpanFields.MEASUREMENTS_TIME_TO_FULL_DISPLAY})`], - aggregates: [`avg(${SpanFields.MEASUREMENTS_TIME_TO_FULL_DISPLAY})`], + fields: [`avg(${SpanFields.APP_VITALS_TTFD_VALUE})`], + aggregates: [`avg(${SpanFields.APP_VITALS_TTFD_VALUE})`], columns: [], fieldAliases: [], - conditions: TRANSACTION_CONDITION, - orderby: 'avg(measurements.time_to_full_display)', + conditions: TTFD_CONDITION, + orderby: `avg(${SpanFields.APP_VITALS_TTFD_VALUE})`, }, ], layout: { @@ -160,7 +161,7 @@ const TOTAL_COUNT_LINE_WIDGET: Widget = { aggregates: [`count(${SpanFields.SPAN_DURATION})`], columns: [], fieldAliases: [], - conditions: TRANSACTION_CONDITION, + conditions: TTID_CONDITION, orderby: `count(${SpanFields.SPAN_DURATION})`, }, ], @@ -184,14 +185,11 @@ const TTID_BAR_CHART_WIDGET: Widget = { queries: [ { name: '', - fields: [ - SpanFields.DEVICE_CLASS, - `avg(${SpanFields.MEASUREMENTS_TIME_TO_INITIAL_DISPLAY})`, - ], - aggregates: [`avg(${SpanFields.MEASUREMENTS_TIME_TO_INITIAL_DISPLAY})`], + fields: [SpanFields.DEVICE_CLASS, `avg(${SpanFields.APP_VITALS_TTID_VALUE})`], + aggregates: [`avg(${SpanFields.APP_VITALS_TTID_VALUE})`], columns: [SpanFields.DEVICE_CLASS], fieldAliases: ['Device Class', 'AVG TTID'], - conditions: TRANSACTION_CONDITION, + conditions: TTID_CONDITION, orderby: `${SpanFields.DEVICE_CLASS}`, }, ], @@ -215,14 +213,11 @@ const TTFD_BAR_CHART_WIDGET: Widget = { queries: [ { name: '', - fields: [ - SpanFields.DEVICE_CLASS, - `avg(${SpanFields.MEASUREMENTS_TIME_TO_FULL_DISPLAY})`, - ], - aggregates: [`avg(${SpanFields.MEASUREMENTS_TIME_TO_FULL_DISPLAY})`], + fields: [SpanFields.DEVICE_CLASS, `avg(${SpanFields.APP_VITALS_TTFD_VALUE})`], + aggregates: [`avg(${SpanFields.APP_VITALS_TTFD_VALUE})`], columns: [SpanFields.DEVICE_CLASS], fieldAliases: ['Device Class', 'AVG TTFD'], - conditions: TRANSACTION_CONDITION, + conditions: TTFD_CONDITION, orderby: `${SpanFields.DEVICE_CLASS}`, }, ], diff --git a/static/app/views/dashboards/utils/prebuiltConfigs/mobileVitals/screenRendering.ts b/static/app/views/dashboards/utils/prebuiltConfigs/mobileVitals/screenRendering.ts index f71eba378a5d4d..8e70b03785742e 100644 --- a/static/app/views/dashboards/utils/prebuiltConfigs/mobileVitals/screenRendering.ts +++ b/static/app/views/dashboards/utils/prebuiltConfigs/mobileVitals/screenRendering.ts @@ -20,14 +20,14 @@ const SPAN_OPERATIONS_TABLE: Widget = { fields: [ SpanFields.SPAN_OP, SpanFields.SPAN_DESCRIPTION, - `equation|sum(${SpanFields.MOBILE_SLOW_FRAMES})/sum(${SpanFields.MOBILE_TOTAL_FRAMES})`, - `equation|sum(${SpanFields.MOBILE_FROZEN_FRAMES})/sum(${SpanFields.MOBILE_TOTAL_FRAMES})`, - `avg(${SpanFields.MOBILE_FRAMES_DELAY})`, + `equation|sum(${SpanFields.APP_VITALS_FRAMES_SLOW_COUNT})/sum(${SpanFields.APP_VITALS_FRAMES_TOTAL_COUNT})`, + `equation|sum(${SpanFields.APP_VITALS_FRAMES_FROZEN_COUNT})/sum(${SpanFields.APP_VITALS_FRAMES_TOTAL_COUNT})`, + `avg(${SpanFields.APP_VITALS_FRAMES_DELAY_VALUE})`, ], aggregates: [ - `equation|sum(${SpanFields.MOBILE_SLOW_FRAMES})/sum(${SpanFields.MOBILE_TOTAL_FRAMES})`, - `equation|sum(${SpanFields.MOBILE_FROZEN_FRAMES})/sum(${SpanFields.MOBILE_TOTAL_FRAMES})`, - `avg(${SpanFields.MOBILE_FRAMES_DELAY})`, + `equation|sum(${SpanFields.APP_VITALS_FRAMES_SLOW_COUNT})/sum(${SpanFields.APP_VITALS_FRAMES_TOTAL_COUNT})`, + `equation|sum(${SpanFields.APP_VITALS_FRAMES_FROZEN_COUNT})/sum(${SpanFields.APP_VITALS_FRAMES_TOTAL_COUNT})`, + `avg(${SpanFields.APP_VITALS_FRAMES_DELAY_VALUE})`, ], columns: [SpanFields.SPAN_OP, SpanFields.SPAN_DESCRIPTION], fieldAliases: [ @@ -45,7 +45,7 @@ const SPAN_OPERATIONS_TABLE: Widget = { null, ], conditions: SPAN_OPERATIONS_CONDITION, - orderby: '-avg(mobile.frames_delay)', + orderby: `-avg(${SpanFields.APP_VITALS_FRAMES_DELAY_VALUE})`, }, ], layout: { diff --git a/static/app/views/insights/types.tsx b/static/app/views/insights/types.tsx index 0955327ee454de..1c66241be44884 100644 --- a/static/app/views/insights/types.tsx +++ b/static/app/views/insights/types.tsx @@ -133,14 +133,23 @@ export enum SpanFields { DB_SYSTEM = 'db.system', // TODO: this is a duplicate of `SPAN_SYSTEM` // Mobile fields + DEVICE_CLASS = 'device.class', + APP_VITALS_START_COLD_VALUE = 'app.vitals.start.cold.value', + APP_VITALS_START_WARM_VALUE = 'app.vitals.start.warm.value', + APP_VITALS_START_TYPE = 'app.vitals.start.type', + APP_VITALS_TTID_VALUE = 'app.vitals.ttid.value', + APP_VITALS_TTFD_VALUE = 'app.vitals.ttfd.value', + APP_VITALS_FRAMES_SLOW_COUNT = 'app.vitals.frames.slow.count', + APP_VITALS_FRAMES_FROZEN_COUNT = 'app.vitals.frames.frozen.count', + APP_VITALS_FRAMES_TOTAL_COUNT = 'app.vitals.frames.total.count', + APP_VITALS_FRAMES_DELAY_VALUE = 'app.vitals.frames.delay.value', + + // Mobile fields (deprecated, prefer app.vitals.* equivalents) MEASUREMENTS_TIME_TO_INITIAL_DISPLAY = 'measurements.time_to_initial_display', MEASUREMENTS_TIME_TO_FULL_DISPLAY = 'measurements.time_to_full_display', MOBILE_FROZEN_FRAMES = 'mobile.frozen_frames', MOBILE_TOTAL_FRAMES = 'mobile.total_frames', MOBILE_SLOW_FRAMES = 'mobile.slow_frames', - FROZEN_FRAMES_RATE = 'measurements.frames_frozen_rate', - SLOW_FRAMES_RATE = 'measurements.frames_slow_rate', - DEVICE_CLASS = 'device.class', APP_START_COLD = 'measurements.app_start_cold', APP_START_WARM = 'measurements.app_start_warm', MOBILE_FRAMES_DELAY = 'mobile.frames_delay', From e6f85a65eda492ca405527b85c584f2e6e3cbe16 Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Wed, 15 Apr 2026 15:14:55 +0200 Subject: [PATCH 2/2] fix(types): Restore FROZEN_FRAMES_RATE and SLOW_FRAMES_RATE enum keys These were accidentally removed during the file reorganization but are still referenced in the SpanNumberFields type union. Made-with: Cursor --- static/app/views/insights/types.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/static/app/views/insights/types.tsx b/static/app/views/insights/types.tsx index a639c9b470a38b..ca3e7294766664 100644 --- a/static/app/views/insights/types.tsx +++ b/static/app/views/insights/types.tsx @@ -161,6 +161,8 @@ export enum SpanFields { APP_START_WARM = 'measurements.app_start_warm', MOBILE_FRAMES_DELAY = 'mobile.frames_delay', APP_START_TYPE = 'app_start_type', + FROZEN_FRAMES_RATE = 'measurements.frames_frozen_rate', + SLOW_FRAMES_RATE = 'measurements.frames_slow_rate', TTID = 'sentry.ttid', TTFD = 'sentry.ttfd',