@atlaskit/react-ufo 4.16.5 → 4.16.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/dist/cjs/create-payload/index.js +4 -4
- package/dist/cjs/interaction-metrics/index.js +8 -0
- package/dist/cjs/segment/index.js +7 -0
- package/dist/cjs/segment/ssr-render-profiler.js +57 -18
- package/dist/es2019/create-payload/index.js +1 -1
- package/dist/es2019/interaction-metrics/index.js +8 -0
- package/dist/es2019/segment/index.js +2 -1
- package/dist/es2019/segment/ssr-render-profiler.js +53 -13
- package/dist/esm/create-payload/index.js +4 -4
- package/dist/esm/interaction-metrics/index.js +8 -0
- package/dist/esm/segment/index.js +2 -1
- package/dist/esm/segment/ssr-render-profiler.js +57 -19
- package/dist/types/config/index.d.ts +1 -0
- package/dist/types/segment/index.d.ts +1 -0
- package/dist/types/segment/ssr-render-profiler.d.ts +52 -0
- package/dist/types-ts4.5/config/index.d.ts +1 -0
- package/dist/types-ts4.5/segment/index.d.ts +1 -0
- package/dist/types-ts4.5/segment/ssr-render-profiler.d.ts +52 -0
- package/package.json +9 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# @atlaskit/ufo-interaction-ignore
|
|
2
2
|
|
|
3
|
+
## 4.16.7
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [`b59c796cf683e`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/b59c796cf683e) -
|
|
8
|
+
Aborting post-interaction logs also when original event is already finished
|
|
9
|
+
|
|
10
|
+
## 4.16.6
|
|
11
|
+
|
|
12
|
+
### Patch Changes
|
|
13
|
+
|
|
14
|
+
- [`2b80f43fe0ea7`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/2b80f43fe0ea7) -
|
|
15
|
+
Add platform feature gate check for collecting more accurate page visibility
|
|
16
|
+
|
|
3
17
|
## 4.16.5
|
|
4
18
|
|
|
5
19
|
### Patch Changes
|
|
@@ -5,17 +5,17 @@ return{'event:assets':assets};}return{};}catch(_unused2){// Skip CHR in case of
|
|
|
5
5
|
return{};}}function getTracingContextData(interaction){var trace=interaction.trace,start=interaction.start;var tracingContextData={};if(trace){tracingContextData={'ufo:tracingContext':{'X-B3-TraceId':trace.traceId,'X-B3-SpanId':trace.spanId,// eslint-disable-next-line compat/compat
|
|
6
6
|
browserTimeOrigin:+(performance.timeOrigin+start).toFixed(2)}};}return tracingContextData;}function optimizeCustomData(interaction){var customData=interaction.customData,cohortingCustomData=interaction.cohortingCustomData,legacyMetrics=interaction.legacyMetrics;var customDataMap=customData.reduce(function(result,_ref){var _result$get$data,_result$get;var labelStack=_ref.labelStack,data=_ref.data;var label=(0,_utils.stringifyLabelStackFully)(labelStack);var value=(_result$get$data=(_result$get=result.get(label))===null||_result$get===void 0?void 0:_result$get.data)!==null&&_result$get$data!==void 0?_result$get$data:{};result.set(label,{labelStack:(0,_utils.optimizeLabelStack)(labelStack,(0,_getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type)),data:Object.assign(value,data)});return result;},new Map());// Merge cohorting custom data into the same map
|
|
7
7
|
if(cohortingCustomData&&cohortingCustomData.size>0){var _interaction$labelSta,_customDataMap$get$da,_customDataMap$get,_interaction$labelSta2;var label=(0,_utils.stringifyLabelStackFully)((_interaction$labelSta=interaction.labelStack)!==null&&_interaction$labelSta!==void 0?_interaction$labelSta:[]);var value=(_customDataMap$get$da=(_customDataMap$get=customDataMap.get(label))===null||_customDataMap$get===void 0?void 0:_customDataMap$get.data)!==null&&_customDataMap$get$da!==void 0?_customDataMap$get$da:{};customDataMap.set(label,{labelStack:(0,_utils.optimizeLabelStack)((_interaction$labelSta2=interaction.labelStack)!==null&&_interaction$labelSta2!==void 0?_interaction$labelSta2:[],(0,_getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type)),data:Object.assign(value,Object.fromEntries(cohortingCustomData))});}if(legacyMetrics){var legacyMetricsFiltered=legacyMetrics.filter(function(item){return item.type==='PAGE_LOAD';}).reduce(function(result,currentValue){for(var _i=0,_Object$entries=Object.entries(currentValue.custom||{});_i<_Object$entries.length;_i++){var _result$get$data2,_result$get2;var _Object$entries$_i=(0,_slicedToArray2.default)(_Object$entries[_i],2),key=_Object$entries$_i[0],_value=_Object$entries$_i[1];var _label=(0,_utils.stringifyLabelStackFully)([]);var labelValue=(_result$get$data2=(_result$get2=result.get(_label))===null||_result$get2===void 0?void 0:_result$get2.data)!==null&&_result$get$data2!==void 0?_result$get$data2:{};result.set(_label,{labelStack:(0,_utils.optimizeLabelStack)([],(0,_getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type)),data:Object.assign(labelValue,(0,_defineProperty2.default)({},key,_value))});}return result;},new Map());return[].concat((0,_toConsumableArray2.default)(customDataMap.values()),(0,_toConsumableArray2.default)(legacyMetricsFiltered.values()));}return(0,_toConsumableArray2.default)(customDataMap.values());}function optimizeRedirects(redirects,interactionStart){var lastRedirectTime=interactionStart;var updatedRedirects=redirects.sort(function(a,b){return a.time-b.time;}).reduce(function(result,redirect){var fromInteractionName=redirect.fromInteractionName,time=redirect.time;if(lastRedirectTime>=interactionStart){result.push({labelStack:[{n:fromInteractionName}],startTime:Math.round(lastRedirectTime),endTime:Math.round(time)});}lastRedirectTime=time;return result;},[]);return updatedRedirects;}function objectToArray(){var obj=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};return Object.keys(obj).reduce(function(result,key){result.push({label:key,data:obj[key]});return result;},[]);}function getBM3SubmetricsTimings(submetrics){if(!submetrics){return null;}var submetricsTimings=submetrics.filter(function(item){return typeof item.stop==='number'&&!!item.key&&typeof item.start==='number';}).map(function(item){var childSubmetrics;var newKey="include/".concat(item.key);if(item.submetrics){childSubmetrics=getBM3SubmetricsTimings(item.submetrics);}return _objectSpread((0,_defineProperty2.default)({},newKey,{endTime:item.stop-item.start,startTime:item.start}),childSubmetrics?childSubmetrics:{});});return submetricsTimings;}function getBm3TrackerTimings(interaction){var interactionLegacyMetrics=interaction.legacyMetrics;if(!interactionLegacyMetrics){return{};}var legacyMetrics=interactionLegacyMetrics.map(function(item){var _item$config,_item$config2,_item$marks;return{key:item.key,startTime:item.start,stopTime:item.stop,type:(_item$config=item.config)===null||_item$config===void 0?void 0:_item$config.type,reactUFOName:(_item$config2=item.config)===null||_item$config2===void 0?void 0:_item$config2.reactUFOName,fmp:((_item$marks=item.marks)===null||_item$marks===void 0?void 0:_item$marks['fmp'])||item.stop,source:'bm3',timings:(0,_customTimings.getBm3Timings)(item.marks,item.config.timings),submetrics:getBM3SubmetricsTimings(item.submetrics),pageVisibleState:item.pageVisibleState};}).filter(function(item){return!!item.type;});return{legacyMetrics:legacyMetrics};}function getStylesheetMetrics(){try{var doc=(0,_browserApis.getDocument)();if(!doc){return{};}var stylesheets=Array.from(doc.styleSheets);var stylesheetCount=stylesheets.length;var cssrules=Array.from(doc.styleSheets).reduce(function(acc,item){// Other domain stylesheets throw a SecurityError
|
|
8
|
-
try{return acc+item.cssRules.length;}catch(_unused3){return acc;}},0);var styleElements=doc.querySelectorAll('style').length;var styleProps=doc.querySelectorAll('[style]');var styleDeclarations=Array.from(doc.querySelectorAll('[style]')).reduce(function(acc,item){try{if('style'in item){return acc+item.style.length;}else{return acc;}}catch(_unused4){return acc;}},0);return{'ufo:stylesheets':stylesheetCount,'ufo:styleElements':styleElements,'ufo:styleProps':styleProps.length,'ufo:styleDeclarations':styleDeclarations,'ufo:cssrules':cssrules};}catch(_unused5){return{};}}var regularTTAI;var expTTAI;function getErrorCounts(interaction){return{'ufo:errors:globalCount':(0,_globalErrorHandler.getGlobalErrorCount)(),'ufo:errors:count':interaction.errors.length};}function createInteractionMetricsPayload(_x,_x2,_x3,_x4,_x5){return _createInteractionMetricsPayload.apply(this,arguments);}function _createInteractionMetricsPayload(){_createInteractionMetricsPayload=(0,_asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee(interaction,interactionId,experimental,criticalPayloadCount,vcMetrics){var _window$location,_config$additionalPay;var interactionPayloadStart,config,end,start,ufoName,knownSegments,rate,type,abortReason,routeName,featureFlags,previousInteractionName,isPreviousInteractionAborted,abortedByInteractionName,responsiveness,unknownElementName,unknownElementHierarchy,hydration,pageVisibilityAtTTI,pageVisibilityAtTTAI,segments,segmentTree,isDetailedPayload,isPageLoad,calculatePageVisibilityFromTheStartOfPageLoad,moreAccuratePageVisibilityAtTTI,moreAccuratePageVisibilityAtTTAI,labelStack,getInitialPageLoadSSRMetrics,pageLoadInteractionMetrics,getDetailedInteractionMetrics,getPageLoadDetailedInteractionMetrics,newUFOName,resourceTimings,_yield$Promise$all,_yield$Promise$all2,finalVCMetrics,experimentalMetrics,paintMetrics,batteryInfo,getReactHydrationStats,payload,size,vcRev,rawData,rawDataSize,interactionMetricsFieldsToTrim,properties,interactionMetrics,_iterator,_step,field,trimmedFields;return _regenerator.default.wrap(function _callee$(_context){while(1)switch(_context.prev=_context.next){case 0:interactionPayloadStart=performance.now();config=(0,_config.getConfig)();if(config){_context.next=4;break;}throw Error('UFO Configuration not provided');case 4:end=interaction.end,start=interaction.start,ufoName=interaction.ufoName,knownSegments=interaction.knownSegments,rate=interaction.rate,type=interaction.type,abortReason=interaction.abortReason,routeName=interaction.routeName,featureFlags=interaction.featureFlags,previousInteractionName=interaction.previousInteractionName,isPreviousInteractionAborted=interaction.isPreviousInteractionAborted,abortedByInteractionName=interaction.abortedByInteractionName,responsiveness=interaction.responsiveness,unknownElementName=interaction.unknownElementName,unknownElementHierarchy=interaction.unknownElementHierarchy,hydration=interaction.hydration;pageVisibilityAtTTI=getPageVisibilityUpToTTI(interaction);pageVisibilityAtTTAI=(0,_getPageVisibilityUpToTtai.default)(interaction);segments=!(0,_platformFeatureFlags.fg)('platform_ufo_remove_deprecated_config_fields')&&config.killswitchNestedSegments?[]:knownSegments;segmentTree=(0,_getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type)==='2.0.0'?(0,_utils.buildSegmentTree)(segments.map(function(segment){return segment.labelStack;})):{};isDetailedPayload=pageVisibilityAtTTAI==='visible';isPageLoad=type==='page_load';calculatePageVisibilityFromTheStartOfPageLoad=config.enableBetterPageVisibilityApi&&
|
|
8
|
+
try{return acc+item.cssRules.length;}catch(_unused3){return acc;}},0);var styleElements=doc.querySelectorAll('style').length;var styleProps=doc.querySelectorAll('[style]');var styleDeclarations=Array.from(doc.querySelectorAll('[style]')).reduce(function(acc,item){try{if('style'in item){return acc+item.style.length;}else{return acc;}}catch(_unused4){return acc;}},0);return{'ufo:stylesheets':stylesheetCount,'ufo:styleElements':styleElements,'ufo:styleProps':styleProps.length,'ufo:styleDeclarations':styleDeclarations,'ufo:cssrules':cssrules};}catch(_unused5){return{};}}var regularTTAI;var expTTAI;function getErrorCounts(interaction){return{'ufo:errors:globalCount':(0,_globalErrorHandler.getGlobalErrorCount)(),'ufo:errors:count':interaction.errors.length};}function createInteractionMetricsPayload(_x,_x2,_x3,_x4,_x5){return _createInteractionMetricsPayload.apply(this,arguments);}function _createInteractionMetricsPayload(){_createInteractionMetricsPayload=(0,_asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee(interaction,interactionId,experimental,criticalPayloadCount,vcMetrics){var _config$enableBetterP,_window$location,_config$additionalPay;var interactionPayloadStart,config,end,start,ufoName,knownSegments,rate,type,abortReason,routeName,featureFlags,previousInteractionName,isPreviousInteractionAborted,abortedByInteractionName,responsiveness,unknownElementName,unknownElementHierarchy,hydration,pageVisibilityAtTTI,pageVisibilityAtTTAI,segments,segmentTree,isDetailedPayload,isPageLoadEvent,isPageLoad,calculatePageVisibilityFromTheStartOfPageLoad,moreAccuratePageVisibilityAtTTI,moreAccuratePageVisibilityAtTTAI,labelStack,getInitialPageLoadSSRMetrics,pageLoadInteractionMetrics,getDetailedInteractionMetrics,getPageLoadDetailedInteractionMetrics,newUFOName,resourceTimings,_yield$Promise$all,_yield$Promise$all2,finalVCMetrics,experimentalMetrics,paintMetrics,batteryInfo,getReactHydrationStats,payload,size,vcRev,rawData,rawDataSize,interactionMetricsFieldsToTrim,properties,interactionMetrics,_iterator,_step,field,trimmedFields;return _regenerator.default.wrap(function _callee$(_context){while(1)switch(_context.prev=_context.next){case 0:interactionPayloadStart=performance.now();config=(0,_config.getConfig)();if(config){_context.next=4;break;}throw Error('UFO Configuration not provided');case 4:end=interaction.end,start=interaction.start,ufoName=interaction.ufoName,knownSegments=interaction.knownSegments,rate=interaction.rate,type=interaction.type,abortReason=interaction.abortReason,routeName=interaction.routeName,featureFlags=interaction.featureFlags,previousInteractionName=interaction.previousInteractionName,isPreviousInteractionAborted=interaction.isPreviousInteractionAborted,abortedByInteractionName=interaction.abortedByInteractionName,responsiveness=interaction.responsiveness,unknownElementName=interaction.unknownElementName,unknownElementHierarchy=interaction.unknownElementHierarchy,hydration=interaction.hydration;pageVisibilityAtTTI=getPageVisibilityUpToTTI(interaction);pageVisibilityAtTTAI=(0,_getPageVisibilityUpToTtai.default)(interaction);segments=!(0,_platformFeatureFlags.fg)('platform_ufo_remove_deprecated_config_fields')&&config.killswitchNestedSegments?[]:knownSegments;segmentTree=(0,_getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type)==='2.0.0'?(0,_utils.buildSegmentTree)(segments.map(function(segment){return segment.labelStack;})):{};isDetailedPayload=pageVisibilityAtTTAI==='visible';isPageLoadEvent=type==='page_load'||type==='transition';isPageLoad=type==='page_load';calculatePageVisibilityFromTheStartOfPageLoad=((_config$enableBetterP=config.enableBetterPageVisibilityApi)!==null&&_config$enableBetterP!==void 0?_config$enableBetterP:(0,_platformFeatureFlags.fg)('platform_enable_better_page_visibility'))&&isPageLoadEvent;moreAccuratePageVisibilityAtTTI=calculatePageVisibilityFromTheStartOfPageLoad?getMoreAccuratePageVisibilityUpToTTI(interaction):null;moreAccuratePageVisibilityAtTTAI=calculatePageVisibilityFromTheStartOfPageLoad?(0,_getMoreAccuratePageVisibilityUpToTtai.getMoreAccuratePageVisibilityUpToTTAI)(interaction):null;labelStack=interaction.labelStack?{labelStack:(0,_utils.optimizeLabelStack)(interaction.labelStack,(0,_getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type))}:{};// Page Load
|
|
9
9
|
getInitialPageLoadSSRMetrics=function getInitialPageLoadSSRMetrics(){var _config$ssr;if(!isPageLoad){return{};}var config=(0,_config.getConfig)();var SSRDoneTimeValue=(0,_getSsrDoneTimeValue.default)(config);var SSRDoneTime=SSRDoneTimeValue!==undefined?{SSRDoneTime:Math.round(SSRDoneTimeValue)}:{};var isBM3ConfigSSRDoneAsFmp=interaction.metaData.__legacy__bm3ConfigSSRDoneAsFmp;var isUFOConfigSSRDoneAsFmp=interaction.metaData.__legacy__bm3ConfigSSRDoneAsFmp||!!(config!==null&&config!==void 0&&(_config$ssr=config.ssr)!==null&&_config$ssr!==void 0&&_config$ssr.getSSRDoneTime);if(!experimental&&(isBM3ConfigSSRDoneAsFmp||isUFOConfigSSRDoneAsFmp)&&SSRDoneTimeValue!==undefined){try{performance.mark("FMP",{startTime:SSRDoneTimeValue,detail:{devtools:{dataType:'marker'}}});}catch(_unused6){}}return _objectSpread(_objectSpread({},SSRDoneTime),{},{isBM3ConfigSSRDoneAsFmp:isBM3ConfigSSRDoneAsFmp,isUFOConfigSSRDoneAsFmp:isUFOConfigSSRDoneAsFmp});};pageLoadInteractionMetrics=getInitialPageLoadSSRMetrics();// Detailed payload. Page visibility = visible
|
|
10
10
|
getDetailedInteractionMetrics=function getDetailedInteractionMetrics(resourceTimings){if(experimental||window.__UFO_COMPACT_PAYLOAD__||!isDetailedPayload){return{};}var spans=[].concat((0,_toConsumableArray2.default)(interaction.spans),(0,_toConsumableArray2.default)(_interactionMetrics.interactionSpans));_interactionMetrics.interactionSpans.length=0;var shouldInclude3pHolds=(0,_config.shouldUseRawDataThirdPartyBehavior)(ufoName,type);var basePayload={errors:interaction.errors.map(function(_ref2){var labelStack=_ref2.labelStack,others=(0,_objectWithoutProperties2.default)(_ref2,_excluded);return _objectSpread(_objectSpread({},others),{},{labelStack:labelStack&&(0,_utils.optimizeLabelStack)(labelStack,(0,_getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type))});}),holdActive:(0,_toConsumableArray2.default)(interaction.holdActive.values()),redirects:optimizeRedirects(interaction.redirects,start),holdInfo:(0,_optimizeHoldInfo.optimizeHoldInfo)(experimental?interaction.holdExpInfo:interaction.holdInfo,start,(0,_getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type)),spans:(0,_optimizeSpans.optimizeSpans)(spans,start,(0,_getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type)),requestInfo:(0,_optimizeRequestInfo.optimizeRequestInfo)(interaction.requestInfo,start,(0,_getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type)),customTimings:(0,_optimizeCustomTimings.optimizeCustomTimings)(interaction.customTimings,start),bundleEvalTimings:objectToArray(getBundleEvalTimings(start)),resourceTimings:objectToArray(resourceTimings)};// Include third-party holds when feature flag is active
|
|
11
11
|
if(shouldInclude3pHolds){var _interaction$hold3pIn;return _objectSpread(_objectSpread({},basePayload),{},{hold3pActive:interaction.hold3pActive?(0,_toConsumableArray2.default)(interaction.hold3pActive.values()):[],hold3pInfo:(0,_optimizeHoldInfo.optimizeHoldInfo)((_interaction$hold3pIn=interaction.hold3pInfo)!==null&&_interaction$hold3pIn!==void 0?_interaction$hold3pIn:[],start,(0,_getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type))});}return basePayload;};// Page load & detailed payload
|
|
12
|
-
getPageLoadDetailedInteractionMetrics=function getPageLoadDetailedInteractionMetrics(){var _config$ssr2,_config$ssr2$getSSRTi;if(!isPageLoad||!isDetailedPayload){return{};}var initialPageLoadExtraTimings=objectToArray(initialPageLoadExtraTiming.getTimings());var config=(0,_config.getConfig)();var defaultSSRTimings=objectToArray(ssr.getSSRTimings());var ssrTimingsFromConfig=config===null||config===void 0||(_config$ssr2=config.ssr)===null||_config$ssr2===void 0||(_config$ssr2$getSSRTi=_config$ssr2.getSSRTimings)===null||_config$ssr2$getSSRTi===void 0?void 0:_config$ssr2$getSSRTi.call(_config$ssr2);return{initialPageLoadExtraTimings:initialPageLoadExtraTimings,SSRTimings:ssrTimingsFromConfig?[].concat((0,_toConsumableArray2.default)(ssrTimingsFromConfig),(0,_toConsumableArray2.default)(defaultSSRTimings)):defaultSSRTimings};};if(experimental){expTTAI=(0,_getTtai.default)(interaction);}else{regularTTAI=(0,_getTtai.default)(interaction);}newUFOName=(0,_utils.sanitizeUfoName)(ufoName);resourceTimings=getResourceTimings(start,end);_context.t0=Promise;_context.t1=vcMetrics;if(_context.t1){_context.next=
|
|
12
|
+
getPageLoadDetailedInteractionMetrics=function getPageLoadDetailedInteractionMetrics(){var _config$ssr2,_config$ssr2$getSSRTi;if(!isPageLoad||!isDetailedPayload){return{};}var initialPageLoadExtraTimings=objectToArray(initialPageLoadExtraTiming.getTimings());var config=(0,_config.getConfig)();var defaultSSRTimings=objectToArray(ssr.getSSRTimings());var ssrTimingsFromConfig=config===null||config===void 0||(_config$ssr2=config.ssr)===null||_config$ssr2===void 0||(_config$ssr2$getSSRTi=_config$ssr2.getSSRTimings)===null||_config$ssr2$getSSRTi===void 0?void 0:_config$ssr2$getSSRTi.call(_config$ssr2);return{initialPageLoadExtraTimings:initialPageLoadExtraTimings,SSRTimings:ssrTimingsFromConfig?[].concat((0,_toConsumableArray2.default)(ssrTimingsFromConfig),(0,_toConsumableArray2.default)(defaultSSRTimings)):defaultSSRTimings};};if(experimental){expTTAI=(0,_getTtai.default)(interaction);}else{regularTTAI=(0,_getTtai.default)(interaction);}newUFOName=(0,_utils.sanitizeUfoName)(ufoName);resourceTimings=getResourceTimings(start,end);_context.t0=Promise;_context.t1=vcMetrics;if(_context.t1){_context.next=29;break;}_context.next=28;return(0,_getVcMetrics.default)(interaction);case 28:_context.t1=_context.sent;case 29:_context.t2=_context.t1;_context.t3=experimental?(0,_createExperimentalInteractionMetricsPayload.getExperimentalVCMetrics)(interaction):Promise.resolve(undefined);_context.t4=(0,_getPaintMetrics.getPaintMetricsToLegacyFormat)(type,end);_context.t5=(0,_getBatteryInfo.getBatteryInfoToLegacyFormat)();_context.t6=[_context.t2,_context.t3,_context.t4,_context.t5];_context.next=36;return _context.t0.all.call(_context.t0,_context.t6);case 36:_yield$Promise$all=_context.sent;_yield$Promise$all2=(0,_slicedToArray2.default)(_yield$Promise$all,4);finalVCMetrics=_yield$Promise$all2[0];experimentalMetrics=_yield$Promise$all2[1];paintMetrics=_yield$Promise$all2[2];batteryInfo=_yield$Promise$all2[3];if(!experimental){(0,_addPerformanceMeasures.addPerformanceMeasures)(interaction.start,(0,_toConsumableArray2.default)((finalVCMetrics===null||finalVCMetrics===void 0?void 0:finalVCMetrics['ufo:vc:rev'])||[]));}getReactHydrationStats=function getReactHydrationStats(){if(!hydration){return{};}return{hydration:hydration};};payload={actionSubject:'experience',action:'measured',eventType:'operational',source:'measured',tags:['observability'],attributes:{properties:_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({// basic
|
|
13
13
|
'event:hostname':((_window$location=window.location)===null||_window$location===void 0?void 0:_window$location.hostname)||'unknown','event:product':config.product,'event:population':config.population,'event:schema':'1.0.0','event:sizeInKb':0,'event:source':{name:'react-ufo/web',version:(0,_getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type)},'event:region':config.region||'unknown','experience:key':experimental?'custom.experimental-interaction-metrics':'custom.interaction-metrics','experience:name':newUFOName,// Include CPU usage monitoring data
|
|
14
14
|
'event:cpu:usage':(0,_machineUtilisation.createPressureStateReport)(interaction.start,interaction.end),'event:memory:usage':(0,_machineUtilisation.createMemoryStateReport)(interaction.start,interaction.end)},criticalPayloadCount!==undefined?{'ufo:multipayload':true,'ufo:criticalPayloadCount':criticalPayloadCount}:{}),(0,_getBrowserMetadata.getBrowserMetadataToLegacyFormat)()),batteryInfo),getSSRProperties(type)),getAssetsMetrics(interaction,pageLoadInteractionMetrics===null||pageLoadInteractionMetrics===void 0?void 0:pageLoadInteractionMetrics.SSRDoneTime)),getPPSMetrics(interaction)),paintMetrics),(0,_getNavigationMetrics.getNavigationMetricsToLegacyFormat)(type)),finalVCMetrics),experimentalMetrics),(_config$additionalPay=config.additionalPayloadData)===null||_config$additionalPay===void 0?void 0:_config$additionalPay.call(config,interaction)),getTracingContextData(interaction)),getStylesheetMetrics()),getErrorCounts(interaction)),getReactHydrationStats()),{},{interactionMetrics:_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({namePrefix:config.namePrefix||'',segmentPrefix:config.segmentPrefix||'',interactionId:interactionId,pageVisibilityAtTTI:pageVisibilityAtTTI,pageVisibilityAtTTAI:pageVisibilityAtTTAI,experimental__pageVisibilityAtTTI:moreAccuratePageVisibilityAtTTI,experimental__pageVisibilityAtTTAI:moreAccuratePageVisibilityAtTTAI,// raw interaction metrics
|
|
15
15
|
rate:rate,routeName:routeName,type:type,abortReason:abortReason,featureFlags:featureFlags,previousInteractionName:previousInteractionName,isPreviousInteractionAborted:isPreviousInteractionAborted,abortedByInteractionName:abortedByInteractionName,// performance
|
|
16
|
-
apdex:(0,_optimizeApdex.optimizeApdex)(interaction.apdex,(0,_getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type)),end:Math.round(end)},interaction.end3p?{end3p:Math.round(interaction.end3p)}:{}),{},{start:Math.round(start),segments:(0,_getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type)==='2.0.0'?segmentTree:(0,_utils.getOldSegmentsLabelStack)(segments,interaction.type),marks:(0,_optimizeMarks.optimizeMarks)(interaction.marks,(0,_getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type)),customData:optimizeCustomData(interaction),reactProfilerTimings:(0,_optimizeReactProfilerTimings.optimizeReactProfilerTimings)(interaction.reactProfilerTimings,start,(0,_getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type)),minorInteractions:interaction.minorInteractions},responsiveness?{responsiveness:responsiveness}:{}),labelStack),pageLoadInteractionMetrics),getDetailedInteractionMetrics(resourceTimings)),getPageLoadDetailedInteractionMetrics()),getBm3TrackerTimings(interaction)),{},{'metric:ttai':experimental?regularTTAI||expTTAI:undefined,'metric:experimental:ttai':expTTAI},unknownElementName?{unknownElementName:unknownElementName}:{}),unknownElementHierarchy?{unknownElementHierarchy:unknownElementHierarchy}:{}),'ufo:payloadTime':(0,_roundNumber.roundEpsilon)(performance.now()-interactionPayloadStart)})}};if(experimental){regularTTAI=undefined;expTTAI=undefined;}if((0,_platformFeatureFlags.fg)('platform_ufo_enable_vc_raw_data')){size=(0,_getPayloadSize.default)(payload.attributes.properties);vcRev=payload.attributes.properties['ufo:vc:rev'];rawData=vcRev.find(function(item){return item.revision==='raw-handler';});if(rawData){rawDataSize=(0,_getPayloadSize.default)(rawData);payload.attributes.properties['ufo:vc:raw:size']=rawDataSize;if(size>MAX_PAYLOAD_SIZE&&Array.isArray(vcRev)&&vcRev.length>0){payload.attributes.properties['ufo:vc:rev']=vcRev.filter(function(item){return item.revision!=='raw-handler';});payload.attributes.properties['ufo:vc:raw:removed']=true;}}payload.attributes.properties['event:sizeInKb']=(0,_getPayloadSize.default)(payload.attributes.properties);}else{payload.attributes.properties['event:sizeInKb']=(0,_getPayloadSize.default)(payload.attributes.properties);}if(!(0,_platformFeatureFlags.fg)('platform_ufo_enable_trimmed_payload')){_context.next=
|
|
16
|
+
apdex:(0,_optimizeApdex.optimizeApdex)(interaction.apdex,(0,_getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type)),end:Math.round(end)},interaction.end3p?{end3p:Math.round(interaction.end3p)}:{}),{},{start:Math.round(start),segments:(0,_getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type)==='2.0.0'?segmentTree:(0,_utils.getOldSegmentsLabelStack)(segments,interaction.type),marks:(0,_optimizeMarks.optimizeMarks)(interaction.marks,(0,_getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type)),customData:optimizeCustomData(interaction),reactProfilerTimings:(0,_optimizeReactProfilerTimings.optimizeReactProfilerTimings)(interaction.reactProfilerTimings,start,(0,_getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type)),minorInteractions:interaction.minorInteractions},responsiveness?{responsiveness:responsiveness}:{}),labelStack),pageLoadInteractionMetrics),getDetailedInteractionMetrics(resourceTimings)),getPageLoadDetailedInteractionMetrics()),getBm3TrackerTimings(interaction)),{},{'metric:ttai':experimental?regularTTAI||expTTAI:undefined,'metric:experimental:ttai':expTTAI},unknownElementName?{unknownElementName:unknownElementName}:{}),unknownElementHierarchy?{unknownElementHierarchy:unknownElementHierarchy}:{}),'ufo:payloadTime':(0,_roundNumber.roundEpsilon)(performance.now()-interactionPayloadStart)})}};if(experimental){regularTTAI=undefined;expTTAI=undefined;}if((0,_platformFeatureFlags.fg)('platform_ufo_enable_vc_raw_data')){size=(0,_getPayloadSize.default)(payload.attributes.properties);vcRev=payload.attributes.properties['ufo:vc:rev'];rawData=vcRev.find(function(item){return item.revision==='raw-handler';});if(rawData){rawDataSize=(0,_getPayloadSize.default)(rawData);payload.attributes.properties['ufo:vc:raw:size']=rawDataSize;if(size>MAX_PAYLOAD_SIZE&&Array.isArray(vcRev)&&vcRev.length>0){payload.attributes.properties['ufo:vc:rev']=vcRev.filter(function(item){return item.revision!=='raw-handler';});payload.attributes.properties['ufo:vc:raw:removed']=true;}}payload.attributes.properties['event:sizeInKb']=(0,_getPayloadSize.default)(payload.attributes.properties);}else{payload.attributes.properties['event:sizeInKb']=(0,_getPayloadSize.default)(payload.attributes.properties);}if(!(0,_platformFeatureFlags.fg)('platform_ufo_enable_trimmed_payload')){_context.next=75;break;}// in order of importance, first one being least important
|
|
17
17
|
// we can add more fields as necessary
|
|
18
|
-
interactionMetricsFieldsToTrim=['requestInfo','featureFlags','resourceTimings'];properties=payload.attributes.properties;interactionMetrics=properties.interactionMetrics;if(!interactionMetrics){_context.next=
|
|
18
|
+
interactionMetricsFieldsToTrim=['requestInfo','featureFlags','resourceTimings'];properties=payload.attributes.properties;interactionMetrics=properties.interactionMetrics;if(!interactionMetrics){_context.next=75;break;}_iterator=_createForOfIteratorHelper(interactionMetricsFieldsToTrim);_context.prev=53;_iterator.s();case 55:if((_step=_iterator.n()).done){_context.next=67;break;}field=_step.value;if(!((0,_getPayloadSize.default)(properties)<=MAX_PAYLOAD_SIZE)){_context.next=59;break;}return _context.abrupt("continue",65);case 59:interactionMetrics[field]=undefined;properties['event:isTrimmed']=true;trimmedFields=properties['event:trimmedFields'];if(!Array.isArray(trimmedFields)){trimmedFields=[];}trimmedFields.push("interactionMetrics.".concat(field));properties['event:trimmedFields']=trimmedFields;case 65:_context.next=55;break;case 67:_context.next=72;break;case 69:_context.prev=69;_context.t7=_context["catch"](53);_iterator.e(_context.t7);case 72:_context.prev=72;_iterator.f();return _context.finish(72);case 75:return _context.abrupt("return",payload);case 76:case"end":return _context.stop();}},_callee,null,[[53,69,72,75]]);}));return _createInteractionMetricsPayload.apply(this,arguments);}function createPayloads(_x6,_x7){return _createPayloads.apply(this,arguments);}function _createPayloads(){_createPayloads=(0,_asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee2(interactionId,interaction){var ufoNameOverride,modifiedInteraction,payloads,isCriticalMetricsEnabled,vcMetrics,criticalMetricsPayloads,criticalPayloadCount,interactionMetricsPayload;return _regenerator.default.wrap(function _callee2$(_context2){while(1)switch(_context2.prev=_context2.next){case 0:ufoNameOverride=getUfoNameOverride(interaction);modifiedInteraction=_objectSpread(_objectSpread({},interaction),{},{ufoName:ufoNameOverride});payloads=[];isCriticalMetricsEnabled=(0,_platformFeatureFlags.fg)('platform_ufo_critical_metrics_payload');// Calculate VC metrics once to avoid duplicate expensive calculations
|
|
19
19
|
_context2.next=6;return(0,_getVcMetrics.default)(interaction);case 6:vcMetrics=_context2.sent;if(!isCriticalMetricsEnabled){_context2.next=13;break;}_context2.next=10;return(0,_criticalMetricsPayload.createCriticalMetricsPayloads)(interactionId,interaction,vcMetrics);case 10:_context2.t0=_context2.sent;_context2.next=14;break;case 13:_context2.t0=[];case 14:criticalMetricsPayloads=_context2.t0;payloads.push.apply(payloads,(0,_toConsumableArray2.default)(criticalMetricsPayloads));criticalPayloadCount=isCriticalMetricsEnabled?criticalMetricsPayloads.length:undefined;_context2.next=19;return createInteractionMetricsPayload(modifiedInteraction,interactionId,undefined,criticalPayloadCount,vcMetrics);case 19:interactionMetricsPayload=_context2.sent;payloads.push(interactionMetricsPayload);return _context2.abrupt("return",payloads.filter(Boolean));case 22:case"end":return _context2.stop();}},_callee2);}));return _createPayloads.apply(this,arguments);}function createExperimentalMetricsPayload(_x8,_x9){return _createExperimentalMetricsPayload.apply(this,arguments);}function _createExperimentalMetricsPayload(){_createExperimentalMetricsPayload=(0,_asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee3(interactionId,interaction){var config,ufoName,rate,pageVisibilityState,result;return _regenerator.default.wrap(function _callee3$(_context3){while(1)switch(_context3.prev=_context3.next){case 0:config=(0,_config.getConfig)();if(config){_context3.next=3;break;}throw Error('UFO Configuration not provided');case 3:ufoName=(0,_utils.sanitizeUfoName)(interaction.ufoName);rate=(0,_config.getExperimentalInteractionRate)(ufoName,interaction.type);if((0,_coinflip.default)(rate)){_context3.next=7;break;}return _context3.abrupt("return",null);case 7:pageVisibilityState=(0,_hiddenTiming.getPageVisibilityState)(interaction.start,interaction.end);if(!(pageVisibilityState!=='visible')){_context3.next=10;break;}return _context3.abrupt("return",null);case 10:_context3.next=12;return createInteractionMetricsPayload(interaction,interactionId,true);case 12:result=_context3.sent;return _context3.abrupt("return",result);case 14:case"end":return _context3.stop();}},_callee3);}));return _createExperimentalMetricsPayload.apply(this,arguments);}function createExtraSearchPageInteractionPayload(_x0,_x1){return _createExtraSearchPageInteractionPayload.apply(this,arguments);}function _createExtraSearchPageInteractionPayload(){_createExtraSearchPageInteractionPayload=(0,_asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee4(interactionId,interaction){var SAIN_HOLD_NAMES,NAME_OVERRIDE,SEARCH_PAGE_SMART_ANSWERS_SEGMENT_LABEL,newInteractionId,newEnd,holdInfo,reactProfilerTimings,lastHold,isLastHoldSAIN,lastFilteredTime,filteredReactProfilerTimings,lastTiming,modifiedInteraction,payloads,vcMetrics,interactionMetricsPayload;return _regenerator.default.wrap(function _callee4$(_context4){while(1)switch(_context4.prev=_context4.next){case 0:SAIN_HOLD_NAMES=['search-ai-dialog-visible-text-loading','search-ai-dialog-all-text-loading'];NAME_OVERRIDE='search-page-ignoring-smart-answers';SEARCH_PAGE_SMART_ANSWERS_SEGMENT_LABEL='search-page-smart-answers';newInteractionId="".concat(interactionId,"-ignoring-smart-answers");// Calculate a new end time which excludes SAIN holds
|
|
20
20
|
holdInfo=interaction.holdInfo,reactProfilerTimings=interaction.reactProfilerTimings;lastHold=holdInfo.at(-1);isLastHoldSAIN=Boolean(lastHold&&SAIN_HOLD_NAMES.includes(lastHold.name));// A new end time is only calculated if the last hold is a SAIN hold
|
|
21
21
|
if(isLastHoldSAIN){lastFilteredTime=null;filteredReactProfilerTimings=reactProfilerTimings.filter(function(timing){if(timing.commitTime===lastFilteredTime){return false;}var isTimingSmartAnswersInSearch=timing.labelStack.some(function(label){return label.name===SEARCH_PAGE_SMART_ANSWERS_SEGMENT_LABEL;});if(isTimingSmartAnswersInSearch){lastFilteredTime=timing.commitTime;return false;}return true;});lastTiming=filteredReactProfilerTimings.at(-1);if(lastTiming){newEnd=lastTiming.commitTime;}}modifiedInteraction=_objectSpread(_objectSpread({},interaction),{},{end:newEnd!==null&&newEnd!==void 0?newEnd:interaction.end,holdInfo:[],knownSegments:[],reactProfilerTimings:[],ufoName:NAME_OVERRIDE});payloads=[];_context4.next=12;return(0,_getVcMetrics.default)(interaction,false,true);case 12:vcMetrics=_context4.sent;_context4.next=15;return createInteractionMetricsPayload(modifiedInteraction,newInteractionId,undefined,undefined,vcMetrics);case 15:interactionMetricsPayload=_context4.sent;payloads.push(interactionMetricsPayload);return _context4.abrupt("return",payloads.filter(Boolean));case 18:case"end":return _context4.stop();}},_callee4);}));return _createExtraSearchPageInteractionPayload.apply(this,arguments);}
|
|
@@ -61,6 +61,7 @@ var _utils = require("../create-payload/common/utils");
|
|
|
61
61
|
var _experienceTraceIdContext = require("../experience-trace-id-context");
|
|
62
62
|
var _featureFlagsAccessed = require("../feature-flags-accessed");
|
|
63
63
|
var _interactionIdContext = require("../interaction-id-context");
|
|
64
|
+
var _ssrRenderProfiler = require("../segment/ssr-render-profiler");
|
|
64
65
|
var _vc = require("../vc");
|
|
65
66
|
var _constants = require("./common/constants");
|
|
66
67
|
var _interactionExtraMetrics = _interopRequireDefault(require("./interaction-extra-metrics"));
|
|
@@ -717,6 +718,7 @@ function finishInteraction(id, data) {
|
|
|
717
718
|
}
|
|
718
719
|
(0, _experienceTraceIdContext.clearActiveTrace)();
|
|
719
720
|
callCleanUpCallbacks(data);
|
|
721
|
+
(0, _ssrRenderProfiler.flushSsrRenderProfilerTraces)();
|
|
720
722
|
if ((_getConfig4 = (0, _config.getConfig)()) !== null && _getConfig4 !== void 0 && (_getConfig4 = _getConfig4.vc) !== null && _getConfig4 !== void 0 && _getConfig4.stopVCAtInteractionFinish) {
|
|
721
723
|
// Use per-interaction VC observer if available, otherwise fall back to global
|
|
722
724
|
var observer = data.vcObserver;
|
|
@@ -1084,6 +1086,12 @@ function abortByNewInteraction(interactionId, interactionName) {
|
|
|
1084
1086
|
(0, _createExperimentalInteractionMetricsPayload.onExperimentalInteractionComplete)(interactionId, interaction);
|
|
1085
1087
|
remove(interactionId);
|
|
1086
1088
|
}
|
|
1089
|
+
} else {
|
|
1090
|
+
if ((0, _platformFeatureFlags.fg)('platform_reset_post_interaction_on_new_interaction')) {
|
|
1091
|
+
// post-interaction log is active after interaction is aborted by new one
|
|
1092
|
+
postInteractionLog.reset();
|
|
1093
|
+
postInteractionLog.stopVCObserver();
|
|
1094
|
+
}
|
|
1087
1095
|
}
|
|
1088
1096
|
}
|
|
1089
1097
|
function abortAll(abortReason, abortedByInteractionName) {
|
|
@@ -11,6 +11,13 @@ Object.defineProperty(exports, "UFOThirdPartySegment", {
|
|
|
11
11
|
}
|
|
12
12
|
});
|
|
13
13
|
exports.default = void 0;
|
|
14
|
+
Object.defineProperty(exports, "flushSsrRenderProfilerTraces", {
|
|
15
|
+
enumerable: true,
|
|
16
|
+
get: function get() {
|
|
17
|
+
return _ssrRenderProfiler.flushSsrRenderProfilerTraces;
|
|
18
|
+
}
|
|
19
|
+
});
|
|
14
20
|
var _segment = _interopRequireDefault(require("./segment"));
|
|
15
21
|
var _thirdPartySegment = require("./third-party-segment");
|
|
22
|
+
var _ssrRenderProfiler = require("./ssr-render-profiler");
|
|
16
23
|
var _default = exports.default = _segment.default;
|
|
@@ -4,14 +4,20 @@ var _typeof = require("@babel/runtime/helpers/typeof");
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.default = exports.SsrRenderProfilerInner = void 0;
|
|
7
|
+
exports.flushSsrRenderProfilerTraces = exports.default = exports.clearState = exports.SsrRenderProfilerInner = void 0;
|
|
8
8
|
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
+
var _config = require("../config");
|
|
9
10
|
var _interactionMetrics = require("../interaction-metrics");
|
|
10
11
|
var _process;
|
|
11
12
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
12
13
|
// These are stored outside react context to be resilient to concurrent mode
|
|
13
14
|
// restarting the start marker from a suspense and losing the initial render
|
|
14
15
|
var startTimes = new Map();
|
|
16
|
+
var spanStates = new Map();
|
|
17
|
+
var clearState = exports.clearState = function clearState() {
|
|
18
|
+
startTimes.clear();
|
|
19
|
+
spanStates.clear();
|
|
20
|
+
};
|
|
15
21
|
// Keep track of the last interaction id and reset the start timers if it ever changes.
|
|
16
22
|
// This is to allow multi-step ssr to track the render timers from different "interaction"s seperately
|
|
17
23
|
var lastActiveInteraction;
|
|
@@ -19,26 +25,55 @@ function checkActiveInteractionAndResetStartMarksIfSet() {
|
|
|
19
25
|
var _getActiveInteraction;
|
|
20
26
|
var activeInteractionId = (_getActiveInteraction = (0, _interactionMetrics.getActiveInteraction)()) === null || _getActiveInteraction === void 0 ? void 0 : _getActiveInteraction.id;
|
|
21
27
|
if (!!lastActiveInteraction && lastActiveInteraction !== activeInteractionId) {
|
|
22
|
-
|
|
28
|
+
clearState();
|
|
23
29
|
}
|
|
24
30
|
lastActiveInteraction = activeInteractionId;
|
|
25
31
|
}
|
|
26
|
-
var
|
|
27
|
-
var
|
|
32
|
+
var getIsNativeTracingEnabled = function getIsNativeTracingEnabled() {
|
|
33
|
+
var _getConfig$ssr$enable, _getConfig;
|
|
34
|
+
return (_getConfig$ssr$enable = (_getConfig = (0, _config.getConfig)()) === null || _getConfig === void 0 || (_getConfig = _getConfig.ssr) === null || _getConfig === void 0 ? void 0 : _getConfig.enableNativeTracing) !== null && _getConfig$ssr$enable !== void 0 ? _getConfig$ssr$enable : false;
|
|
35
|
+
};
|
|
36
|
+
var onStartRender = function onStartRender(id, currentSegmentName, parentContext) {
|
|
37
|
+
var _startTimes$get, _vm_internals__, _spanStates$get;
|
|
28
38
|
if (!startTimes.has(id)) {
|
|
29
39
|
startTimes.set(id, []);
|
|
30
40
|
}
|
|
31
41
|
(_startTimes$get = startTimes.get(id)) === null || _startTimes$get === void 0 || _startTimes$get.push(performance.now());
|
|
42
|
+
if (!getIsNativeTracingEnabled()) {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
var startSpan = (_vm_internals__ = globalThis.__vm_internals__) === null || _vm_internals__ === void 0 || (_vm_internals__ = _vm_internals__.telemetry) === null || _vm_internals__ === void 0 ? void 0 : _vm_internals__.startSpan;
|
|
46
|
+
var spanState = (_spanStates$get = spanStates.get(id)) !== null && _spanStates$get !== void 0 ? _spanStates$get : null;
|
|
47
|
+
if (!spanState && startSpan) {
|
|
48
|
+
var span = startSpan(currentSegmentName, {
|
|
49
|
+
parentSpanId: parentContext === null || parentContext === void 0 ? void 0 : parentContext.spanId
|
|
50
|
+
});
|
|
51
|
+
spanState = {
|
|
52
|
+
span: span
|
|
53
|
+
};
|
|
54
|
+
spanStates.set(id, spanState);
|
|
55
|
+
}
|
|
56
|
+
return spanState;
|
|
32
57
|
};
|
|
33
|
-
var isInSSR =
|
|
58
|
+
var isInSSR = typeof __SERVER__ !== 'undefined' && __SERVER__ || typeof process !== 'undefined' && Boolean(((_process = process) === null || _process === void 0 || (_process = _process.env) === null || _process === void 0 ? void 0 : _process.REACT_SSR) || false);
|
|
34
59
|
var ProfilerMarker = function ProfilerMarker(_ref) {
|
|
35
60
|
var onRender = _ref.onRender;
|
|
36
|
-
|
|
37
|
-
onRender === null || onRender === void 0 || onRender();
|
|
38
|
-
}
|
|
61
|
+
onRender === null || onRender === void 0 || onRender();
|
|
39
62
|
return null;
|
|
40
63
|
};
|
|
64
|
+
var ParentSpanContext = /*#__PURE__*/(0, _react.createContext)(null);
|
|
65
|
+
|
|
66
|
+
// For profiler spans in SSR, we 'end' any with their latest end times set, we need to do this at UFO-interaction-end since until then the component could rerender/remount again and spans fundamentally don't use the last 'end' but the first
|
|
67
|
+
var flushSsrRenderProfilerTraces = exports.flushSsrRenderProfilerTraces = function flushSsrRenderProfilerTraces() {
|
|
68
|
+
spanStates.forEach(function (spanState) {
|
|
69
|
+
if (spanState.latestEndTime != null) {
|
|
70
|
+
spanState.span.end(spanState.latestEndTime);
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
spanStates.clear();
|
|
74
|
+
};
|
|
41
75
|
var SsrRenderProfilerInner = exports.SsrRenderProfilerInner = function SsrRenderProfilerInner(_ref2) {
|
|
76
|
+
var _currentSpanState$spa;
|
|
42
77
|
var children = _ref2.children,
|
|
43
78
|
labelStack = _ref2.labelStack,
|
|
44
79
|
_onRender = _ref2.onRender;
|
|
@@ -48,25 +83,29 @@ var SsrRenderProfilerInner = exports.SsrRenderProfilerInner = function SsrRender
|
|
|
48
83
|
}).join('/');
|
|
49
84
|
}, [labelStack]);
|
|
50
85
|
checkActiveInteractionAndResetStartMarksIfSet();
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
}
|
|
86
|
+
var parentSpan = (0, _react.useContext)(ParentSpanContext);
|
|
87
|
+
var currentSpanState = onStartRender(reactProfilerId, labelStack[labelStack.length - 1].name, parentSpan);
|
|
88
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(ParentSpanContext.Provider, {
|
|
89
|
+
value: (_currentSpanState$spa = currentSpanState === null || currentSpanState === void 0 ? void 0 : currentSpanState.span.getSpanContext()) !== null && _currentSpanState$spa !== void 0 ? _currentSpanState$spa : null
|
|
90
|
+
}, children, /*#__PURE__*/_react.default.createElement(ProfilerMarker, {
|
|
56
91
|
onRender: function onRender() {
|
|
57
92
|
var startTimesForId = startTimes.get(reactProfilerId);
|
|
58
93
|
if (startTimesForId !== null && startTimesForId !== void 0 && startTimesForId.length) {
|
|
59
|
-
var
|
|
94
|
+
var _endTime = performance.now();
|
|
60
95
|
var firstStartTime = startTimesForId[0];
|
|
61
96
|
var lastStartTime = startTimesForId[startTimesForId.length - 1];
|
|
62
|
-
var baseDuration =
|
|
63
|
-
var actualDuration =
|
|
97
|
+
var baseDuration = _endTime - lastStartTime;
|
|
98
|
+
var actualDuration = _endTime - firstStartTime;
|
|
64
99
|
_onRender('mount',
|
|
65
100
|
// this is incorrect, but on the server there is no mount phase
|
|
66
|
-
actualDuration, baseDuration, firstStartTime,
|
|
101
|
+
actualDuration, baseDuration, firstStartTime, _endTime);
|
|
102
|
+
}
|
|
103
|
+
var spanState = spanStates.get(reactProfilerId);
|
|
104
|
+
if (spanState) {
|
|
105
|
+
spanState.latestEndTime = performance.now();
|
|
67
106
|
}
|
|
68
107
|
}
|
|
69
|
-
}));
|
|
108
|
+
})));
|
|
70
109
|
};
|
|
71
110
|
var SsrRenderProfiler = function SsrRenderProfiler(props) {
|
|
72
111
|
if (isInSSR) {
|
|
@@ -5,7 +5,7 @@ return{'event:assets':assets};}return{};}catch{// Skip CHR in case of error
|
|
|
5
5
|
return{};}}function getTracingContextData(interaction){const{trace,start}=interaction;let tracingContextData={};if(trace){tracingContextData={'ufo:tracingContext':{'X-B3-TraceId':trace.traceId,'X-B3-SpanId':trace.spanId,// eslint-disable-next-line compat/compat
|
|
6
6
|
browserTimeOrigin:+(performance.timeOrigin+start).toFixed(2)}};}return tracingContextData;}function optimizeCustomData(interaction){const{customData,cohortingCustomData,legacyMetrics}=interaction;const customDataMap=customData.reduce((result,{labelStack,data})=>{var _result$get$data,_result$get;const label=stringifyLabelStackFully(labelStack);const value=(_result$get$data=(_result$get=result.get(label))===null||_result$get===void 0?void 0:_result$get.data)!==null&&_result$get$data!==void 0?_result$get$data:{};result.set(label,{labelStack:optimizeLabelStack(labelStack,getReactUFOPayloadVersion(interaction.type)),data:Object.assign(value,data)});return result;},new Map());// Merge cohorting custom data into the same map
|
|
7
7
|
if(cohortingCustomData&&cohortingCustomData.size>0){var _interaction$labelSta,_customDataMap$get$da,_customDataMap$get,_interaction$labelSta2;const label=stringifyLabelStackFully((_interaction$labelSta=interaction.labelStack)!==null&&_interaction$labelSta!==void 0?_interaction$labelSta:[]);const value=(_customDataMap$get$da=(_customDataMap$get=customDataMap.get(label))===null||_customDataMap$get===void 0?void 0:_customDataMap$get.data)!==null&&_customDataMap$get$da!==void 0?_customDataMap$get$da:{};customDataMap.set(label,{labelStack:optimizeLabelStack((_interaction$labelSta2=interaction.labelStack)!==null&&_interaction$labelSta2!==void 0?_interaction$labelSta2:[],getReactUFOPayloadVersion(interaction.type)),data:Object.assign(value,Object.fromEntries(cohortingCustomData))});}if(legacyMetrics){const legacyMetricsFiltered=legacyMetrics.filter(item=>item.type==='PAGE_LOAD').reduce((result,currentValue)=>{for(const[key,value]of Object.entries(currentValue.custom||{})){var _result$get$data2,_result$get2;const label=stringifyLabelStackFully([]);const labelValue=(_result$get$data2=(_result$get2=result.get(label))===null||_result$get2===void 0?void 0:_result$get2.data)!==null&&_result$get$data2!==void 0?_result$get$data2:{};result.set(label,{labelStack:optimizeLabelStack([],getReactUFOPayloadVersion(interaction.type)),data:Object.assign(labelValue,{[key]:value})});}return result;},new Map());return[...customDataMap.values(),...legacyMetricsFiltered.values()];}return[...customDataMap.values()];}function optimizeRedirects(redirects,interactionStart){let lastRedirectTime=interactionStart;const updatedRedirects=redirects.sort((a,b)=>a.time-b.time).reduce((result,redirect)=>{const{fromInteractionName,time}=redirect;if(lastRedirectTime>=interactionStart){result.push({labelStack:[{n:fromInteractionName}],startTime:Math.round(lastRedirectTime),endTime:Math.round(time)});}lastRedirectTime=time;return result;},[]);return updatedRedirects;}function objectToArray(obj={}){return Object.keys(obj).reduce((result,key)=>{result.push({label:key,data:obj[key]});return result;},[]);}function getBM3SubmetricsTimings(submetrics){if(!submetrics){return null;}const submetricsTimings=submetrics.filter(item=>{return typeof item.stop==='number'&&!!item.key&&typeof item.start==='number';}).map(item=>{let childSubmetrics;const newKey=`include/${item.key}`;if(item.submetrics){childSubmetrics=getBM3SubmetricsTimings(item.submetrics);}return{[newKey]:{endTime:item.stop-item.start,startTime:item.start},...(childSubmetrics?childSubmetrics:{})};});return submetricsTimings;}function getBm3TrackerTimings(interaction){const interactionLegacyMetrics=interaction.legacyMetrics;if(!interactionLegacyMetrics){return{};}const legacyMetrics=interactionLegacyMetrics.map(item=>{var _item$config,_item$config2,_item$marks;return{key:item.key,startTime:item.start,stopTime:item.stop,type:(_item$config=item.config)===null||_item$config===void 0?void 0:_item$config.type,reactUFOName:(_item$config2=item.config)===null||_item$config2===void 0?void 0:_item$config2.reactUFOName,fmp:((_item$marks=item.marks)===null||_item$marks===void 0?void 0:_item$marks['fmp'])||item.stop,source:'bm3',timings:getBm3Timings(item.marks,item.config.timings),submetrics:getBM3SubmetricsTimings(item.submetrics),pageVisibleState:item.pageVisibleState};}).filter(item=>!!item.type);return{legacyMetrics};}function getStylesheetMetrics(){try{const doc=getDocument();if(!doc){return{};}const stylesheets=Array.from(doc.styleSheets);const stylesheetCount=stylesheets.length;const cssrules=Array.from(doc.styleSheets).reduce((acc,item)=>{// Other domain stylesheets throw a SecurityError
|
|
8
|
-
try{return acc+item.cssRules.length;}catch{return acc;}},0);const styleElements=doc.querySelectorAll('style').length;const styleProps=doc.querySelectorAll('[style]');const styleDeclarations=Array.from(doc.querySelectorAll('[style]')).reduce((acc,item)=>{try{if('style'in item){return acc+item.style.length;}else{return acc;}}catch{return acc;}},0);return{'ufo:stylesheets':stylesheetCount,'ufo:styleElements':styleElements,'ufo:styleProps':styleProps.length,'ufo:styleDeclarations':styleDeclarations,'ufo:cssrules':cssrules};}catch{return{};}}let regularTTAI;let expTTAI;function getErrorCounts(interaction){return{'ufo:errors:globalCount':getGlobalErrorCount(),'ufo:errors:count':interaction.errors.length};}async function createInteractionMetricsPayload(interaction,interactionId,experimental,criticalPayloadCount,vcMetrics){var _window$location,_config$additionalPay;const interactionPayloadStart=performance.now();const config=getConfig();if(!config){throw Error('UFO Configuration not provided');}const{end,start,ufoName,knownSegments,rate,type,abortReason,routeName,featureFlags,previousInteractionName,isPreviousInteractionAborted,abortedByInteractionName,responsiveness,unknownElementName,unknownElementHierarchy,hydration}=interaction;const pageVisibilityAtTTI=getPageVisibilityUpToTTI(interaction);const pageVisibilityAtTTAI=getPageVisibilityUpToTTAI(interaction);const segments=!fg('platform_ufo_remove_deprecated_config_fields')&&config.killswitchNestedSegments?[]:knownSegments;const segmentTree=getReactUFOPayloadVersion(interaction.type)==='2.0.0'?buildSegmentTree(segments.map(segment=>segment.labelStack)):{};const isDetailedPayload=pageVisibilityAtTTAI==='visible';const isPageLoad=type==='page_load';const calculatePageVisibilityFromTheStartOfPageLoad=config.enableBetterPageVisibilityApi&&
|
|
8
|
+
try{return acc+item.cssRules.length;}catch{return acc;}},0);const styleElements=doc.querySelectorAll('style').length;const styleProps=doc.querySelectorAll('[style]');const styleDeclarations=Array.from(doc.querySelectorAll('[style]')).reduce((acc,item)=>{try{if('style'in item){return acc+item.style.length;}else{return acc;}}catch{return acc;}},0);return{'ufo:stylesheets':stylesheetCount,'ufo:styleElements':styleElements,'ufo:styleProps':styleProps.length,'ufo:styleDeclarations':styleDeclarations,'ufo:cssrules':cssrules};}catch{return{};}}let regularTTAI;let expTTAI;function getErrorCounts(interaction){return{'ufo:errors:globalCount':getGlobalErrorCount(),'ufo:errors:count':interaction.errors.length};}async function createInteractionMetricsPayload(interaction,interactionId,experimental,criticalPayloadCount,vcMetrics){var _config$enableBetterP,_window$location,_config$additionalPay;const interactionPayloadStart=performance.now();const config=getConfig();if(!config){throw Error('UFO Configuration not provided');}const{end,start,ufoName,knownSegments,rate,type,abortReason,routeName,featureFlags,previousInteractionName,isPreviousInteractionAborted,abortedByInteractionName,responsiveness,unknownElementName,unknownElementHierarchy,hydration}=interaction;const pageVisibilityAtTTI=getPageVisibilityUpToTTI(interaction);const pageVisibilityAtTTAI=getPageVisibilityUpToTTAI(interaction);const segments=!fg('platform_ufo_remove_deprecated_config_fields')&&config.killswitchNestedSegments?[]:knownSegments;const segmentTree=getReactUFOPayloadVersion(interaction.type)==='2.0.0'?buildSegmentTree(segments.map(segment=>segment.labelStack)):{};const isDetailedPayload=pageVisibilityAtTTAI==='visible';const isPageLoadEvent=type==='page_load'||type==='transition';const isPageLoad=type==='page_load';const calculatePageVisibilityFromTheStartOfPageLoad=((_config$enableBetterP=config.enableBetterPageVisibilityApi)!==null&&_config$enableBetterP!==void 0?_config$enableBetterP:fg('platform_enable_better_page_visibility'))&&isPageLoadEvent;const moreAccuratePageVisibilityAtTTI=calculatePageVisibilityFromTheStartOfPageLoad?getMoreAccuratePageVisibilityUpToTTI(interaction):null;const moreAccuratePageVisibilityAtTTAI=calculatePageVisibilityFromTheStartOfPageLoad?getMoreAccuratePageVisibilityUpToTTAI(interaction):null;const labelStack=interaction.labelStack?{labelStack:optimizeLabelStack(interaction.labelStack,getReactUFOPayloadVersion(interaction.type))}:{};// Page Load
|
|
9
9
|
const getInitialPageLoadSSRMetrics=()=>{var _config$ssr;if(!isPageLoad){return{};}const config=getConfig();const SSRDoneTimeValue=getSSRDoneTimeValue(config);const SSRDoneTime=SSRDoneTimeValue!==undefined?{SSRDoneTime:Math.round(SSRDoneTimeValue)}:{};const isBM3ConfigSSRDoneAsFmp=interaction.metaData.__legacy__bm3ConfigSSRDoneAsFmp;const isUFOConfigSSRDoneAsFmp=interaction.metaData.__legacy__bm3ConfigSSRDoneAsFmp||!!(config!==null&&config!==void 0&&(_config$ssr=config.ssr)!==null&&_config$ssr!==void 0&&_config$ssr.getSSRDoneTime);if(!experimental&&(isBM3ConfigSSRDoneAsFmp||isUFOConfigSSRDoneAsFmp)&&SSRDoneTimeValue!==undefined){try{performance.mark(`FMP`,{startTime:SSRDoneTimeValue,detail:{devtools:{dataType:'marker'}}});}catch{}}return{...SSRDoneTime,isBM3ConfigSSRDoneAsFmp,isUFOConfigSSRDoneAsFmp};};const pageLoadInteractionMetrics=getInitialPageLoadSSRMetrics();// Detailed payload. Page visibility = visible
|
|
10
10
|
const getDetailedInteractionMetrics=resourceTimings=>{if(experimental||window.__UFO_COMPACT_PAYLOAD__||!isDetailedPayload){return{};}const spans=[...interaction.spans,...atlaskitInteractionSpans];atlaskitInteractionSpans.length=0;const shouldInclude3pHolds=shouldUseRawDataThirdPartyBehavior(ufoName,type);const basePayload={errors:interaction.errors.map(({labelStack,...others})=>({...others,labelStack:labelStack&&optimizeLabelStack(labelStack,getReactUFOPayloadVersion(interaction.type))})),holdActive:[...interaction.holdActive.values()],redirects:optimizeRedirects(interaction.redirects,start),holdInfo:optimizeHoldInfo(experimental?interaction.holdExpInfo:interaction.holdInfo,start,getReactUFOPayloadVersion(interaction.type)),spans:optimizeSpans(spans,start,getReactUFOPayloadVersion(interaction.type)),requestInfo:optimizeRequestInfo(interaction.requestInfo,start,getReactUFOPayloadVersion(interaction.type)),customTimings:optimizeCustomTimings(interaction.customTimings,start),bundleEvalTimings:objectToArray(getBundleEvalTimings(start)),resourceTimings:objectToArray(resourceTimings)};// Include third-party holds when feature flag is active
|
|
11
11
|
if(shouldInclude3pHolds){var _interaction$hold3pIn;return{...basePayload,hold3pActive:interaction.hold3pActive?[...interaction.hold3pActive.values()]:[],hold3pInfo:optimizeHoldInfo((_interaction$hold3pIn=interaction.hold3pInfo)!==null&&_interaction$hold3pIn!==void 0?_interaction$hold3pIn:[],start,getReactUFOPayloadVersion(interaction.type))};}return basePayload;};// Page load & detailed payload
|
|
@@ -9,6 +9,7 @@ import { sanitizeUfoName, stringifyLabelStackFully } from '../create-payload/com
|
|
|
9
9
|
import { clearActiveTrace } from '../experience-trace-id-context';
|
|
10
10
|
import { allFeatureFlagsAccessed, currentFeatureFlagsAccessed } from '../feature-flags-accessed';
|
|
11
11
|
import { getInteractionId } from '../interaction-id-context';
|
|
12
|
+
import { flushSsrRenderProfilerTraces } from '../segment/ssr-render-profiler';
|
|
12
13
|
import { newVCObserver } from '../vc';
|
|
13
14
|
import { interactions } from './common/constants';
|
|
14
15
|
import InteractionExtraMetrics from './interaction-extra-metrics';
|
|
@@ -633,6 +634,7 @@ function finishInteraction(id, data, endTime = performance.now()) {
|
|
|
633
634
|
}
|
|
634
635
|
clearActiveTrace();
|
|
635
636
|
callCleanUpCallbacks(data);
|
|
637
|
+
flushSsrRenderProfilerTraces();
|
|
636
638
|
if ((_getConfig4 = getConfig()) !== null && _getConfig4 !== void 0 && (_getConfig4$vc = _getConfig4.vc) !== null && _getConfig4$vc !== void 0 && _getConfig4$vc.stopVCAtInteractionFinish) {
|
|
637
639
|
// Use per-interaction VC observer if available, otherwise fall back to global
|
|
638
640
|
const observer = data.vcObserver;
|
|
@@ -963,6 +965,12 @@ export function abortByNewInteraction(interactionId, interactionName) {
|
|
|
963
965
|
onExperimentalInteractionComplete(interactionId, interaction);
|
|
964
966
|
remove(interactionId);
|
|
965
967
|
}
|
|
968
|
+
} else {
|
|
969
|
+
if (fg('platform_reset_post_interaction_on_new_interaction')) {
|
|
970
|
+
// post-interaction log is active after interaction is aborted by new one
|
|
971
|
+
postInteractionLog.reset();
|
|
972
|
+
postInteractionLog.stopVCObserver();
|
|
973
|
+
}
|
|
966
974
|
}
|
|
967
975
|
}
|
|
968
976
|
export function abortAll(abortReason, abortedByInteractionName) {
|
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
var _process, _process$env;
|
|
2
|
-
import React, { useMemo } from 'react';
|
|
2
|
+
import React, { createContext, useContext, useMemo } from 'react';
|
|
3
|
+
import { getConfig } from '../config';
|
|
3
4
|
import { getActiveInteraction } from '../interaction-metrics';
|
|
4
|
-
|
|
5
5
|
// These are stored outside react context to be resilient to concurrent mode
|
|
6
6
|
// restarting the start marker from a suspense and losing the initial render
|
|
7
7
|
const startTimes = new Map();
|
|
8
|
+
const spanStates = new Map();
|
|
9
|
+
export const clearState = () => {
|
|
10
|
+
startTimes.clear();
|
|
11
|
+
spanStates.clear();
|
|
12
|
+
};
|
|
8
13
|
// Keep track of the last interaction id and reset the start timers if it ever changes.
|
|
9
14
|
// This is to allow multi-step ssr to track the render timers from different "interaction"s seperately
|
|
10
15
|
let lastActiveInteraction;
|
|
@@ -12,36 +17,67 @@ function checkActiveInteractionAndResetStartMarksIfSet() {
|
|
|
12
17
|
var _getActiveInteraction;
|
|
13
18
|
const activeInteractionId = (_getActiveInteraction = getActiveInteraction()) === null || _getActiveInteraction === void 0 ? void 0 : _getActiveInteraction.id;
|
|
14
19
|
if (!!lastActiveInteraction && lastActiveInteraction !== activeInteractionId) {
|
|
15
|
-
|
|
20
|
+
clearState();
|
|
16
21
|
}
|
|
17
22
|
lastActiveInteraction = activeInteractionId;
|
|
18
23
|
}
|
|
19
|
-
const
|
|
20
|
-
var
|
|
24
|
+
const getIsNativeTracingEnabled = () => {
|
|
25
|
+
var _getConfig$ssr$enable, _getConfig, _getConfig$ssr;
|
|
26
|
+
return (_getConfig$ssr$enable = (_getConfig = getConfig()) === null || _getConfig === void 0 ? void 0 : (_getConfig$ssr = _getConfig.ssr) === null || _getConfig$ssr === void 0 ? void 0 : _getConfig$ssr.enableNativeTracing) !== null && _getConfig$ssr$enable !== void 0 ? _getConfig$ssr$enable : false;
|
|
27
|
+
};
|
|
28
|
+
const onStartRender = (id, currentSegmentName, parentContext) => {
|
|
29
|
+
var _startTimes$get, _vm_internals__, _vm_internals__$telem, _spanStates$get;
|
|
21
30
|
if (!startTimes.has(id)) {
|
|
22
31
|
startTimes.set(id, []);
|
|
23
32
|
}
|
|
24
33
|
(_startTimes$get = startTimes.get(id)) === null || _startTimes$get === void 0 ? void 0 : _startTimes$get.push(performance.now());
|
|
34
|
+
if (!getIsNativeTracingEnabled()) {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
const startSpan = (_vm_internals__ = globalThis.__vm_internals__) === null || _vm_internals__ === void 0 ? void 0 : (_vm_internals__$telem = _vm_internals__.telemetry) === null || _vm_internals__$telem === void 0 ? void 0 : _vm_internals__$telem.startSpan;
|
|
38
|
+
let spanState = (_spanStates$get = spanStates.get(id)) !== null && _spanStates$get !== void 0 ? _spanStates$get : null;
|
|
39
|
+
if (!spanState && startSpan) {
|
|
40
|
+
const span = startSpan(currentSegmentName, {
|
|
41
|
+
parentSpanId: parentContext === null || parentContext === void 0 ? void 0 : parentContext.spanId
|
|
42
|
+
});
|
|
43
|
+
spanState = {
|
|
44
|
+
span
|
|
45
|
+
};
|
|
46
|
+
spanStates.set(id, spanState);
|
|
47
|
+
}
|
|
48
|
+
return spanState;
|
|
25
49
|
};
|
|
26
|
-
const isInSSR =
|
|
50
|
+
const isInSSR = typeof __SERVER__ !== 'undefined' && __SERVER__ || typeof process !== 'undefined' && Boolean(((_process = process) === null || _process === void 0 ? void 0 : (_process$env = _process.env) === null || _process$env === void 0 ? void 0 : _process$env.REACT_SSR) || false);
|
|
27
51
|
const ProfilerMarker = ({
|
|
28
52
|
onRender
|
|
29
53
|
}) => {
|
|
30
|
-
|
|
31
|
-
onRender === null || onRender === void 0 ? void 0 : onRender();
|
|
32
|
-
}
|
|
54
|
+
onRender === null || onRender === void 0 ? void 0 : onRender();
|
|
33
55
|
return null;
|
|
34
56
|
};
|
|
57
|
+
const ParentSpanContext = /*#__PURE__*/createContext(null);
|
|
58
|
+
|
|
59
|
+
// For profiler spans in SSR, we 'end' any with their latest end times set, we need to do this at UFO-interaction-end since until then the component could rerender/remount again and spans fundamentally don't use the last 'end' but the first
|
|
60
|
+
export const flushSsrRenderProfilerTraces = () => {
|
|
61
|
+
spanStates.forEach(spanState => {
|
|
62
|
+
if (spanState.latestEndTime != null) {
|
|
63
|
+
spanState.span.end(spanState.latestEndTime);
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
spanStates.clear();
|
|
67
|
+
};
|
|
35
68
|
export const SsrRenderProfilerInner = ({
|
|
36
69
|
children,
|
|
37
70
|
labelStack,
|
|
38
71
|
onRender
|
|
39
72
|
}) => {
|
|
73
|
+
var _currentSpanState$spa;
|
|
40
74
|
const reactProfilerId = useMemo(() => labelStack.map(l => l.name).join('/'), [labelStack]);
|
|
41
75
|
checkActiveInteractionAndResetStartMarksIfSet();
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
76
|
+
const parentSpan = useContext(ParentSpanContext);
|
|
77
|
+
const currentSpanState = onStartRender(reactProfilerId, labelStack[labelStack.length - 1].name, parentSpan);
|
|
78
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ParentSpanContext.Provider, {
|
|
79
|
+
value: (_currentSpanState$spa = currentSpanState === null || currentSpanState === void 0 ? void 0 : currentSpanState.span.getSpanContext()) !== null && _currentSpanState$spa !== void 0 ? _currentSpanState$spa : null
|
|
80
|
+
}, children, /*#__PURE__*/React.createElement(ProfilerMarker, {
|
|
45
81
|
onRender: () => {
|
|
46
82
|
const startTimesForId = startTimes.get(reactProfilerId);
|
|
47
83
|
if (startTimesForId !== null && startTimesForId !== void 0 && startTimesForId.length) {
|
|
@@ -54,8 +90,12 @@ export const SsrRenderProfilerInner = ({
|
|
|
54
90
|
// this is incorrect, but on the server there is no mount phase
|
|
55
91
|
actualDuration, baseDuration, firstStartTime, endTime);
|
|
56
92
|
}
|
|
93
|
+
const spanState = spanStates.get(reactProfilerId);
|
|
94
|
+
if (spanState) {
|
|
95
|
+
spanState.latestEndTime = performance.now();
|
|
96
|
+
}
|
|
57
97
|
}
|
|
58
|
-
}));
|
|
98
|
+
})));
|
|
59
99
|
};
|
|
60
100
|
const SsrRenderProfiler = props => {
|
|
61
101
|
if (isInSSR) {
|
|
@@ -5,17 +5,17 @@ return{'event:assets':assets};}return{};}catch(_unused2){// Skip CHR in case of
|
|
|
5
5
|
return{};}}function getTracingContextData(interaction){var trace=interaction.trace,start=interaction.start;var tracingContextData={};if(trace){tracingContextData={'ufo:tracingContext':{'X-B3-TraceId':trace.traceId,'X-B3-SpanId':trace.spanId,// eslint-disable-next-line compat/compat
|
|
6
6
|
browserTimeOrigin:+(performance.timeOrigin+start).toFixed(2)}};}return tracingContextData;}function optimizeCustomData(interaction){var customData=interaction.customData,cohortingCustomData=interaction.cohortingCustomData,legacyMetrics=interaction.legacyMetrics;var customDataMap=customData.reduce(function(result,_ref){var _result$get$data,_result$get;var labelStack=_ref.labelStack,data=_ref.data;var label=stringifyLabelStackFully(labelStack);var value=(_result$get$data=(_result$get=result.get(label))===null||_result$get===void 0?void 0:_result$get.data)!==null&&_result$get$data!==void 0?_result$get$data:{};result.set(label,{labelStack:optimizeLabelStack(labelStack,getReactUFOPayloadVersion(interaction.type)),data:Object.assign(value,data)});return result;},new Map());// Merge cohorting custom data into the same map
|
|
7
7
|
if(cohortingCustomData&&cohortingCustomData.size>0){var _interaction$labelSta,_customDataMap$get$da,_customDataMap$get,_interaction$labelSta2;var label=stringifyLabelStackFully((_interaction$labelSta=interaction.labelStack)!==null&&_interaction$labelSta!==void 0?_interaction$labelSta:[]);var value=(_customDataMap$get$da=(_customDataMap$get=customDataMap.get(label))===null||_customDataMap$get===void 0?void 0:_customDataMap$get.data)!==null&&_customDataMap$get$da!==void 0?_customDataMap$get$da:{};customDataMap.set(label,{labelStack:optimizeLabelStack((_interaction$labelSta2=interaction.labelStack)!==null&&_interaction$labelSta2!==void 0?_interaction$labelSta2:[],getReactUFOPayloadVersion(interaction.type)),data:Object.assign(value,Object.fromEntries(cohortingCustomData))});}if(legacyMetrics){var legacyMetricsFiltered=legacyMetrics.filter(function(item){return item.type==='PAGE_LOAD';}).reduce(function(result,currentValue){for(var _i=0,_Object$entries=Object.entries(currentValue.custom||{});_i<_Object$entries.length;_i++){var _result$get$data2,_result$get2;var _Object$entries$_i=_slicedToArray(_Object$entries[_i],2),key=_Object$entries$_i[0],_value=_Object$entries$_i[1];var _label=stringifyLabelStackFully([]);var labelValue=(_result$get$data2=(_result$get2=result.get(_label))===null||_result$get2===void 0?void 0:_result$get2.data)!==null&&_result$get$data2!==void 0?_result$get$data2:{};result.set(_label,{labelStack:optimizeLabelStack([],getReactUFOPayloadVersion(interaction.type)),data:Object.assign(labelValue,_defineProperty({},key,_value))});}return result;},new Map());return[].concat(_toConsumableArray(customDataMap.values()),_toConsumableArray(legacyMetricsFiltered.values()));}return _toConsumableArray(customDataMap.values());}function optimizeRedirects(redirects,interactionStart){var lastRedirectTime=interactionStart;var updatedRedirects=redirects.sort(function(a,b){return a.time-b.time;}).reduce(function(result,redirect){var fromInteractionName=redirect.fromInteractionName,time=redirect.time;if(lastRedirectTime>=interactionStart){result.push({labelStack:[{n:fromInteractionName}],startTime:Math.round(lastRedirectTime),endTime:Math.round(time)});}lastRedirectTime=time;return result;},[]);return updatedRedirects;}function objectToArray(){var obj=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};return Object.keys(obj).reduce(function(result,key){result.push({label:key,data:obj[key]});return result;},[]);}function getBM3SubmetricsTimings(submetrics){if(!submetrics){return null;}var submetricsTimings=submetrics.filter(function(item){return typeof item.stop==='number'&&!!item.key&&typeof item.start==='number';}).map(function(item){var childSubmetrics;var newKey="include/".concat(item.key);if(item.submetrics){childSubmetrics=getBM3SubmetricsTimings(item.submetrics);}return _objectSpread(_defineProperty({},newKey,{endTime:item.stop-item.start,startTime:item.start}),childSubmetrics?childSubmetrics:{});});return submetricsTimings;}function getBm3TrackerTimings(interaction){var interactionLegacyMetrics=interaction.legacyMetrics;if(!interactionLegacyMetrics){return{};}var legacyMetrics=interactionLegacyMetrics.map(function(item){var _item$config,_item$config2,_item$marks;return{key:item.key,startTime:item.start,stopTime:item.stop,type:(_item$config=item.config)===null||_item$config===void 0?void 0:_item$config.type,reactUFOName:(_item$config2=item.config)===null||_item$config2===void 0?void 0:_item$config2.reactUFOName,fmp:((_item$marks=item.marks)===null||_item$marks===void 0?void 0:_item$marks['fmp'])||item.stop,source:'bm3',timings:getBm3Timings(item.marks,item.config.timings),submetrics:getBM3SubmetricsTimings(item.submetrics),pageVisibleState:item.pageVisibleState};}).filter(function(item){return!!item.type;});return{legacyMetrics:legacyMetrics};}function getStylesheetMetrics(){try{var doc=getDocument();if(!doc){return{};}var stylesheets=Array.from(doc.styleSheets);var stylesheetCount=stylesheets.length;var cssrules=Array.from(doc.styleSheets).reduce(function(acc,item){// Other domain stylesheets throw a SecurityError
|
|
8
|
-
try{return acc+item.cssRules.length;}catch(_unused3){return acc;}},0);var styleElements=doc.querySelectorAll('style').length;var styleProps=doc.querySelectorAll('[style]');var styleDeclarations=Array.from(doc.querySelectorAll('[style]')).reduce(function(acc,item){try{if('style'in item){return acc+item.style.length;}else{return acc;}}catch(_unused4){return acc;}},0);return{'ufo:stylesheets':stylesheetCount,'ufo:styleElements':styleElements,'ufo:styleProps':styleProps.length,'ufo:styleDeclarations':styleDeclarations,'ufo:cssrules':cssrules};}catch(_unused5){return{};}}var regularTTAI;var expTTAI;function getErrorCounts(interaction){return{'ufo:errors:globalCount':getGlobalErrorCount(),'ufo:errors:count':interaction.errors.length};}function createInteractionMetricsPayload(_x,_x2,_x3,_x4,_x5){return _createInteractionMetricsPayload.apply(this,arguments);}function _createInteractionMetricsPayload(){_createInteractionMetricsPayload=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(interaction,interactionId,experimental,criticalPayloadCount,vcMetrics){var _window$location,_config$additionalPay;var interactionPayloadStart,config,end,start,ufoName,knownSegments,rate,type,abortReason,routeName,featureFlags,previousInteractionName,isPreviousInteractionAborted,abortedByInteractionName,responsiveness,unknownElementName,unknownElementHierarchy,hydration,pageVisibilityAtTTI,pageVisibilityAtTTAI,segments,segmentTree,isDetailedPayload,isPageLoad,calculatePageVisibilityFromTheStartOfPageLoad,moreAccuratePageVisibilityAtTTI,moreAccuratePageVisibilityAtTTAI,labelStack,getInitialPageLoadSSRMetrics,pageLoadInteractionMetrics,getDetailedInteractionMetrics,getPageLoadDetailedInteractionMetrics,newUFOName,resourceTimings,_yield$Promise$all,_yield$Promise$all2,finalVCMetrics,experimentalMetrics,paintMetrics,batteryInfo,getReactHydrationStats,payload,size,vcRev,rawData,rawDataSize,interactionMetricsFieldsToTrim,properties,interactionMetrics,_iterator,_step,field,trimmedFields;return _regeneratorRuntime.wrap(function _callee$(_context){while(1)switch(_context.prev=_context.next){case 0:interactionPayloadStart=performance.now();config=getConfig();if(config){_context.next=4;break;}throw Error('UFO Configuration not provided');case 4:end=interaction.end,start=interaction.start,ufoName=interaction.ufoName,knownSegments=interaction.knownSegments,rate=interaction.rate,type=interaction.type,abortReason=interaction.abortReason,routeName=interaction.routeName,featureFlags=interaction.featureFlags,previousInteractionName=interaction.previousInteractionName,isPreviousInteractionAborted=interaction.isPreviousInteractionAborted,abortedByInteractionName=interaction.abortedByInteractionName,responsiveness=interaction.responsiveness,unknownElementName=interaction.unknownElementName,unknownElementHierarchy=interaction.unknownElementHierarchy,hydration=interaction.hydration;pageVisibilityAtTTI=getPageVisibilityUpToTTI(interaction);pageVisibilityAtTTAI=getPageVisibilityUpToTTAI(interaction);segments=!fg('platform_ufo_remove_deprecated_config_fields')&&config.killswitchNestedSegments?[]:knownSegments;segmentTree=getReactUFOPayloadVersion(interaction.type)==='2.0.0'?buildSegmentTree(segments.map(function(segment){return segment.labelStack;})):{};isDetailedPayload=pageVisibilityAtTTAI==='visible';isPageLoad=type==='page_load';calculatePageVisibilityFromTheStartOfPageLoad=config.enableBetterPageVisibilityApi&&
|
|
8
|
+
try{return acc+item.cssRules.length;}catch(_unused3){return acc;}},0);var styleElements=doc.querySelectorAll('style').length;var styleProps=doc.querySelectorAll('[style]');var styleDeclarations=Array.from(doc.querySelectorAll('[style]')).reduce(function(acc,item){try{if('style'in item){return acc+item.style.length;}else{return acc;}}catch(_unused4){return acc;}},0);return{'ufo:stylesheets':stylesheetCount,'ufo:styleElements':styleElements,'ufo:styleProps':styleProps.length,'ufo:styleDeclarations':styleDeclarations,'ufo:cssrules':cssrules};}catch(_unused5){return{};}}var regularTTAI;var expTTAI;function getErrorCounts(interaction){return{'ufo:errors:globalCount':getGlobalErrorCount(),'ufo:errors:count':interaction.errors.length};}function createInteractionMetricsPayload(_x,_x2,_x3,_x4,_x5){return _createInteractionMetricsPayload.apply(this,arguments);}function _createInteractionMetricsPayload(){_createInteractionMetricsPayload=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(interaction,interactionId,experimental,criticalPayloadCount,vcMetrics){var _config$enableBetterP,_window$location,_config$additionalPay;var interactionPayloadStart,config,end,start,ufoName,knownSegments,rate,type,abortReason,routeName,featureFlags,previousInteractionName,isPreviousInteractionAborted,abortedByInteractionName,responsiveness,unknownElementName,unknownElementHierarchy,hydration,pageVisibilityAtTTI,pageVisibilityAtTTAI,segments,segmentTree,isDetailedPayload,isPageLoadEvent,isPageLoad,calculatePageVisibilityFromTheStartOfPageLoad,moreAccuratePageVisibilityAtTTI,moreAccuratePageVisibilityAtTTAI,labelStack,getInitialPageLoadSSRMetrics,pageLoadInteractionMetrics,getDetailedInteractionMetrics,getPageLoadDetailedInteractionMetrics,newUFOName,resourceTimings,_yield$Promise$all,_yield$Promise$all2,finalVCMetrics,experimentalMetrics,paintMetrics,batteryInfo,getReactHydrationStats,payload,size,vcRev,rawData,rawDataSize,interactionMetricsFieldsToTrim,properties,interactionMetrics,_iterator,_step,field,trimmedFields;return _regeneratorRuntime.wrap(function _callee$(_context){while(1)switch(_context.prev=_context.next){case 0:interactionPayloadStart=performance.now();config=getConfig();if(config){_context.next=4;break;}throw Error('UFO Configuration not provided');case 4:end=interaction.end,start=interaction.start,ufoName=interaction.ufoName,knownSegments=interaction.knownSegments,rate=interaction.rate,type=interaction.type,abortReason=interaction.abortReason,routeName=interaction.routeName,featureFlags=interaction.featureFlags,previousInteractionName=interaction.previousInteractionName,isPreviousInteractionAborted=interaction.isPreviousInteractionAborted,abortedByInteractionName=interaction.abortedByInteractionName,responsiveness=interaction.responsiveness,unknownElementName=interaction.unknownElementName,unknownElementHierarchy=interaction.unknownElementHierarchy,hydration=interaction.hydration;pageVisibilityAtTTI=getPageVisibilityUpToTTI(interaction);pageVisibilityAtTTAI=getPageVisibilityUpToTTAI(interaction);segments=!fg('platform_ufo_remove_deprecated_config_fields')&&config.killswitchNestedSegments?[]:knownSegments;segmentTree=getReactUFOPayloadVersion(interaction.type)==='2.0.0'?buildSegmentTree(segments.map(function(segment){return segment.labelStack;})):{};isDetailedPayload=pageVisibilityAtTTAI==='visible';isPageLoadEvent=type==='page_load'||type==='transition';isPageLoad=type==='page_load';calculatePageVisibilityFromTheStartOfPageLoad=((_config$enableBetterP=config.enableBetterPageVisibilityApi)!==null&&_config$enableBetterP!==void 0?_config$enableBetterP:fg('platform_enable_better_page_visibility'))&&isPageLoadEvent;moreAccuratePageVisibilityAtTTI=calculatePageVisibilityFromTheStartOfPageLoad?getMoreAccuratePageVisibilityUpToTTI(interaction):null;moreAccuratePageVisibilityAtTTAI=calculatePageVisibilityFromTheStartOfPageLoad?getMoreAccuratePageVisibilityUpToTTAI(interaction):null;labelStack=interaction.labelStack?{labelStack:optimizeLabelStack(interaction.labelStack,getReactUFOPayloadVersion(interaction.type))}:{};// Page Load
|
|
9
9
|
getInitialPageLoadSSRMetrics=function getInitialPageLoadSSRMetrics(){var _config$ssr;if(!isPageLoad){return{};}var config=getConfig();var SSRDoneTimeValue=getSSRDoneTimeValue(config);var SSRDoneTime=SSRDoneTimeValue!==undefined?{SSRDoneTime:Math.round(SSRDoneTimeValue)}:{};var isBM3ConfigSSRDoneAsFmp=interaction.metaData.__legacy__bm3ConfigSSRDoneAsFmp;var isUFOConfigSSRDoneAsFmp=interaction.metaData.__legacy__bm3ConfigSSRDoneAsFmp||!!(config!==null&&config!==void 0&&(_config$ssr=config.ssr)!==null&&_config$ssr!==void 0&&_config$ssr.getSSRDoneTime);if(!experimental&&(isBM3ConfigSSRDoneAsFmp||isUFOConfigSSRDoneAsFmp)&&SSRDoneTimeValue!==undefined){try{performance.mark("FMP",{startTime:SSRDoneTimeValue,detail:{devtools:{dataType:'marker'}}});}catch(_unused6){}}return _objectSpread(_objectSpread({},SSRDoneTime),{},{isBM3ConfigSSRDoneAsFmp:isBM3ConfigSSRDoneAsFmp,isUFOConfigSSRDoneAsFmp:isUFOConfigSSRDoneAsFmp});};pageLoadInteractionMetrics=getInitialPageLoadSSRMetrics();// Detailed payload. Page visibility = visible
|
|
10
10
|
getDetailedInteractionMetrics=function getDetailedInteractionMetrics(resourceTimings){if(experimental||window.__UFO_COMPACT_PAYLOAD__||!isDetailedPayload){return{};}var spans=[].concat(_toConsumableArray(interaction.spans),_toConsumableArray(atlaskitInteractionSpans));atlaskitInteractionSpans.length=0;var shouldInclude3pHolds=shouldUseRawDataThirdPartyBehavior(ufoName,type);var basePayload={errors:interaction.errors.map(function(_ref2){var labelStack=_ref2.labelStack,others=_objectWithoutProperties(_ref2,_excluded);return _objectSpread(_objectSpread({},others),{},{labelStack:labelStack&&optimizeLabelStack(labelStack,getReactUFOPayloadVersion(interaction.type))});}),holdActive:_toConsumableArray(interaction.holdActive.values()),redirects:optimizeRedirects(interaction.redirects,start),holdInfo:optimizeHoldInfo(experimental?interaction.holdExpInfo:interaction.holdInfo,start,getReactUFOPayloadVersion(interaction.type)),spans:optimizeSpans(spans,start,getReactUFOPayloadVersion(interaction.type)),requestInfo:optimizeRequestInfo(interaction.requestInfo,start,getReactUFOPayloadVersion(interaction.type)),customTimings:optimizeCustomTimings(interaction.customTimings,start),bundleEvalTimings:objectToArray(getBundleEvalTimings(start)),resourceTimings:objectToArray(resourceTimings)};// Include third-party holds when feature flag is active
|
|
11
11
|
if(shouldInclude3pHolds){var _interaction$hold3pIn;return _objectSpread(_objectSpread({},basePayload),{},{hold3pActive:interaction.hold3pActive?_toConsumableArray(interaction.hold3pActive.values()):[],hold3pInfo:optimizeHoldInfo((_interaction$hold3pIn=interaction.hold3pInfo)!==null&&_interaction$hold3pIn!==void 0?_interaction$hold3pIn:[],start,getReactUFOPayloadVersion(interaction.type))});}return basePayload;};// Page load & detailed payload
|
|
12
|
-
getPageLoadDetailedInteractionMetrics=function getPageLoadDetailedInteractionMetrics(){var _config$ssr2,_config$ssr2$getSSRTi;if(!isPageLoad||!isDetailedPayload){return{};}var initialPageLoadExtraTimings=objectToArray(initialPageLoadExtraTiming.getTimings());var config=getConfig();var defaultSSRTimings=objectToArray(ssr.getSSRTimings());var ssrTimingsFromConfig=config===null||config===void 0||(_config$ssr2=config.ssr)===null||_config$ssr2===void 0||(_config$ssr2$getSSRTi=_config$ssr2.getSSRTimings)===null||_config$ssr2$getSSRTi===void 0?void 0:_config$ssr2$getSSRTi.call(_config$ssr2);return{initialPageLoadExtraTimings:initialPageLoadExtraTimings,SSRTimings:ssrTimingsFromConfig?[].concat(_toConsumableArray(ssrTimingsFromConfig),_toConsumableArray(defaultSSRTimings)):defaultSSRTimings};};if(experimental){expTTAI=getTTAI(interaction);}else{regularTTAI=getTTAI(interaction);}newUFOName=sanitizeUfoName(ufoName);resourceTimings=getResourceTimings(start,end);_context.t0=Promise;_context.t1=vcMetrics;if(_context.t1){_context.next=
|
|
12
|
+
getPageLoadDetailedInteractionMetrics=function getPageLoadDetailedInteractionMetrics(){var _config$ssr2,_config$ssr2$getSSRTi;if(!isPageLoad||!isDetailedPayload){return{};}var initialPageLoadExtraTimings=objectToArray(initialPageLoadExtraTiming.getTimings());var config=getConfig();var defaultSSRTimings=objectToArray(ssr.getSSRTimings());var ssrTimingsFromConfig=config===null||config===void 0||(_config$ssr2=config.ssr)===null||_config$ssr2===void 0||(_config$ssr2$getSSRTi=_config$ssr2.getSSRTimings)===null||_config$ssr2$getSSRTi===void 0?void 0:_config$ssr2$getSSRTi.call(_config$ssr2);return{initialPageLoadExtraTimings:initialPageLoadExtraTimings,SSRTimings:ssrTimingsFromConfig?[].concat(_toConsumableArray(ssrTimingsFromConfig),_toConsumableArray(defaultSSRTimings)):defaultSSRTimings};};if(experimental){expTTAI=getTTAI(interaction);}else{regularTTAI=getTTAI(interaction);}newUFOName=sanitizeUfoName(ufoName);resourceTimings=getResourceTimings(start,end);_context.t0=Promise;_context.t1=vcMetrics;if(_context.t1){_context.next=29;break;}_context.next=28;return getVCMetrics(interaction);case 28:_context.t1=_context.sent;case 29:_context.t2=_context.t1;_context.t3=experimental?getExperimentalVCMetrics(interaction):Promise.resolve(undefined);_context.t4=getPaintMetricsToLegacyFormat(type,end);_context.t5=getBatteryInfoToLegacyFormat();_context.t6=[_context.t2,_context.t3,_context.t4,_context.t5];_context.next=36;return _context.t0.all.call(_context.t0,_context.t6);case 36:_yield$Promise$all=_context.sent;_yield$Promise$all2=_slicedToArray(_yield$Promise$all,4);finalVCMetrics=_yield$Promise$all2[0];experimentalMetrics=_yield$Promise$all2[1];paintMetrics=_yield$Promise$all2[2];batteryInfo=_yield$Promise$all2[3];if(!experimental){addPerformanceMeasures(interaction.start,_toConsumableArray((finalVCMetrics===null||finalVCMetrics===void 0?void 0:finalVCMetrics['ufo:vc:rev'])||[]));}getReactHydrationStats=function getReactHydrationStats(){if(!hydration){return{};}return{hydration:hydration};};payload={actionSubject:'experience',action:'measured',eventType:'operational',source:'measured',tags:['observability'],attributes:{properties:_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({// basic
|
|
13
13
|
'event:hostname':((_window$location=window.location)===null||_window$location===void 0?void 0:_window$location.hostname)||'unknown','event:product':config.product,'event:population':config.population,'event:schema':'1.0.0','event:sizeInKb':0,'event:source':{name:'react-ufo/web',version:getReactUFOPayloadVersion(interaction.type)},'event:region':config.region||'unknown','experience:key':experimental?'custom.experimental-interaction-metrics':'custom.interaction-metrics','experience:name':newUFOName,// Include CPU usage monitoring data
|
|
14
14
|
'event:cpu:usage':createPressureStateReport(interaction.start,interaction.end),'event:memory:usage':createMemoryStateReport(interaction.start,interaction.end)},criticalPayloadCount!==undefined?{'ufo:multipayload':true,'ufo:criticalPayloadCount':criticalPayloadCount}:{}),getBrowserMetadataToLegacyFormat()),batteryInfo),getSSRProperties(type)),getAssetsMetrics(interaction,pageLoadInteractionMetrics===null||pageLoadInteractionMetrics===void 0?void 0:pageLoadInteractionMetrics.SSRDoneTime)),getPPSMetrics(interaction)),paintMetrics),getNavigationMetricsToLegacyFormat(type)),finalVCMetrics),experimentalMetrics),(_config$additionalPay=config.additionalPayloadData)===null||_config$additionalPay===void 0?void 0:_config$additionalPay.call(config,interaction)),getTracingContextData(interaction)),getStylesheetMetrics()),getErrorCounts(interaction)),getReactHydrationStats()),{},{interactionMetrics:_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({namePrefix:config.namePrefix||'',segmentPrefix:config.segmentPrefix||'',interactionId:interactionId,pageVisibilityAtTTI:pageVisibilityAtTTI,pageVisibilityAtTTAI:pageVisibilityAtTTAI,experimental__pageVisibilityAtTTI:moreAccuratePageVisibilityAtTTI,experimental__pageVisibilityAtTTAI:moreAccuratePageVisibilityAtTTAI,// raw interaction metrics
|
|
15
15
|
rate:rate,routeName:routeName,type:type,abortReason:abortReason,featureFlags:featureFlags,previousInteractionName:previousInteractionName,isPreviousInteractionAborted:isPreviousInteractionAborted,abortedByInteractionName:abortedByInteractionName,// performance
|
|
16
|
-
apdex:optimizeApdex(interaction.apdex,getReactUFOPayloadVersion(interaction.type)),end:Math.round(end)},interaction.end3p?{end3p:Math.round(interaction.end3p)}:{}),{},{start:Math.round(start),segments:getReactUFOPayloadVersion(interaction.type)==='2.0.0'?segmentTree:getOldSegmentsLabelStack(segments,interaction.type),marks:optimizeMarks(interaction.marks,getReactUFOPayloadVersion(interaction.type)),customData:optimizeCustomData(interaction),reactProfilerTimings:optimizeReactProfilerTimings(interaction.reactProfilerTimings,start,getReactUFOPayloadVersion(interaction.type)),minorInteractions:interaction.minorInteractions},responsiveness?{responsiveness:responsiveness}:{}),labelStack),pageLoadInteractionMetrics),getDetailedInteractionMetrics(resourceTimings)),getPageLoadDetailedInteractionMetrics()),getBm3TrackerTimings(interaction)),{},{'metric:ttai':experimental?regularTTAI||expTTAI:undefined,'metric:experimental:ttai':expTTAI},unknownElementName?{unknownElementName:unknownElementName}:{}),unknownElementHierarchy?{unknownElementHierarchy:unknownElementHierarchy}:{}),'ufo:payloadTime':roundEpsilon(performance.now()-interactionPayloadStart)})}};if(experimental){regularTTAI=undefined;expTTAI=undefined;}if(fg('platform_ufo_enable_vc_raw_data')){size=getPayloadSize(payload.attributes.properties);vcRev=payload.attributes.properties['ufo:vc:rev'];rawData=vcRev.find(function(item){return item.revision==='raw-handler';});if(rawData){rawDataSize=getPayloadSize(rawData);payload.attributes.properties['ufo:vc:raw:size']=rawDataSize;if(size>MAX_PAYLOAD_SIZE&&Array.isArray(vcRev)&&vcRev.length>0){payload.attributes.properties['ufo:vc:rev']=vcRev.filter(function(item){return item.revision!=='raw-handler';});payload.attributes.properties['ufo:vc:raw:removed']=true;}}payload.attributes.properties['event:sizeInKb']=getPayloadSize(payload.attributes.properties);}else{payload.attributes.properties['event:sizeInKb']=getPayloadSize(payload.attributes.properties);}if(!fg('platform_ufo_enable_trimmed_payload')){_context.next=
|
|
16
|
+
apdex:optimizeApdex(interaction.apdex,getReactUFOPayloadVersion(interaction.type)),end:Math.round(end)},interaction.end3p?{end3p:Math.round(interaction.end3p)}:{}),{},{start:Math.round(start),segments:getReactUFOPayloadVersion(interaction.type)==='2.0.0'?segmentTree:getOldSegmentsLabelStack(segments,interaction.type),marks:optimizeMarks(interaction.marks,getReactUFOPayloadVersion(interaction.type)),customData:optimizeCustomData(interaction),reactProfilerTimings:optimizeReactProfilerTimings(interaction.reactProfilerTimings,start,getReactUFOPayloadVersion(interaction.type)),minorInteractions:interaction.minorInteractions},responsiveness?{responsiveness:responsiveness}:{}),labelStack),pageLoadInteractionMetrics),getDetailedInteractionMetrics(resourceTimings)),getPageLoadDetailedInteractionMetrics()),getBm3TrackerTimings(interaction)),{},{'metric:ttai':experimental?regularTTAI||expTTAI:undefined,'metric:experimental:ttai':expTTAI},unknownElementName?{unknownElementName:unknownElementName}:{}),unknownElementHierarchy?{unknownElementHierarchy:unknownElementHierarchy}:{}),'ufo:payloadTime':roundEpsilon(performance.now()-interactionPayloadStart)})}};if(experimental){regularTTAI=undefined;expTTAI=undefined;}if(fg('platform_ufo_enable_vc_raw_data')){size=getPayloadSize(payload.attributes.properties);vcRev=payload.attributes.properties['ufo:vc:rev'];rawData=vcRev.find(function(item){return item.revision==='raw-handler';});if(rawData){rawDataSize=getPayloadSize(rawData);payload.attributes.properties['ufo:vc:raw:size']=rawDataSize;if(size>MAX_PAYLOAD_SIZE&&Array.isArray(vcRev)&&vcRev.length>0){payload.attributes.properties['ufo:vc:rev']=vcRev.filter(function(item){return item.revision!=='raw-handler';});payload.attributes.properties['ufo:vc:raw:removed']=true;}}payload.attributes.properties['event:sizeInKb']=getPayloadSize(payload.attributes.properties);}else{payload.attributes.properties['event:sizeInKb']=getPayloadSize(payload.attributes.properties);}if(!fg('platform_ufo_enable_trimmed_payload')){_context.next=75;break;}// in order of importance, first one being least important
|
|
17
17
|
// we can add more fields as necessary
|
|
18
|
-
interactionMetricsFieldsToTrim=['requestInfo','featureFlags','resourceTimings'];properties=payload.attributes.properties;interactionMetrics=properties.interactionMetrics;if(!interactionMetrics){_context.next=
|
|
18
|
+
interactionMetricsFieldsToTrim=['requestInfo','featureFlags','resourceTimings'];properties=payload.attributes.properties;interactionMetrics=properties.interactionMetrics;if(!interactionMetrics){_context.next=75;break;}_iterator=_createForOfIteratorHelper(interactionMetricsFieldsToTrim);_context.prev=53;_iterator.s();case 55:if((_step=_iterator.n()).done){_context.next=67;break;}field=_step.value;if(!(getPayloadSize(properties)<=MAX_PAYLOAD_SIZE)){_context.next=59;break;}return _context.abrupt("continue",65);case 59:interactionMetrics[field]=undefined;properties['event:isTrimmed']=true;trimmedFields=properties['event:trimmedFields'];if(!Array.isArray(trimmedFields)){trimmedFields=[];}trimmedFields.push("interactionMetrics.".concat(field));properties['event:trimmedFields']=trimmedFields;case 65:_context.next=55;break;case 67:_context.next=72;break;case 69:_context.prev=69;_context.t7=_context["catch"](53);_iterator.e(_context.t7);case 72:_context.prev=72;_iterator.f();return _context.finish(72);case 75:return _context.abrupt("return",payload);case 76:case"end":return _context.stop();}},_callee,null,[[53,69,72,75]]);}));return _createInteractionMetricsPayload.apply(this,arguments);}export function createPayloads(_x6,_x7){return _createPayloads.apply(this,arguments);}function _createPayloads(){_createPayloads=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(interactionId,interaction){var ufoNameOverride,modifiedInteraction,payloads,isCriticalMetricsEnabled,vcMetrics,criticalMetricsPayloads,criticalPayloadCount,interactionMetricsPayload;return _regeneratorRuntime.wrap(function _callee2$(_context2){while(1)switch(_context2.prev=_context2.next){case 0:ufoNameOverride=getUfoNameOverride(interaction);modifiedInteraction=_objectSpread(_objectSpread({},interaction),{},{ufoName:ufoNameOverride});payloads=[];isCriticalMetricsEnabled=fg('platform_ufo_critical_metrics_payload');// Calculate VC metrics once to avoid duplicate expensive calculations
|
|
19
19
|
_context2.next=6;return getVCMetrics(interaction);case 6:vcMetrics=_context2.sent;if(!isCriticalMetricsEnabled){_context2.next=13;break;}_context2.next=10;return createCriticalMetricsPayloads(interactionId,interaction,vcMetrics);case 10:_context2.t0=_context2.sent;_context2.next=14;break;case 13:_context2.t0=[];case 14:criticalMetricsPayloads=_context2.t0;payloads.push.apply(payloads,_toConsumableArray(criticalMetricsPayloads));criticalPayloadCount=isCriticalMetricsEnabled?criticalMetricsPayloads.length:undefined;_context2.next=19;return createInteractionMetricsPayload(modifiedInteraction,interactionId,undefined,criticalPayloadCount,vcMetrics);case 19:interactionMetricsPayload=_context2.sent;payloads.push(interactionMetricsPayload);return _context2.abrupt("return",payloads.filter(Boolean));case 22:case"end":return _context2.stop();}},_callee2);}));return _createPayloads.apply(this,arguments);}export function createExperimentalMetricsPayload(_x8,_x9){return _createExperimentalMetricsPayload.apply(this,arguments);}function _createExperimentalMetricsPayload(){_createExperimentalMetricsPayload=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(interactionId,interaction){var config,ufoName,rate,pageVisibilityState,result;return _regeneratorRuntime.wrap(function _callee3$(_context3){while(1)switch(_context3.prev=_context3.next){case 0:config=getConfig();if(config){_context3.next=3;break;}throw Error('UFO Configuration not provided');case 3:ufoName=sanitizeUfoName(interaction.ufoName);rate=getExperimentalInteractionRate(ufoName,interaction.type);if(coinflip(rate)){_context3.next=7;break;}return _context3.abrupt("return",null);case 7:pageVisibilityState=getPageVisibilityState(interaction.start,interaction.end);if(!(pageVisibilityState!=='visible')){_context3.next=10;break;}return _context3.abrupt("return",null);case 10:_context3.next=12;return createInteractionMetricsPayload(interaction,interactionId,true);case 12:result=_context3.sent;return _context3.abrupt("return",result);case 14:case"end":return _context3.stop();}},_callee3);}));return _createExperimentalMetricsPayload.apply(this,arguments);}export function createExtraSearchPageInteractionPayload(_x0,_x1){return _createExtraSearchPageInteractionPayload.apply(this,arguments);}function _createExtraSearchPageInteractionPayload(){_createExtraSearchPageInteractionPayload=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(interactionId,interaction){var SAIN_HOLD_NAMES,NAME_OVERRIDE,SEARCH_PAGE_SMART_ANSWERS_SEGMENT_LABEL,newInteractionId,newEnd,holdInfo,reactProfilerTimings,lastHold,isLastHoldSAIN,lastFilteredTime,filteredReactProfilerTimings,lastTiming,modifiedInteraction,payloads,vcMetrics,interactionMetricsPayload;return _regeneratorRuntime.wrap(function _callee4$(_context4){while(1)switch(_context4.prev=_context4.next){case 0:SAIN_HOLD_NAMES=['search-ai-dialog-visible-text-loading','search-ai-dialog-all-text-loading'];NAME_OVERRIDE='search-page-ignoring-smart-answers';SEARCH_PAGE_SMART_ANSWERS_SEGMENT_LABEL='search-page-smart-answers';newInteractionId="".concat(interactionId,"-ignoring-smart-answers");// Calculate a new end time which excludes SAIN holds
|
|
20
20
|
holdInfo=interaction.holdInfo,reactProfilerTimings=interaction.reactProfilerTimings;lastHold=holdInfo.at(-1);isLastHoldSAIN=Boolean(lastHold&&SAIN_HOLD_NAMES.includes(lastHold.name));// A new end time is only calculated if the last hold is a SAIN hold
|
|
21
21
|
if(isLastHoldSAIN){lastFilteredTime=null;filteredReactProfilerTimings=reactProfilerTimings.filter(function(timing){if(timing.commitTime===lastFilteredTime){return false;}var isTimingSmartAnswersInSearch=timing.labelStack.some(function(label){return label.name===SEARCH_PAGE_SMART_ANSWERS_SEGMENT_LABEL;});if(isTimingSmartAnswersInSearch){lastFilteredTime=timing.commitTime;return false;}return true;});lastTiming=filteredReactProfilerTimings.at(-1);if(lastTiming){newEnd=lastTiming.commitTime;}}modifiedInteraction=_objectSpread(_objectSpread({},interaction),{},{end:newEnd!==null&&newEnd!==void 0?newEnd:interaction.end,holdInfo:[],knownSegments:[],reactProfilerTimings:[],ufoName:NAME_OVERRIDE});payloads=[];_context4.next=12;return getVCMetrics(interaction,false,true);case 12:vcMetrics=_context4.sent;_context4.next=15;return createInteractionMetricsPayload(modifiedInteraction,newInteractionId,undefined,undefined,vcMetrics);case 15:interactionMetricsPayload=_context4.sent;payloads.push(interactionMetricsPayload);return _context4.abrupt("return",payloads.filter(Boolean));case 18:case"end":return _context4.stop();}},_callee4);}));return _createExtraSearchPageInteractionPayload.apply(this,arguments);}
|
|
@@ -19,6 +19,7 @@ import { sanitizeUfoName, stringifyLabelStackFully } from '../create-payload/com
|
|
|
19
19
|
import { clearActiveTrace } from '../experience-trace-id-context';
|
|
20
20
|
import { allFeatureFlagsAccessed, currentFeatureFlagsAccessed } from '../feature-flags-accessed';
|
|
21
21
|
import { getInteractionId } from '../interaction-id-context';
|
|
22
|
+
import { flushSsrRenderProfilerTraces } from '../segment/ssr-render-profiler';
|
|
22
23
|
import { newVCObserver } from '../vc';
|
|
23
24
|
import { interactions } from './common/constants';
|
|
24
25
|
import InteractionExtraMetrics from './interaction-extra-metrics';
|
|
@@ -670,6 +671,7 @@ function finishInteraction(id, data) {
|
|
|
670
671
|
}
|
|
671
672
|
clearActiveTrace();
|
|
672
673
|
callCleanUpCallbacks(data);
|
|
674
|
+
flushSsrRenderProfilerTraces();
|
|
673
675
|
if ((_getConfig4 = getConfig()) !== null && _getConfig4 !== void 0 && (_getConfig4 = _getConfig4.vc) !== null && _getConfig4 !== void 0 && _getConfig4.stopVCAtInteractionFinish) {
|
|
674
676
|
// Use per-interaction VC observer if available, otherwise fall back to global
|
|
675
677
|
var observer = data.vcObserver;
|
|
@@ -1037,6 +1039,12 @@ export function abortByNewInteraction(interactionId, interactionName) {
|
|
|
1037
1039
|
onExperimentalInteractionComplete(interactionId, interaction);
|
|
1038
1040
|
remove(interactionId);
|
|
1039
1041
|
}
|
|
1042
|
+
} else {
|
|
1043
|
+
if (fg('platform_reset_post_interaction_on_new_interaction')) {
|
|
1044
|
+
// post-interaction log is active after interaction is aborted by new one
|
|
1045
|
+
postInteractionLog.reset();
|
|
1046
|
+
postInteractionLog.stopVCObserver();
|
|
1047
|
+
}
|
|
1040
1048
|
}
|
|
1041
1049
|
}
|
|
1042
1050
|
export function abortAll(abortReason, abortedByInteractionName) {
|
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
var _process;
|
|
2
|
-
import React, { useMemo } from 'react';
|
|
2
|
+
import React, { createContext, useContext, useMemo } from 'react';
|
|
3
|
+
import { getConfig } from '../config';
|
|
3
4
|
import { getActiveInteraction } from '../interaction-metrics';
|
|
4
|
-
|
|
5
5
|
// These are stored outside react context to be resilient to concurrent mode
|
|
6
6
|
// restarting the start marker from a suspense and losing the initial render
|
|
7
7
|
var startTimes = new Map();
|
|
8
|
+
var spanStates = new Map();
|
|
9
|
+
export var clearState = function clearState() {
|
|
10
|
+
startTimes.clear();
|
|
11
|
+
spanStates.clear();
|
|
12
|
+
};
|
|
8
13
|
// Keep track of the last interaction id and reset the start timers if it ever changes.
|
|
9
14
|
// This is to allow multi-step ssr to track the render timers from different "interaction"s seperately
|
|
10
15
|
var lastActiveInteraction;
|
|
@@ -12,26 +17,55 @@ function checkActiveInteractionAndResetStartMarksIfSet() {
|
|
|
12
17
|
var _getActiveInteraction;
|
|
13
18
|
var activeInteractionId = (_getActiveInteraction = getActiveInteraction()) === null || _getActiveInteraction === void 0 ? void 0 : _getActiveInteraction.id;
|
|
14
19
|
if (!!lastActiveInteraction && lastActiveInteraction !== activeInteractionId) {
|
|
15
|
-
|
|
20
|
+
clearState();
|
|
16
21
|
}
|
|
17
22
|
lastActiveInteraction = activeInteractionId;
|
|
18
23
|
}
|
|
19
|
-
var
|
|
20
|
-
var
|
|
24
|
+
var getIsNativeTracingEnabled = function getIsNativeTracingEnabled() {
|
|
25
|
+
var _getConfig$ssr$enable, _getConfig;
|
|
26
|
+
return (_getConfig$ssr$enable = (_getConfig = getConfig()) === null || _getConfig === void 0 || (_getConfig = _getConfig.ssr) === null || _getConfig === void 0 ? void 0 : _getConfig.enableNativeTracing) !== null && _getConfig$ssr$enable !== void 0 ? _getConfig$ssr$enable : false;
|
|
27
|
+
};
|
|
28
|
+
var onStartRender = function onStartRender(id, currentSegmentName, parentContext) {
|
|
29
|
+
var _startTimes$get, _vm_internals__, _spanStates$get;
|
|
21
30
|
if (!startTimes.has(id)) {
|
|
22
31
|
startTimes.set(id, []);
|
|
23
32
|
}
|
|
24
33
|
(_startTimes$get = startTimes.get(id)) === null || _startTimes$get === void 0 || _startTimes$get.push(performance.now());
|
|
34
|
+
if (!getIsNativeTracingEnabled()) {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
var startSpan = (_vm_internals__ = globalThis.__vm_internals__) === null || _vm_internals__ === void 0 || (_vm_internals__ = _vm_internals__.telemetry) === null || _vm_internals__ === void 0 ? void 0 : _vm_internals__.startSpan;
|
|
38
|
+
var spanState = (_spanStates$get = spanStates.get(id)) !== null && _spanStates$get !== void 0 ? _spanStates$get : null;
|
|
39
|
+
if (!spanState && startSpan) {
|
|
40
|
+
var span = startSpan(currentSegmentName, {
|
|
41
|
+
parentSpanId: parentContext === null || parentContext === void 0 ? void 0 : parentContext.spanId
|
|
42
|
+
});
|
|
43
|
+
spanState = {
|
|
44
|
+
span: span
|
|
45
|
+
};
|
|
46
|
+
spanStates.set(id, spanState);
|
|
47
|
+
}
|
|
48
|
+
return spanState;
|
|
25
49
|
};
|
|
26
|
-
var isInSSR =
|
|
50
|
+
var isInSSR = typeof __SERVER__ !== 'undefined' && __SERVER__ || typeof process !== 'undefined' && Boolean(((_process = process) === null || _process === void 0 || (_process = _process.env) === null || _process === void 0 ? void 0 : _process.REACT_SSR) || false);
|
|
27
51
|
var ProfilerMarker = function ProfilerMarker(_ref) {
|
|
28
52
|
var onRender = _ref.onRender;
|
|
29
|
-
|
|
30
|
-
onRender === null || onRender === void 0 || onRender();
|
|
31
|
-
}
|
|
53
|
+
onRender === null || onRender === void 0 || onRender();
|
|
32
54
|
return null;
|
|
33
55
|
};
|
|
56
|
+
var ParentSpanContext = /*#__PURE__*/createContext(null);
|
|
57
|
+
|
|
58
|
+
// For profiler spans in SSR, we 'end' any with their latest end times set, we need to do this at UFO-interaction-end since until then the component could rerender/remount again and spans fundamentally don't use the last 'end' but the first
|
|
59
|
+
export var flushSsrRenderProfilerTraces = function flushSsrRenderProfilerTraces() {
|
|
60
|
+
spanStates.forEach(function (spanState) {
|
|
61
|
+
if (spanState.latestEndTime != null) {
|
|
62
|
+
spanState.span.end(spanState.latestEndTime);
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
spanStates.clear();
|
|
66
|
+
};
|
|
34
67
|
export var SsrRenderProfilerInner = function SsrRenderProfilerInner(_ref2) {
|
|
68
|
+
var _currentSpanState$spa;
|
|
35
69
|
var children = _ref2.children,
|
|
36
70
|
labelStack = _ref2.labelStack,
|
|
37
71
|
_onRender = _ref2.onRender;
|
|
@@ -41,25 +75,29 @@ export var SsrRenderProfilerInner = function SsrRenderProfilerInner(_ref2) {
|
|
|
41
75
|
}).join('/');
|
|
42
76
|
}, [labelStack]);
|
|
43
77
|
checkActiveInteractionAndResetStartMarksIfSet();
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
}
|
|
78
|
+
var parentSpan = useContext(ParentSpanContext);
|
|
79
|
+
var currentSpanState = onStartRender(reactProfilerId, labelStack[labelStack.length - 1].name, parentSpan);
|
|
80
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ParentSpanContext.Provider, {
|
|
81
|
+
value: (_currentSpanState$spa = currentSpanState === null || currentSpanState === void 0 ? void 0 : currentSpanState.span.getSpanContext()) !== null && _currentSpanState$spa !== void 0 ? _currentSpanState$spa : null
|
|
82
|
+
}, children, /*#__PURE__*/React.createElement(ProfilerMarker, {
|
|
49
83
|
onRender: function onRender() {
|
|
50
84
|
var startTimesForId = startTimes.get(reactProfilerId);
|
|
51
85
|
if (startTimesForId !== null && startTimesForId !== void 0 && startTimesForId.length) {
|
|
52
|
-
var
|
|
86
|
+
var _endTime = performance.now();
|
|
53
87
|
var firstStartTime = startTimesForId[0];
|
|
54
88
|
var lastStartTime = startTimesForId[startTimesForId.length - 1];
|
|
55
|
-
var baseDuration =
|
|
56
|
-
var actualDuration =
|
|
89
|
+
var baseDuration = _endTime - lastStartTime;
|
|
90
|
+
var actualDuration = _endTime - firstStartTime;
|
|
57
91
|
_onRender('mount',
|
|
58
92
|
// this is incorrect, but on the server there is no mount phase
|
|
59
|
-
actualDuration, baseDuration, firstStartTime,
|
|
93
|
+
actualDuration, baseDuration, firstStartTime, _endTime);
|
|
94
|
+
}
|
|
95
|
+
var spanState = spanStates.get(reactProfilerId);
|
|
96
|
+
if (spanState) {
|
|
97
|
+
spanState.latestEndTime = performance.now();
|
|
60
98
|
}
|
|
61
99
|
}
|
|
62
|
-
}));
|
|
100
|
+
})));
|
|
63
101
|
};
|
|
64
102
|
var SsrRenderProfiler = function SsrRenderProfiler(props) {
|
|
65
103
|
if (isInSSR) {
|
|
@@ -107,6 +107,7 @@ export type Config = {
|
|
|
107
107
|
readonly ssr?: {
|
|
108
108
|
readonly getSSRTimings?: () => SSRTiming[];
|
|
109
109
|
readonly getSSRDoneTime?: () => number | undefined;
|
|
110
|
+
readonly enableNativeTracing?: boolean;
|
|
110
111
|
};
|
|
111
112
|
readonly assetsConfig?: AssetsConfig;
|
|
112
113
|
readonly enableBetterPageVisibilityApi?: boolean;
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import React, { type ReactNode } from 'react';
|
|
2
2
|
import type { EnhancedUFOInteractionContextType, ReactProfilerTiming } from '../common';
|
|
3
|
+
export declare const clearState: () => void;
|
|
4
|
+
export declare const flushSsrRenderProfilerTraces: () => void;
|
|
3
5
|
export declare const SsrRenderProfilerInner: ({ children, labelStack, onRender, }: {
|
|
4
6
|
children?: ReactNode | undefined;
|
|
5
7
|
labelStack: ReactProfilerTiming["labelStack"];
|
|
@@ -7,3 +9,53 @@ export declare const SsrRenderProfilerInner: ({ children, labelStack, onRender,
|
|
|
7
9
|
}) => React.JSX.Element;
|
|
8
10
|
declare const SsrRenderProfiler: (props: Parameters<typeof SsrRenderProfilerInner>[0]) => React.JSX.Element;
|
|
9
11
|
export default SsrRenderProfiler;
|
|
12
|
+
interface SpanContext {
|
|
13
|
+
/** 16-character hex string representing the span ID */
|
|
14
|
+
readonly spanId: string;
|
|
15
|
+
/** 32-character hex string representing the trace ID */
|
|
16
|
+
readonly traceId: string;
|
|
17
|
+
/** Whether this span context is sampled */
|
|
18
|
+
readonly isSampled: boolean;
|
|
19
|
+
/** Whether this span context is from a remote service */
|
|
20
|
+
readonly isRemote: boolean;
|
|
21
|
+
}
|
|
22
|
+
interface SpanOptions {
|
|
23
|
+
/**
|
|
24
|
+
* Optional parent span ID for explicit parent specification.
|
|
25
|
+
* If not provided, the span will use the root span as its parent.
|
|
26
|
+
**/
|
|
27
|
+
parentSpanId?: string;
|
|
28
|
+
/** Optional start time - MUST BE a performance.now() timsestamp */
|
|
29
|
+
startTime?: number;
|
|
30
|
+
/** Optional attributes to set on the span at creation time */
|
|
31
|
+
attributes?: Record<string, string | number | boolean>;
|
|
32
|
+
/** Override the parent's sampled parameter. Generally should only be used to silence noisy spans and their children.
|
|
33
|
+
* Be VERY careful not to cause performance issues if setting to true */
|
|
34
|
+
sampledOverride?: boolean;
|
|
35
|
+
}
|
|
36
|
+
export interface Span {
|
|
37
|
+
/** End the span, optionally with a custom end time in milliseconds since epoch */
|
|
38
|
+
end(endTime?: number): void;
|
|
39
|
+
/** Set an attribute on the span */
|
|
40
|
+
setAttribute(key: string, value: string | number | boolean): void;
|
|
41
|
+
/** Add an event to the span */
|
|
42
|
+
addEvent(name: string): void;
|
|
43
|
+
/** Get the span context containing span ID, trace ID, and flags */
|
|
44
|
+
getSpanContext(): SpanContext | null;
|
|
45
|
+
}
|
|
46
|
+
export type TesseractTelemetryAPI = {
|
|
47
|
+
/**
|
|
48
|
+
* Start a new span with OpenTelemetry-like API
|
|
49
|
+
* Unlike typical openTelemetry, the parent span is not automatically inferred from context.
|
|
50
|
+
* You must explicitly provide a parentSpanId in options if desired.
|
|
51
|
+
* Otherwise, the span will use the root as its parent.
|
|
52
|
+
**/
|
|
53
|
+
startSpan(name: string, options?: SpanOptions): Span;
|
|
54
|
+
forceFlush(): void;
|
|
55
|
+
};
|
|
56
|
+
export type SnapVmInternals = {
|
|
57
|
+
telemetry?: TesseractTelemetryAPI;
|
|
58
|
+
};
|
|
59
|
+
export type GlobalThis = {
|
|
60
|
+
__vm_internals__?: SnapVmInternals;
|
|
61
|
+
};
|
|
@@ -107,6 +107,7 @@ export type Config = {
|
|
|
107
107
|
readonly ssr?: {
|
|
108
108
|
readonly getSSRTimings?: () => SSRTiming[];
|
|
109
109
|
readonly getSSRDoneTime?: () => number | undefined;
|
|
110
|
+
readonly enableNativeTracing?: boolean;
|
|
110
111
|
};
|
|
111
112
|
readonly assetsConfig?: AssetsConfig;
|
|
112
113
|
readonly enableBetterPageVisibilityApi?: boolean;
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import React, { type ReactNode } from 'react';
|
|
2
2
|
import type { EnhancedUFOInteractionContextType, ReactProfilerTiming } from '../common';
|
|
3
|
+
export declare const clearState: () => void;
|
|
4
|
+
export declare const flushSsrRenderProfilerTraces: () => void;
|
|
3
5
|
export declare const SsrRenderProfilerInner: ({ children, labelStack, onRender, }: {
|
|
4
6
|
children?: ReactNode | undefined;
|
|
5
7
|
labelStack: ReactProfilerTiming["labelStack"];
|
|
@@ -7,3 +9,53 @@ export declare const SsrRenderProfilerInner: ({ children, labelStack, onRender,
|
|
|
7
9
|
}) => React.JSX.Element;
|
|
8
10
|
declare const SsrRenderProfiler: (props: Parameters<typeof SsrRenderProfilerInner>[0]) => React.JSX.Element;
|
|
9
11
|
export default SsrRenderProfiler;
|
|
12
|
+
interface SpanContext {
|
|
13
|
+
/** 16-character hex string representing the span ID */
|
|
14
|
+
readonly spanId: string;
|
|
15
|
+
/** 32-character hex string representing the trace ID */
|
|
16
|
+
readonly traceId: string;
|
|
17
|
+
/** Whether this span context is sampled */
|
|
18
|
+
readonly isSampled: boolean;
|
|
19
|
+
/** Whether this span context is from a remote service */
|
|
20
|
+
readonly isRemote: boolean;
|
|
21
|
+
}
|
|
22
|
+
interface SpanOptions {
|
|
23
|
+
/**
|
|
24
|
+
* Optional parent span ID for explicit parent specification.
|
|
25
|
+
* If not provided, the span will use the root span as its parent.
|
|
26
|
+
**/
|
|
27
|
+
parentSpanId?: string;
|
|
28
|
+
/** Optional start time - MUST BE a performance.now() timsestamp */
|
|
29
|
+
startTime?: number;
|
|
30
|
+
/** Optional attributes to set on the span at creation time */
|
|
31
|
+
attributes?: Record<string, string | number | boolean>;
|
|
32
|
+
/** Override the parent's sampled parameter. Generally should only be used to silence noisy spans and their children.
|
|
33
|
+
* Be VERY careful not to cause performance issues if setting to true */
|
|
34
|
+
sampledOverride?: boolean;
|
|
35
|
+
}
|
|
36
|
+
export interface Span {
|
|
37
|
+
/** End the span, optionally with a custom end time in milliseconds since epoch */
|
|
38
|
+
end(endTime?: number): void;
|
|
39
|
+
/** Set an attribute on the span */
|
|
40
|
+
setAttribute(key: string, value: string | number | boolean): void;
|
|
41
|
+
/** Add an event to the span */
|
|
42
|
+
addEvent(name: string): void;
|
|
43
|
+
/** Get the span context containing span ID, trace ID, and flags */
|
|
44
|
+
getSpanContext(): SpanContext | null;
|
|
45
|
+
}
|
|
46
|
+
export type TesseractTelemetryAPI = {
|
|
47
|
+
/**
|
|
48
|
+
* Start a new span with OpenTelemetry-like API
|
|
49
|
+
* Unlike typical openTelemetry, the parent span is not automatically inferred from context.
|
|
50
|
+
* You must explicitly provide a parentSpanId in options if desired.
|
|
51
|
+
* Otherwise, the span will use the root as its parent.
|
|
52
|
+
**/
|
|
53
|
+
startSpan(name: string, options?: SpanOptions): Span;
|
|
54
|
+
forceFlush(): void;
|
|
55
|
+
};
|
|
56
|
+
export type SnapVmInternals = {
|
|
57
|
+
telemetry?: TesseractTelemetryAPI;
|
|
58
|
+
};
|
|
59
|
+
export type GlobalThis = {
|
|
60
|
+
__vm_internals__?: SnapVmInternals;
|
|
61
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlaskit/react-ufo",
|
|
3
|
-
"version": "4.16.
|
|
3
|
+
"version": "4.16.7",
|
|
4
4
|
"description": "Parts of React UFO that are publicly available",
|
|
5
5
|
"author": "Atlassian Pty Ltd",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -43,8 +43,9 @@
|
|
|
43
43
|
"devDependencies": {
|
|
44
44
|
"@af/integration-testing": "workspace:^",
|
|
45
45
|
"@atlassian/feature-flags-test-utils": "^1.0.0",
|
|
46
|
-
"@testing-library/react": "^
|
|
46
|
+
"@testing-library/react": "^16.3.0",
|
|
47
47
|
"@types/is-ci": "^3.0.0",
|
|
48
|
+
"@types/scheduler": "0.23.0",
|
|
48
49
|
"is-ci": "^3.0.1"
|
|
49
50
|
},
|
|
50
51
|
"techstack": {
|
|
@@ -205,6 +206,12 @@
|
|
|
205
206
|
},
|
|
206
207
|
"platform_ufo_raw_data_thirdparty": {
|
|
207
208
|
"type": "boolean"
|
|
209
|
+
},
|
|
210
|
+
"platform_reset_post_interaction_on_new_interaction": {
|
|
211
|
+
"type": "boolean"
|
|
212
|
+
},
|
|
213
|
+
"platform_enable_better_page_visibility": {
|
|
214
|
+
"type": "boolean"
|
|
208
215
|
}
|
|
209
216
|
}
|
|
210
217
|
}
|