@atlaskit/react-ufo 4.14.3 → 4.14.4
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 +7 -0
- package/dist/cjs/config/index.js +4 -0
- package/dist/cjs/create-payload/index.js +22 -2
- package/dist/cjs/create-payload/utils/get-vc-metrics.js +10 -6
- package/dist/cjs/vc/index.js +4 -3
- package/dist/cjs/vc/vc-observer-new/index.js +31 -7
- package/dist/cjs/vc/vc-observer-new/raw-data-handler/index.js +237 -0
- package/dist/es2019/config/index.js +3 -0
- package/dist/es2019/create-payload/index.js +17 -1
- package/dist/es2019/create-payload/utils/get-vc-metrics.js +5 -2
- package/dist/es2019/vc/index.js +4 -2
- package/dist/es2019/vc/vc-observer-new/index.js +20 -1
- package/dist/es2019/vc/vc-observer-new/raw-data-handler/index.js +173 -0
- package/dist/esm/config/index.js +3 -0
- package/dist/esm/create-payload/index.js +22 -2
- package/dist/esm/create-payload/utils/get-vc-metrics.js +11 -7
- package/dist/esm/vc/index.js +4 -3
- package/dist/esm/vc/vc-observer-new/index.js +31 -7
- package/dist/esm/vc/vc-observer-new/raw-data-handler/index.js +231 -0
- package/dist/types/common/vc/types.d.ts +20 -1
- package/dist/types/config/index.d.ts +6 -0
- package/dist/types/vc/types.d.ts +1 -0
- package/dist/types/vc/vc-observer-new/raw-data-handler/index.d.ts +20 -0
- package/dist/types/vc/vc-observer-new/types.d.ts +2 -0
- package/dist/types-ts4.5/common/vc/types.d.ts +25 -1
- package/dist/types-ts4.5/config/index.d.ts +6 -0
- package/dist/types-ts4.5/vc/types.d.ts +1 -0
- package/dist/types-ts4.5/vc/vc-observer-new/raw-data-handler/index.d.ts +20 -0
- package/dist/types-ts4.5/vc/vc-observer-new/types.d.ts +2 -0
- package/package.json +4 -1
package/CHANGELOG.md
CHANGED
package/dist/cjs/config/index.js
CHANGED
|
@@ -22,6 +22,7 @@ exports.getPostInteractionRate = getPostInteractionRate;
|
|
|
22
22
|
exports.getReactHydrationStats = getReactHydrationStats;
|
|
23
23
|
exports.getTypingPerformanceTracingMethod = getTypingPerformanceTracingMethod;
|
|
24
24
|
exports.getUfoNameOverrides = getUfoNameOverrides;
|
|
25
|
+
exports.getVCRawDataInteractionRate = getVCRawDataInteractionRate;
|
|
25
26
|
exports.isVCRevisionEnabled = isVCRevisionEnabled;
|
|
26
27
|
exports.setUFOConfig = setUFOConfig;
|
|
27
28
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
@@ -193,6 +194,9 @@ function getExperimentalInteractionRate(name, interactionType) {
|
|
|
193
194
|
return 0;
|
|
194
195
|
}
|
|
195
196
|
}
|
|
197
|
+
function getVCRawDataInteractionRate(name, interactionType) {
|
|
198
|
+
return getConfigRate(name, interactionType, 'enableVCRawDataRates');
|
|
199
|
+
}
|
|
196
200
|
function getPostInteractionRate(name, interactionType) {
|
|
197
201
|
return getConfigRate(name, interactionType, 'postInteractionLog');
|
|
198
202
|
}
|
|
@@ -60,6 +60,7 @@ var _excluded = ["labelStack"];
|
|
|
60
60
|
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); }
|
|
61
61
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
62
62
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } // Import common utilities
|
|
63
|
+
var MAX_PAYLOAD_SIZE = 250;
|
|
63
64
|
function getUfoNameOverride(interaction) {
|
|
64
65
|
var ufoName = interaction.ufoName,
|
|
65
66
|
apdex = interaction.apdex;
|
|
@@ -398,7 +399,7 @@ function createInteractionMetricsPayload(_x, _x2, _x3, _x4, _x5) {
|
|
|
398
399
|
function _createInteractionMetricsPayload() {
|
|
399
400
|
_createInteractionMetricsPayload = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(interaction, interactionId, experimental, criticalPayloadCount, vcMetrics) {
|
|
400
401
|
var _window$location, _config$additionalPay;
|
|
401
|
-
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;
|
|
402
|
+
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;
|
|
402
403
|
return _regenerator.default.wrap(function _callee$(_context) {
|
|
403
404
|
while (1) switch (_context.prev = _context.next) {
|
|
404
405
|
case 0:
|
|
@@ -604,7 +605,26 @@ function _createInteractionMetricsPayload() {
|
|
|
604
605
|
regularTTAI = undefined;
|
|
605
606
|
expTTAI = undefined;
|
|
606
607
|
}
|
|
607
|
-
|
|
608
|
+
if ((0, _platformFeatureFlags.fg)('platform_ufo_enable_vc_raw_data')) {
|
|
609
|
+
size = (0, _getPayloadSize.default)(payload.attributes.properties);
|
|
610
|
+
vcRev = payload.attributes.properties['ufo:vc:rev'];
|
|
611
|
+
rawData = vcRev.find(function (item) {
|
|
612
|
+
return item.revision === 'raw-handler';
|
|
613
|
+
});
|
|
614
|
+
if (rawData) {
|
|
615
|
+
rawDataSize = (0, _getPayloadSize.default)(rawData);
|
|
616
|
+
payload.attributes.properties['ufo:vc:raw:size'] = rawDataSize;
|
|
617
|
+
if (size > MAX_PAYLOAD_SIZE && Array.isArray(vcRev) && vcRev.length > 0) {
|
|
618
|
+
payload.attributes.properties['ufo:vc:rev'] = vcRev.filter(function (item) {
|
|
619
|
+
return item.revision !== 'raw-handler';
|
|
620
|
+
});
|
|
621
|
+
payload.attributes.properties['ufo:vc:raw:removed'] = true;
|
|
622
|
+
}
|
|
623
|
+
}
|
|
624
|
+
payload.attributes.properties['event:sizeInKb'] = (0, _getPayloadSize.default)(payload.attributes.properties);
|
|
625
|
+
} else {
|
|
626
|
+
payload.attributes.properties['event:sizeInKb'] = (0, _getPayloadSize.default)(payload.attributes.properties);
|
|
627
|
+
}
|
|
608
628
|
return _context.abrupt("return", payload);
|
|
609
629
|
case 47:
|
|
610
630
|
case "end":
|
|
@@ -8,6 +8,7 @@ exports.default = void 0;
|
|
|
8
8
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
9
9
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
10
10
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
11
|
+
var _coinflip = _interopRequireDefault(require("../../coinflip"));
|
|
11
12
|
var _config = require("../../config");
|
|
12
13
|
var _interactionMetrics = require("../../interaction-metrics");
|
|
13
14
|
var _getInteractionStatus = _interopRequireDefault(require("./get-interaction-status"));
|
|
@@ -29,6 +30,7 @@ function _getVCMetrics() {
|
|
|
29
30
|
isPageVisible,
|
|
30
31
|
shouldReportVCMetrics,
|
|
31
32
|
observer,
|
|
33
|
+
includeRawData,
|
|
32
34
|
isSSREnabled,
|
|
33
35
|
ssr,
|
|
34
36
|
tti,
|
|
@@ -66,6 +68,7 @@ function _getVCMetrics() {
|
|
|
66
68
|
}
|
|
67
69
|
return _context.abrupt("return", {});
|
|
68
70
|
case 14:
|
|
71
|
+
includeRawData = (0, _coinflip.default)((0, _config.getVCRawDataInteractionRate)(interaction.ufoName, interaction.type));
|
|
69
72
|
isSSREnabled = interaction.type === 'page_load' && ((config === null || config === void 0 ? void 0 : config.ssr) || (config === null || config === void 0 || (_config$vc$ssrWhiteli = config.vc.ssrWhitelist) === null || _config$vc$ssrWhiteli === void 0 ? void 0 : _config$vc$ssrWhiteli.includes(interaction.ufoName)));
|
|
70
73
|
ssr = interaction.type === 'page_load' && isSSREnabled ? {
|
|
71
74
|
ssr: (0, _getSsrDoneTimeValue.default)(config)
|
|
@@ -73,7 +76,7 @@ function _getVCMetrics() {
|
|
|
73
76
|
_interactionMetrics.postInteractionLog.setVCObserverSSRConfig(ssr);
|
|
74
77
|
tti = (_interaction$apdex = interaction.apdex) === null || _interaction$apdex === void 0 || (_interaction$apdex = _interaction$apdex[0]) === null || _interaction$apdex === void 0 ? void 0 : _interaction$apdex.stopTime;
|
|
75
78
|
prefix = 'ufo';
|
|
76
|
-
_context.next =
|
|
79
|
+
_context.next = 22;
|
|
77
80
|
return observer.getVCResult(_objectSpread(_objectSpread({
|
|
78
81
|
start: interaction.start,
|
|
79
82
|
stop: interaction.end,
|
|
@@ -89,9 +92,10 @@ function _getVCMetrics() {
|
|
|
89
92
|
include3p: include3p,
|
|
90
93
|
excludeSmartAnswersInSearch: excludeSmartAnswersInSearch,
|
|
91
94
|
interactionType: interaction.type,
|
|
92
|
-
isPageVisible: isPageVisible
|
|
95
|
+
isPageVisible: isPageVisible,
|
|
96
|
+
includeRawData: includeRawData
|
|
93
97
|
}));
|
|
94
|
-
case
|
|
98
|
+
case 22:
|
|
95
99
|
result = _context.sent;
|
|
96
100
|
observer.stop(interaction.ufoName);
|
|
97
101
|
if (!include3p) {
|
|
@@ -105,15 +109,15 @@ function _getVCMetrics() {
|
|
|
105
109
|
return revision === mostRecentVCRevision;
|
|
106
110
|
});
|
|
107
111
|
if (!(!shouldReportVCMetrics || !(mostRecentVCRevisionPayload !== null && mostRecentVCRevisionPayload !== void 0 && mostRecentVCRevisionPayload.clean))) {
|
|
108
|
-
_context.next =
|
|
112
|
+
_context.next = 29;
|
|
109
113
|
break;
|
|
110
114
|
}
|
|
111
115
|
return _context.abrupt("return", result);
|
|
112
|
-
case
|
|
116
|
+
case 29:
|
|
113
117
|
return _context.abrupt("return", _objectSpread(_objectSpread({}, result), {}, {
|
|
114
118
|
'metric:vc90': mostRecentVCRevisionPayload['metric:vc90']
|
|
115
119
|
}));
|
|
116
|
-
case
|
|
120
|
+
case 30:
|
|
117
121
|
case "end":
|
|
118
122
|
return _context.stop();
|
|
119
123
|
}
|
package/dist/cjs/vc/index.js
CHANGED
|
@@ -122,11 +122,11 @@ var VCObserverWrapper = exports.VCObserverWrapper = /*#__PURE__*/function () {
|
|
|
122
122
|
value: function () {
|
|
123
123
|
var _getVCResult = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(param) {
|
|
124
124
|
var _this$oldVCObserver4, _this$newVCObserver3, _ref2;
|
|
125
|
-
var experienceKey, include3p, excludeSmartAnswersInSearch, includeSSRRatio, v1v2Result, v3Result, ssrRatio;
|
|
125
|
+
var experienceKey, include3p, excludeSmartAnswersInSearch, includeSSRRatio, includeRawData, v1v2Result, v3Result, ssrRatio;
|
|
126
126
|
return _regenerator.default.wrap(function _callee$(_context) {
|
|
127
127
|
while (1) switch (_context.prev = _context.next) {
|
|
128
128
|
case 0:
|
|
129
|
-
experienceKey = param.experienceKey, include3p = param.include3p, excludeSmartAnswersInSearch = param.excludeSmartAnswersInSearch, includeSSRRatio = param.includeSSRRatio;
|
|
129
|
+
experienceKey = param.experienceKey, include3p = param.include3p, excludeSmartAnswersInSearch = param.excludeSmartAnswersInSearch, includeSSRRatio = param.includeSSRRatio, includeRawData = param.includeRawData;
|
|
130
130
|
if (!((0, _config.isVCRevisionEnabled)('fy25.01', experienceKey) || (0, _config.isVCRevisionEnabled)('fy25.02', experienceKey))) {
|
|
131
131
|
_context.next = 7;
|
|
132
132
|
break;
|
|
@@ -156,7 +156,8 @@ var VCObserverWrapper = exports.VCObserverWrapper = /*#__PURE__*/function () {
|
|
|
156
156
|
includeSSRRatio: includeSSRRatio,
|
|
157
157
|
interactionType: param.interactionType,
|
|
158
158
|
isPageVisible: param.isPageVisible,
|
|
159
|
-
interactionAbortReason: param.interactionAbortReason
|
|
159
|
+
interactionAbortReason: param.interactionAbortReason,
|
|
160
|
+
includeRawData: includeRawData
|
|
160
161
|
});
|
|
161
162
|
case 12:
|
|
162
163
|
_context.t1 = _context.sent;
|
|
@@ -20,6 +20,7 @@ var _fy25_ = _interopRequireDefault(require("./metric-calculator/fy25_03"));
|
|
|
20
20
|
var _getViewportHeight = _interopRequireDefault(require("./metric-calculator/utils/get-viewport-height"));
|
|
21
21
|
var _getViewportWidth = _interopRequireDefault(require("./metric-calculator/utils/get-viewport-width"));
|
|
22
22
|
var _vcnext = _interopRequireDefault(require("./metric-calculator/vcnext"));
|
|
23
|
+
var _rawDataHandler = _interopRequireDefault(require("./raw-data-handler"));
|
|
23
24
|
var _viewportObserver = _interopRequireDefault(require("./viewport-observer"));
|
|
24
25
|
var _windowEventObserver = _interopRequireDefault(require("./window-event-observer"));
|
|
25
26
|
var SSRState = {
|
|
@@ -238,13 +239,14 @@ var VCObserverNew = exports.default = /*#__PURE__*/function () {
|
|
|
238
239
|
key: "getVCResult",
|
|
239
240
|
value: function () {
|
|
240
241
|
var _getVCResult = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(param) {
|
|
241
|
-
var start, stop, interactionId, interactionType, interactionAbortReason, isPageVisible, include3p, includeSSRRatio, excludeSmartAnswersInSearch, results, calculator_fy25_03, orderedEntries, fy25_03, calculator_next, vcNext;
|
|
242
|
+
var start, stop, interactionId, interactionType, interactionAbortReason, isPageVisible, include3p, includeSSRRatio, excludeSmartAnswersInSearch, includeRawData, results, feVCCalculationStartTime, calculator_fy25_03, orderedEntries, fy25_03, calculator_next, vcNext, feVCCalculationEndTime, rawVCCalculationStartTime, rawHandler, raw;
|
|
242
243
|
return _regenerator.default.wrap(function _callee$(_context) {
|
|
243
244
|
while (1) switch (_context.prev = _context.next) {
|
|
244
245
|
case 0:
|
|
245
|
-
start = param.start, stop = param.stop, interactionId = param.interactionId, interactionType = param.interactionType, interactionAbortReason = param.interactionAbortReason, isPageVisible = param.isPageVisible, include3p = param.include3p, includeSSRRatio = param.includeSSRRatio, excludeSmartAnswersInSearch = param.excludeSmartAnswersInSearch;
|
|
246
|
+
start = param.start, stop = param.stop, interactionId = param.interactionId, interactionType = param.interactionType, interactionAbortReason = param.interactionAbortReason, isPageVisible = param.isPageVisible, include3p = param.include3p, includeSSRRatio = param.includeSSRRatio, excludeSmartAnswersInSearch = param.excludeSmartAnswersInSearch, includeRawData = param.includeRawData;
|
|
246
247
|
results = [];
|
|
247
248
|
this.addStartEntry(start);
|
|
249
|
+
feVCCalculationStartTime = performance.now();
|
|
248
250
|
calculator_fy25_03 = new _fy25_.default();
|
|
249
251
|
if (param.ssr) {
|
|
250
252
|
this.addSSR(param.ssr);
|
|
@@ -253,7 +255,7 @@ var VCObserverNew = exports.default = /*#__PURE__*/function () {
|
|
|
253
255
|
start: start,
|
|
254
256
|
stop: stop
|
|
255
257
|
});
|
|
256
|
-
_context.next =
|
|
258
|
+
_context.next = 9;
|
|
257
259
|
return calculator_fy25_03.calculate({
|
|
258
260
|
orderedEntries: orderedEntries,
|
|
259
261
|
startTime: start,
|
|
@@ -267,7 +269,7 @@ var VCObserverNew = exports.default = /*#__PURE__*/function () {
|
|
|
267
269
|
isPageVisible: isPageVisible,
|
|
268
270
|
interactionAbortReason: interactionAbortReason
|
|
269
271
|
});
|
|
270
|
-
case
|
|
272
|
+
case 9:
|
|
271
273
|
fy25_03 = _context.sent;
|
|
272
274
|
if (fy25_03) {
|
|
273
275
|
results.push(fy25_03);
|
|
@@ -275,7 +277,7 @@ var VCObserverNew = exports.default = /*#__PURE__*/function () {
|
|
|
275
277
|
|
|
276
278
|
// TODO on cleanup: put behind `enabledVCRevisions` config
|
|
277
279
|
calculator_next = new _vcnext.default();
|
|
278
|
-
_context.next =
|
|
280
|
+
_context.next = 14;
|
|
279
281
|
return calculator_next.calculate({
|
|
280
282
|
orderedEntries: orderedEntries,
|
|
281
283
|
startTime: start,
|
|
@@ -288,13 +290,35 @@ var VCObserverNew = exports.default = /*#__PURE__*/function () {
|
|
|
288
290
|
isPageVisible: isPageVisible,
|
|
289
291
|
interactionAbortReason: interactionAbortReason
|
|
290
292
|
});
|
|
291
|
-
case
|
|
293
|
+
case 14:
|
|
292
294
|
vcNext = _context.sent;
|
|
293
295
|
if (vcNext) {
|
|
294
296
|
results.push(vcNext);
|
|
295
297
|
}
|
|
298
|
+
feVCCalculationEndTime = performance.now();
|
|
299
|
+
if (!(includeRawData && (0, _platformFeatureFlags.fg)('platform_ufo_enable_vc_raw_data'))) {
|
|
300
|
+
_context.next = 24;
|
|
301
|
+
break;
|
|
302
|
+
}
|
|
303
|
+
rawVCCalculationStartTime = performance.now();
|
|
304
|
+
rawHandler = new _rawDataHandler.default();
|
|
305
|
+
_context.next = 22;
|
|
306
|
+
return rawHandler.getRawData({
|
|
307
|
+
entries: orderedEntries,
|
|
308
|
+
startTime: start,
|
|
309
|
+
stopTime: stop,
|
|
310
|
+
isPageVisible: isPageVisible
|
|
311
|
+
});
|
|
312
|
+
case 22:
|
|
313
|
+
raw = _context.sent;
|
|
314
|
+
if (raw) {
|
|
315
|
+
raw.rawVCTime = Number((performance.now() - rawVCCalculationStartTime).toFixed(2));
|
|
316
|
+
raw.feVCTime = Number((feVCCalculationEndTime - feVCCalculationStartTime).toFixed(2));
|
|
317
|
+
results.push(raw);
|
|
318
|
+
}
|
|
319
|
+
case 24:
|
|
296
320
|
return _context.abrupt("return", results);
|
|
297
|
-
case
|
|
321
|
+
case 25:
|
|
298
322
|
case "end":
|
|
299
323
|
return _context.stop();
|
|
300
324
|
}
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = void 0;
|
|
8
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
9
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
10
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
11
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
12
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
13
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
14
|
+
var _getViewportHeight = _interopRequireDefault(require("../metric-calculator/utils/get-viewport-height"));
|
|
15
|
+
var _getViewportWidth = _interopRequireDefault(require("../metric-calculator/utils/get-viewport-width"));
|
|
16
|
+
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
|
|
17
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
18
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
19
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
20
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
21
|
+
var ABORTING_WINDOW_EVENT = ['wheel', 'scroll', 'keydown', 'resize'];
|
|
22
|
+
var MAX_OBSERVATIONS = 100;
|
|
23
|
+
var RawDataHandler = exports.default = /*#__PURE__*/function () {
|
|
24
|
+
function RawDataHandler() {
|
|
25
|
+
(0, _classCallCheck2.default)(this, RawDataHandler);
|
|
26
|
+
(0, _defineProperty2.default)(this, "revisionNo", 'raw-handler');
|
|
27
|
+
}
|
|
28
|
+
return (0, _createClass2.default)(RawDataHandler, [{
|
|
29
|
+
key: "getVCCleanStatus",
|
|
30
|
+
value: function getVCCleanStatus(filteredEntries) {
|
|
31
|
+
var dirtyReason = '';
|
|
32
|
+
var abortTimestamp = -1;
|
|
33
|
+
var hasAbortEvent = filteredEntries.some(function (entry) {
|
|
34
|
+
if (entry.data.type === 'window:event') {
|
|
35
|
+
var data = entry.data;
|
|
36
|
+
if (ABORTING_WINDOW_EVENT.includes(data.eventType)) {
|
|
37
|
+
dirtyReason = data.eventType === 'keydown' ? 'keypress' : data.eventType;
|
|
38
|
+
abortTimestamp = Math.round(entry.time);
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return false;
|
|
43
|
+
});
|
|
44
|
+
if (hasAbortEvent && dirtyReason) {
|
|
45
|
+
return {
|
|
46
|
+
isVCClean: false,
|
|
47
|
+
dirtyReason: dirtyReason,
|
|
48
|
+
abortTimestamp: abortTimestamp
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
return {
|
|
52
|
+
isVCClean: true
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
}, {
|
|
56
|
+
key: "getRawData",
|
|
57
|
+
value: function () {
|
|
58
|
+
var _getRawData = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(_ref) {
|
|
59
|
+
var entries, startTime, stopTime, isPageVisible, isVCClean, dirtyReason, getVCCleanStatusResult, viewportEntries, targetNameToIdMap, elementMapEntriesMap, nextElementId, typeMap, typeMapEntriesMap, nextTypeId, attributeMap, attributeEntriesMap, nextAttributeId, rawObservations, firstObservation, lastObservations, referencedEids, referencedChgs, referencedAtts, _iterator, _step, observation, _iterator2, _step2, eid, _iterator3, _step3, chg, _iterator4, _step4, att, result;
|
|
60
|
+
return _regenerator.default.wrap(function _callee$(_context) {
|
|
61
|
+
while (1) switch (_context.prev = _context.next) {
|
|
62
|
+
case 0:
|
|
63
|
+
entries = _ref.entries, startTime = _ref.startTime, stopTime = _ref.stopTime, isPageVisible = _ref.isPageVisible;
|
|
64
|
+
getVCCleanStatusResult = this.getVCCleanStatus(entries);
|
|
65
|
+
isVCClean = getVCCleanStatusResult.isVCClean;
|
|
66
|
+
dirtyReason = getVCCleanStatusResult.dirtyReason;
|
|
67
|
+
if (isPageVisible) {
|
|
68
|
+
_context.next = 6;
|
|
69
|
+
break;
|
|
70
|
+
}
|
|
71
|
+
return _context.abrupt("return", {
|
|
72
|
+
revision: this.revisionNo,
|
|
73
|
+
clean: false,
|
|
74
|
+
'metric:vc90': null,
|
|
75
|
+
abortReason: 'browser_backgrounded',
|
|
76
|
+
abortTimestamp: -1,
|
|
77
|
+
viewport: {
|
|
78
|
+
w: (0, _getViewportWidth.default)(),
|
|
79
|
+
h: (0, _getViewportHeight.default)()
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
case 6:
|
|
83
|
+
viewportEntries = entries.filter(function (entry) {
|
|
84
|
+
return entry.time >= startTime && entry.time <= stopTime && entry.data && entry.data.visible;
|
|
85
|
+
});
|
|
86
|
+
targetNameToIdMap = new Map();
|
|
87
|
+
elementMapEntriesMap = {};
|
|
88
|
+
nextElementId = 1;
|
|
89
|
+
typeMap = new Map();
|
|
90
|
+
typeMapEntriesMap = {};
|
|
91
|
+
nextTypeId = 1;
|
|
92
|
+
attributeMap = new Map();
|
|
93
|
+
attributeEntriesMap = {};
|
|
94
|
+
nextAttributeId = 1;
|
|
95
|
+
rawObservations = viewportEntries.map(function (entry) {
|
|
96
|
+
var viewportEntry = entry.data;
|
|
97
|
+
var targetName = viewportEntry.elementName || '';
|
|
98
|
+
var type = viewportEntry.type || '';
|
|
99
|
+
var rect = viewportEntry.rect;
|
|
100
|
+
var attributeName = viewportEntry.attributeName || '';
|
|
101
|
+
var eid = targetNameToIdMap.get(viewportEntry.elementName || '') || 0;
|
|
102
|
+
if (eid === 0) {
|
|
103
|
+
eid = nextElementId;
|
|
104
|
+
nextElementId += 1;
|
|
105
|
+
targetNameToIdMap.set(targetName, eid);
|
|
106
|
+
elementMapEntriesMap[eid] = targetName;
|
|
107
|
+
}
|
|
108
|
+
var chg = typeMap.get(type || '') || 0;
|
|
109
|
+
if (chg === 0) {
|
|
110
|
+
chg = nextTypeId;
|
|
111
|
+
nextTypeId += 1;
|
|
112
|
+
typeMap.set(type, chg);
|
|
113
|
+
typeMapEntriesMap[chg] = type;
|
|
114
|
+
}
|
|
115
|
+
var att = 0;
|
|
116
|
+
if (attributeName) {
|
|
117
|
+
att = attributeMap.get(attributeName) || 0;
|
|
118
|
+
if (att === 0) {
|
|
119
|
+
att = nextAttributeId;
|
|
120
|
+
nextAttributeId += 1;
|
|
121
|
+
attributeMap.set(attributeName, att);
|
|
122
|
+
attributeEntriesMap[att] = attributeName;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
var observation = _objectSpread({
|
|
126
|
+
t: Math.round(entry.time),
|
|
127
|
+
r: [Math.round(rect.left * 10) / 10, Math.round(rect.top * 10) / 10, Math.round(rect.right * 10) / 10, Math.round(rect.bottom * 10) / 10],
|
|
128
|
+
chg: chg,
|
|
129
|
+
eid: eid || 0
|
|
130
|
+
}, att > 0 ? {
|
|
131
|
+
att: att
|
|
132
|
+
} : {});
|
|
133
|
+
return observation;
|
|
134
|
+
}); // If the number of observations is greater than the maximum allowed, we need to trim the observations to the maximum allowed.
|
|
135
|
+
// We do this by keeping the first observation and the last MAX_OBSERVATIONS observations.
|
|
136
|
+
// We then collect the referenced IDs from the remaining observations and remove the unreferenced entries from the maps
|
|
137
|
+
if (rawObservations.length > MAX_OBSERVATIONS) {
|
|
138
|
+
firstObservation = rawObservations[0];
|
|
139
|
+
lastObservations = rawObservations.slice(-MAX_OBSERVATIONS);
|
|
140
|
+
rawObservations = [firstObservation].concat((0, _toConsumableArray2.default)(lastObservations));
|
|
141
|
+
|
|
142
|
+
// Collect referenced IDs from remaining observations
|
|
143
|
+
referencedEids = new Set();
|
|
144
|
+
referencedChgs = new Set();
|
|
145
|
+
referencedAtts = new Set();
|
|
146
|
+
_iterator = _createForOfIteratorHelper(rawObservations);
|
|
147
|
+
try {
|
|
148
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
149
|
+
observation = _step.value;
|
|
150
|
+
if (observation.eid > 0) {
|
|
151
|
+
referencedEids.add(observation.eid);
|
|
152
|
+
}
|
|
153
|
+
if (typeof observation.chg === 'number' && observation.chg > 0) {
|
|
154
|
+
referencedChgs.add(observation.chg);
|
|
155
|
+
}
|
|
156
|
+
if (observation.att !== undefined && observation.att > 0) {
|
|
157
|
+
referencedAtts.add(observation.att);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// Remove unreferenced entries from maps
|
|
162
|
+
} catch (err) {
|
|
163
|
+
_iterator.e(err);
|
|
164
|
+
} finally {
|
|
165
|
+
_iterator.f();
|
|
166
|
+
}
|
|
167
|
+
_iterator2 = _createForOfIteratorHelper(Object.keys(elementMapEntriesMap).map(Number));
|
|
168
|
+
try {
|
|
169
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
170
|
+
eid = _step2.value;
|
|
171
|
+
if (!referencedEids.has(eid)) {
|
|
172
|
+
delete elementMapEntriesMap[eid];
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
} catch (err) {
|
|
176
|
+
_iterator2.e(err);
|
|
177
|
+
} finally {
|
|
178
|
+
_iterator2.f();
|
|
179
|
+
}
|
|
180
|
+
_iterator3 = _createForOfIteratorHelper(Object.keys(typeMapEntriesMap).map(Number));
|
|
181
|
+
try {
|
|
182
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
183
|
+
chg = _step3.value;
|
|
184
|
+
if (!referencedChgs.has(chg)) {
|
|
185
|
+
delete typeMapEntriesMap[chg];
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
} catch (err) {
|
|
189
|
+
_iterator3.e(err);
|
|
190
|
+
} finally {
|
|
191
|
+
_iterator3.f();
|
|
192
|
+
}
|
|
193
|
+
_iterator4 = _createForOfIteratorHelper(Object.keys(attributeEntriesMap).map(Number));
|
|
194
|
+
try {
|
|
195
|
+
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
196
|
+
att = _step4.value;
|
|
197
|
+
if (!referencedAtts.has(att)) {
|
|
198
|
+
delete attributeEntriesMap[att];
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
} catch (err) {
|
|
202
|
+
_iterator4.e(err);
|
|
203
|
+
} finally {
|
|
204
|
+
_iterator4.f();
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
result = {
|
|
208
|
+
revision: this.revisionNo,
|
|
209
|
+
clean: isVCClean,
|
|
210
|
+
'metric:vc90': null,
|
|
211
|
+
rawData: {
|
|
212
|
+
obs: rawObservations !== null && rawObservations !== void 0 ? rawObservations : undefined,
|
|
213
|
+
eid: elementMapEntriesMap !== null && elementMapEntriesMap !== void 0 ? elementMapEntriesMap : undefined,
|
|
214
|
+
chg: typeMapEntriesMap !== null && typeMapEntriesMap !== void 0 ? typeMapEntriesMap : undefined,
|
|
215
|
+
att: attributeEntriesMap !== null && attributeEntriesMap !== void 0 ? attributeEntriesMap : undefined
|
|
216
|
+
},
|
|
217
|
+
abortReason: dirtyReason,
|
|
218
|
+
abortTimestamp: getVCCleanStatusResult.abortTimestamp,
|
|
219
|
+
viewport: {
|
|
220
|
+
w: (0, _getViewportWidth.default)(),
|
|
221
|
+
h: (0, _getViewportHeight.default)()
|
|
222
|
+
}
|
|
223
|
+
};
|
|
224
|
+
return _context.abrupt("return", result);
|
|
225
|
+
case 20:
|
|
226
|
+
case "end":
|
|
227
|
+
return _context.stop();
|
|
228
|
+
}
|
|
229
|
+
}, _callee, this);
|
|
230
|
+
}));
|
|
231
|
+
function getRawData(_x) {
|
|
232
|
+
return _getRawData.apply(this, arguments);
|
|
233
|
+
}
|
|
234
|
+
return getRawData;
|
|
235
|
+
}()
|
|
236
|
+
}]);
|
|
237
|
+
}();
|
|
@@ -170,6 +170,9 @@ export function getExperimentalInteractionRate(name, interactionType) {
|
|
|
170
170
|
return 0;
|
|
171
171
|
}
|
|
172
172
|
}
|
|
173
|
+
export function getVCRawDataInteractionRate(name, interactionType) {
|
|
174
|
+
return getConfigRate(name, interactionType, 'enableVCRawDataRates');
|
|
175
|
+
}
|
|
173
176
|
export function getPostInteractionRate(name, interactionType) {
|
|
174
177
|
return getConfigRate(name, interactionType, 'postInteractionLog');
|
|
175
178
|
}
|
|
@@ -43,6 +43,7 @@ import { optimizeMarks } from './utils/optimize-marks';
|
|
|
43
43
|
import { optimizeReactProfilerTimings } from './utils/optimize-react-profiler-timings';
|
|
44
44
|
import { optimizeRequestInfo } from './utils/optimize-request-info';
|
|
45
45
|
import { optimizeSpans } from './utils/optimize-spans';
|
|
46
|
+
const MAX_PAYLOAD_SIZE = 250;
|
|
46
47
|
function getUfoNameOverride(interaction) {
|
|
47
48
|
const {
|
|
48
49
|
ufoName,
|
|
@@ -605,7 +606,22 @@ async function createInteractionMetricsPayload(interaction, interactionId, exper
|
|
|
605
606
|
regularTTAI = undefined;
|
|
606
607
|
expTTAI = undefined;
|
|
607
608
|
}
|
|
608
|
-
|
|
609
|
+
if (fg('platform_ufo_enable_vc_raw_data')) {
|
|
610
|
+
const size = getPayloadSize(payload.attributes.properties);
|
|
611
|
+
const vcRev = payload.attributes.properties['ufo:vc:rev'];
|
|
612
|
+
const rawData = vcRev.find(item => item.revision === 'raw-handler');
|
|
613
|
+
if (rawData) {
|
|
614
|
+
const rawDataSize = getPayloadSize(rawData);
|
|
615
|
+
payload.attributes.properties['ufo:vc:raw:size'] = rawDataSize;
|
|
616
|
+
if (size > MAX_PAYLOAD_SIZE && Array.isArray(vcRev) && vcRev.length > 0) {
|
|
617
|
+
payload.attributes.properties['ufo:vc:rev'] = vcRev.filter(item => item.revision !== 'raw-handler');
|
|
618
|
+
payload.attributes.properties['ufo:vc:raw:removed'] = true;
|
|
619
|
+
}
|
|
620
|
+
}
|
|
621
|
+
payload.attributes.properties['event:sizeInKb'] = getPayloadSize(payload.attributes.properties);
|
|
622
|
+
} else {
|
|
623
|
+
payload.attributes.properties['event:sizeInKb'] = getPayloadSize(payload.attributes.properties);
|
|
624
|
+
}
|
|
609
625
|
return payload;
|
|
610
626
|
}
|
|
611
627
|
export async function createPayloads(interactionId, interaction) {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import coinflip from '../../coinflip';
|
|
2
|
+
import { getConfig, getMostRecentVCRevision, getVCRawDataInteractionRate } from '../../config';
|
|
2
3
|
import { interactionExtraMetrics, postInteractionLog } from '../../interaction-metrics';
|
|
3
4
|
import getInteractionStatus from './get-interaction-status';
|
|
4
5
|
import getPageVisibilityUpToTTAI from './get-page-visibility-up-to-ttai';
|
|
@@ -22,6 +23,7 @@ async function getVCMetrics(interaction, include3p = false, excludeSmartAnswersI
|
|
|
22
23
|
if (!observer) {
|
|
23
24
|
return {};
|
|
24
25
|
}
|
|
26
|
+
const includeRawData = coinflip(getVCRawDataInteractionRate(interaction.ufoName, interaction.type));
|
|
25
27
|
const isSSREnabled = interaction.type === 'page_load' && ((config === null || config === void 0 ? void 0 : config.ssr) || (config === null || config === void 0 ? void 0 : (_config$vc$ssrWhiteli = config.vc.ssrWhitelist) === null || _config$vc$ssrWhiteli === void 0 ? void 0 : _config$vc$ssrWhiteli.includes(interaction.ufoName)));
|
|
26
28
|
const ssr = interaction.type === 'page_load' && isSSREnabled ? {
|
|
27
29
|
ssr: getSSRDoneTimeValue(config)
|
|
@@ -44,7 +46,8 @@ async function getVCMetrics(interaction, include3p = false, excludeSmartAnswersI
|
|
|
44
46
|
include3p,
|
|
45
47
|
excludeSmartAnswersInSearch,
|
|
46
48
|
interactionType: interaction.type,
|
|
47
|
-
isPageVisible
|
|
49
|
+
isPageVisible,
|
|
50
|
+
includeRawData
|
|
48
51
|
});
|
|
49
52
|
observer.stop(interaction.ufoName);
|
|
50
53
|
if (!include3p) {
|
package/dist/es2019/vc/index.js
CHANGED
|
@@ -97,7 +97,8 @@ export class VCObserverWrapper {
|
|
|
97
97
|
experienceKey,
|
|
98
98
|
include3p,
|
|
99
99
|
excludeSmartAnswersInSearch,
|
|
100
|
-
includeSSRRatio
|
|
100
|
+
includeSSRRatio,
|
|
101
|
+
includeRawData
|
|
101
102
|
} = param;
|
|
102
103
|
const v1v2Result = isVCRevisionEnabled('fy25.01', experienceKey) || isVCRevisionEnabled('fy25.02', experienceKey) ? await ((_this$oldVCObserver4 = this.oldVCObserver) === null || _this$oldVCObserver4 === void 0 ? void 0 : _this$oldVCObserver4.getVCResult(param)) : {};
|
|
103
104
|
const v3Result = isVCRevisionEnabled('fy25.03', experienceKey) ? await ((_this$newVCObserver3 = this.newVCObserver) === null || _this$newVCObserver3 === void 0 ? void 0 : _this$newVCObserver3.getVCResult({
|
|
@@ -110,7 +111,8 @@ export class VCObserverWrapper {
|
|
|
110
111
|
includeSSRRatio,
|
|
111
112
|
interactionType: param.interactionType,
|
|
112
113
|
isPageVisible: param.isPageVisible,
|
|
113
|
-
interactionAbortReason: param.interactionAbortReason
|
|
114
|
+
interactionAbortReason: param.interactionAbortReason,
|
|
115
|
+
includeRawData
|
|
114
116
|
})) : [];
|
|
115
117
|
if (!v3Result) {
|
|
116
118
|
return v1v2Result !== null && v1v2Result !== void 0 ? v1v2Result : {};
|
|
@@ -7,6 +7,7 @@ import VCCalculator_FY25_03 from './metric-calculator/fy25_03';
|
|
|
7
7
|
import getViewportHeight from './metric-calculator/utils/get-viewport-height';
|
|
8
8
|
import getViewportWidth from './metric-calculator/utils/get-viewport-width';
|
|
9
9
|
import VCNextCalculator from './metric-calculator/vcnext';
|
|
10
|
+
import RawDataHandler from './raw-data-handler';
|
|
10
11
|
import ViewportObserver from './viewport-observer';
|
|
11
12
|
import WindowEventObserver from './window-event-observer';
|
|
12
13
|
const SSRState = {
|
|
@@ -201,10 +202,12 @@ export default class VCObserverNew {
|
|
|
201
202
|
isPageVisible,
|
|
202
203
|
include3p,
|
|
203
204
|
includeSSRRatio,
|
|
204
|
-
excludeSmartAnswersInSearch
|
|
205
|
+
excludeSmartAnswersInSearch,
|
|
206
|
+
includeRawData
|
|
205
207
|
} = param;
|
|
206
208
|
const results = [];
|
|
207
209
|
this.addStartEntry(start);
|
|
210
|
+
const feVCCalculationStartTime = performance.now();
|
|
208
211
|
const calculator_fy25_03 = new VCCalculator_FY25_03();
|
|
209
212
|
if (param.ssr) {
|
|
210
213
|
this.addSSR(param.ssr);
|
|
@@ -247,6 +250,22 @@ export default class VCObserverNew {
|
|
|
247
250
|
if (vcNext) {
|
|
248
251
|
results.push(vcNext);
|
|
249
252
|
}
|
|
253
|
+
const feVCCalculationEndTime = performance.now();
|
|
254
|
+
if (includeRawData && fg('platform_ufo_enable_vc_raw_data')) {
|
|
255
|
+
const rawVCCalculationStartTime = performance.now();
|
|
256
|
+
const rawHandler = new RawDataHandler();
|
|
257
|
+
const raw = await rawHandler.getRawData({
|
|
258
|
+
entries: orderedEntries,
|
|
259
|
+
startTime: start,
|
|
260
|
+
stopTime: stop,
|
|
261
|
+
isPageVisible
|
|
262
|
+
});
|
|
263
|
+
if (raw) {
|
|
264
|
+
raw.rawVCTime = Number((performance.now() - rawVCCalculationStartTime).toFixed(2));
|
|
265
|
+
raw.feVCTime = Number((feVCCalculationEndTime - feVCCalculationStartTime).toFixed(2));
|
|
266
|
+
results.push(raw);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
250
269
|
return results;
|
|
251
270
|
}
|
|
252
271
|
addStartEntry(startTime) {
|