@atlaskit/react-ufo 2.15.0 → 2.16.0
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 +8 -0
- package/dist/cjs/assets/index.js +96 -0
- package/dist/cjs/assets/utils.js +32 -0
- package/dist/cjs/common/assets/types.js +5 -0
- package/dist/cjs/create-payload/index.js +32 -5
- package/dist/cjs/vc/vc-observer/heatmap/heatmap.js +9 -20
- package/dist/cjs/vc/vc-observer/index.js +32 -28
- package/dist/cjs/vc/vc-observer/revisions/ViewportUpdateClassifier.js +8 -0
- package/dist/cjs/vc/vc-observer/revisions/fy24_01.js +34 -2
- package/dist/es2019/assets/index.js +82 -0
- package/dist/es2019/assets/utils.js +26 -0
- package/dist/es2019/common/assets/types.js +1 -0
- package/dist/es2019/create-payload/index.js +33 -3
- package/dist/es2019/vc/vc-observer/heatmap/heatmap.js +10 -18
- package/dist/es2019/vc/vc-observer/index.js +3 -0
- package/dist/es2019/vc/vc-observer/revisions/ViewportUpdateClassifier.js +6 -0
- package/dist/es2019/vc/vc-observer/revisions/fy24_01.js +29 -0
- package/dist/esm/assets/index.js +89 -0
- package/dist/esm/assets/utils.js +26 -0
- package/dist/esm/common/assets/types.js +1 -0
- package/dist/esm/create-payload/index.js +32 -5
- package/dist/esm/vc/vc-observer/heatmap/heatmap.js +9 -20
- package/dist/esm/vc/vc-observer/index.js +32 -28
- package/dist/esm/vc/vc-observer/revisions/ViewportUpdateClassifier.js +8 -0
- package/dist/esm/vc/vc-observer/revisions/fy24_01.js +34 -2
- package/dist/types/assets/index.d.ts +25 -0
- package/dist/types/assets/utils.d.ts +6 -0
- package/dist/types/common/assets/types.d.ts +18 -0
- package/dist/types/common/index.d.ts +1 -0
- package/dist/types/config/index.d.ts +2 -1
- package/dist/types/create-payload/index.d.ts +11616 -0
- package/dist/types/resource-timing/index.d.ts +1 -1
- package/dist/types/vc/vc-observer/heatmap/heatmap.d.ts +5 -8
- package/dist/types/vc/vc-observer/revisions/ViewportUpdateClassifier.d.ts +5 -0
- package/dist/types/vc/vc-observer/revisions/fy24_01.d.ts +2 -0
- package/dist/types/vc/vc-observer/revisions/types.d.ts +18 -0
- package/dist/types-ts4.5/assets/index.d.ts +25 -0
- package/dist/types-ts4.5/assets/utils.d.ts +6 -0
- package/dist/types-ts4.5/common/assets/types.d.ts +18 -0
- package/dist/types-ts4.5/common/index.d.ts +1 -0
- package/dist/types-ts4.5/config/index.d.ts +2 -1
- package/dist/types-ts4.5/create-payload/index.d.ts +11616 -0
- package/dist/types-ts4.5/resource-timing/index.d.ts +1 -1
- package/dist/types-ts4.5/vc/vc-observer/heatmap/heatmap.d.ts +5 -8
- package/dist/types-ts4.5/vc/vc-observer/revisions/ViewportUpdateClassifier.d.ts +5 -0
- package/dist/types-ts4.5/vc/vc-observer/revisions/fy24_01.d.ts +2 -0
- package/dist/types-ts4.5/vc/vc-observer/revisions/types.d.ts +18 -0
- package/package.json +4 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# @atlaskit/ufo-interaction-ignore
|
|
2
2
|
|
|
3
|
+
## 2.16.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#109616](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/109616)
|
|
8
|
+
[`5feb3a695a6d9`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/5feb3a695a6d9) -
|
|
9
|
+
Add Assets API to rUFO
|
|
10
|
+
|
|
3
11
|
## 2.15.0
|
|
4
12
|
|
|
5
13
|
### Minor Changes
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.CHRSummary = exports.CHRReporter = void 0;
|
|
8
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
9
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
10
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
11
|
+
var _defineProperty4 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
12
|
+
var _utils = require("./utils");
|
|
13
|
+
var CHRSummary = exports.CHRSummary = /*#__PURE__*/function () {
|
|
14
|
+
function CHRSummary() {
|
|
15
|
+
(0, _classCallCheck2.default)(this, CHRSummary);
|
|
16
|
+
(0, _defineProperty4.default)(this, "bundles", (0, _defineProperty4.default)((0, _defineProperty4.default)((0, _defineProperty4.default)({}, _utils.MEMORY_KEY, 0), _utils.DISK_KEY, 0), _utils.NETWORK_KEY, 0));
|
|
17
|
+
(0, _defineProperty4.default)(this, "bundlesCount", 0);
|
|
18
|
+
(0, _defineProperty4.default)(this, "size", (0, _defineProperty4.default)((0, _defineProperty4.default)((0, _defineProperty4.default)({}, _utils.MEMORY_KEY, 0), _utils.DISK_KEY, 0), _utils.NETWORK_KEY, 0));
|
|
19
|
+
(0, _defineProperty4.default)(this, "sizeTotal", 0);
|
|
20
|
+
}
|
|
21
|
+
return (0, _createClass2.default)(CHRSummary, [{
|
|
22
|
+
key: "add",
|
|
23
|
+
value: function add(asset) {
|
|
24
|
+
var size = 'size' in asset ? asset.size : undefined;
|
|
25
|
+
var encodedSize = 'encodedSize' in asset ? Number(asset.encodedSize) : 0;
|
|
26
|
+
var type = (0, _utils.calculateTransferType)(asset.type, asset.duration, size);
|
|
27
|
+
if (type === null) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
this.bundles[type] += 1;
|
|
31
|
+
this.bundlesCount += 1;
|
|
32
|
+
this.size[type] += encodedSize;
|
|
33
|
+
this.sizeTotal += encodedSize;
|
|
34
|
+
}
|
|
35
|
+
}], [{
|
|
36
|
+
key: "makePayload",
|
|
37
|
+
value: function makePayload(summary) {
|
|
38
|
+
var size = summary.size,
|
|
39
|
+
bundlesCount = summary.bundlesCount,
|
|
40
|
+
sizeTotal = summary.sizeTotal;
|
|
41
|
+
var cachedSize = size[_utils.MEMORY_KEY] + size[_utils.DISK_KEY];
|
|
42
|
+
var sizeRatio = (0, _utils.round)(cachedSize / summary.sizeTotal);
|
|
43
|
+
return {
|
|
44
|
+
size: sizeTotal,
|
|
45
|
+
chr: sizeRatio,
|
|
46
|
+
count: bundlesCount
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
}]);
|
|
50
|
+
}();
|
|
51
|
+
var CHRReporter = exports.CHRReporter = /*#__PURE__*/function () {
|
|
52
|
+
function CHRReporter() {
|
|
53
|
+
(0, _classCallCheck2.default)(this, CHRReporter);
|
|
54
|
+
(0, _defineProperty4.default)(this, "all", new CHRSummary());
|
|
55
|
+
(0, _defineProperty4.default)(this, "allAtlassian", new CHRSummary());
|
|
56
|
+
(0, _defineProperty4.default)(this, "preloaded", new CHRSummary());
|
|
57
|
+
}
|
|
58
|
+
return (0, _createClass2.default)(CHRReporter, [{
|
|
59
|
+
key: "get",
|
|
60
|
+
value: function get(resourceTimings, assetsClassification) {
|
|
61
|
+
var _this = this;
|
|
62
|
+
try {
|
|
63
|
+
Object.entries(resourceTimings).map(function (_ref) {
|
|
64
|
+
var _ref2 = (0, _slicedToArray2.default)(_ref, 2),
|
|
65
|
+
label = _ref2[0],
|
|
66
|
+
entry = _ref2[1];
|
|
67
|
+
if (assetsClassification.all) {
|
|
68
|
+
_this.all.add(entry);
|
|
69
|
+
}
|
|
70
|
+
if (assetsClassification.allAtlassian({
|
|
71
|
+
label: label,
|
|
72
|
+
entry: entry
|
|
73
|
+
})) {
|
|
74
|
+
_this.allAtlassian.add(entry);
|
|
75
|
+
}
|
|
76
|
+
if (assetsClassification.preloaded({
|
|
77
|
+
label: label,
|
|
78
|
+
entry: entry
|
|
79
|
+
})) {
|
|
80
|
+
_this.preloaded.add(entry);
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
if (this.all.bundlesCount === 0) {
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
all: CHRSummary.makePayload(this.all),
|
|
88
|
+
allAtlassian: CHRSummary.makePayload(this.allAtlassian),
|
|
89
|
+
preloaded: CHRSummary.makePayload(this.preloaded)
|
|
90
|
+
};
|
|
91
|
+
} catch (error) {
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}]);
|
|
96
|
+
}();
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.round = exports.calculateTransferType = exports.cacheableTypes = exports.NETWORK_KEY = exports.MEMORY_KEY = exports.DISK_KEY = void 0;
|
|
7
|
+
/* Borrowed from https://bitbucket.org/atlassian/atlassian-frontend/src/master/packages/performance/browser-metrics/src/plugins/timings/resource.ts */
|
|
8
|
+
var cacheableTypes = exports.cacheableTypes = ['script', 'link'];
|
|
9
|
+
var MEMORY_KEY = exports.MEMORY_KEY = 'mem';
|
|
10
|
+
var DISK_KEY = exports.DISK_KEY = 'disk';
|
|
11
|
+
var NETWORK_KEY = exports.NETWORK_KEY = 'net';
|
|
12
|
+
var calculateTransferType = exports.calculateTransferType = function calculateTransferType(type, duration, size) {
|
|
13
|
+
if (!cacheableTypes.includes(type)) {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
if ((size === undefined || size === 0) && duration === 0) {
|
|
17
|
+
return MEMORY_KEY;
|
|
18
|
+
}
|
|
19
|
+
if (size === 0 && duration > 0) {
|
|
20
|
+
return DISK_KEY;
|
|
21
|
+
}
|
|
22
|
+
if (size === undefined) {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
return NETWORK_KEY;
|
|
26
|
+
};
|
|
27
|
+
var round = exports.round = function round(n) {
|
|
28
|
+
if (isNaN(n)) {
|
|
29
|
+
return 0;
|
|
30
|
+
}
|
|
31
|
+
return Math.round(n * 10000) / 10000;
|
|
32
|
+
};
|
|
@@ -14,6 +14,7 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
|
|
|
14
14
|
var _bowserUltralight = _interopRequireDefault(require("bowser-ultralight"));
|
|
15
15
|
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
16
16
|
var _additionalPayload = require("../additional-payload");
|
|
17
|
+
var _assets = require("../assets");
|
|
17
18
|
var bundleEvalTiming = _interopRequireWildcard(require("../bundle-eval-timing"));
|
|
18
19
|
var _coinflip = _interopRequireDefault(require("../coinflip"));
|
|
19
20
|
var _constants = require("../common/constants");
|
|
@@ -315,6 +316,31 @@ function getSSRProperties(type) {
|
|
|
315
316
|
'ssr:featureFlags': getSSRFeatureFlags(type)
|
|
316
317
|
};
|
|
317
318
|
}
|
|
319
|
+
var getAssetsMetrics = function getAssetsMetrics(interaction, resourceTimings) {
|
|
320
|
+
try {
|
|
321
|
+
var config = (0, _config.getConfig)();
|
|
322
|
+
var type = interaction.type;
|
|
323
|
+
var isCHREnabled = (0, _platformFeatureFlags.fg)('ufo_chr_config');
|
|
324
|
+
var allowedTypes = ['page_load', 'transition'];
|
|
325
|
+
var assetsClassification = config === null || config === void 0 ? void 0 : config.assetsClassification;
|
|
326
|
+
if (!isCHREnabled || !allowedTypes.includes(type) || !assetsClassification) {
|
|
327
|
+
// Skip if: FG disabled, not allowed type or assetsClassification isn't configured
|
|
328
|
+
return {};
|
|
329
|
+
}
|
|
330
|
+
var reporter = new _assets.CHRReporter();
|
|
331
|
+
var assets = reporter.get(resourceTimings, assetsClassification);
|
|
332
|
+
if (assets) {
|
|
333
|
+
// Only add assets in case it exists
|
|
334
|
+
return {
|
|
335
|
+
'event:assets': assets
|
|
336
|
+
};
|
|
337
|
+
}
|
|
338
|
+
return {};
|
|
339
|
+
} catch (error) {
|
|
340
|
+
// Skip CHR in case of error
|
|
341
|
+
return {};
|
|
342
|
+
}
|
|
343
|
+
};
|
|
318
344
|
var getBrowserMetadata = function getBrowserMetadata() {
|
|
319
345
|
var data = {};
|
|
320
346
|
var now = new Date();
|
|
@@ -729,7 +755,7 @@ function createInteractionMetricsPayload(interaction, interactionId, experimenta
|
|
|
729
755
|
});
|
|
730
756
|
};
|
|
731
757
|
// Detailed payload. Page visibility = visible
|
|
732
|
-
var getDetailedInteractionMetrics = function getDetailedInteractionMetrics() {
|
|
758
|
+
var getDetailedInteractionMetrics = function getDetailedInteractionMetrics(resourceTimings) {
|
|
733
759
|
if (experimental || window.__UFO_COMPACT_PAYLOAD__ || !isDetailedPayload) {
|
|
734
760
|
return {};
|
|
735
761
|
}
|
|
@@ -750,7 +776,7 @@ function createInteractionMetricsPayload(interaction, interactionId, experimenta
|
|
|
750
776
|
requestInfo: optimizeRequestInfo(interaction.requestInfo, start),
|
|
751
777
|
customTimings: optimizeCustomTimings(interaction.customTimings, start),
|
|
752
778
|
bundleEvalTimings: objectToArray(getBundleEvalTimings(start)),
|
|
753
|
-
resourceTimings: objectToArray(
|
|
779
|
+
resourceTimings: objectToArray(resourceTimings)
|
|
754
780
|
};
|
|
755
781
|
};
|
|
756
782
|
// Page load & detailed payload
|
|
@@ -771,6 +797,7 @@ function createInteractionMetricsPayload(interaction, interactionId, experimenta
|
|
|
771
797
|
regularTTAI = getTTAI(interaction);
|
|
772
798
|
}
|
|
773
799
|
var newUFOName = (0, _utils.sanitizeUfoName)(ufoName);
|
|
800
|
+
var resourceTimings = getResourceTimings(start, end);
|
|
774
801
|
var payload = {
|
|
775
802
|
actionSubject: 'experience',
|
|
776
803
|
action: 'measured',
|
|
@@ -778,7 +805,7 @@ function createInteractionMetricsPayload(interaction, interactionId, experimenta
|
|
|
778
805
|
source: 'measured',
|
|
779
806
|
tags: ['observability'],
|
|
780
807
|
attributes: {
|
|
781
|
-
properties: _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
|
|
808
|
+
properties: _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
|
|
782
809
|
// basic
|
|
783
810
|
'event:hostname': ((_window$location = window.location) === null || _window$location === void 0 ? void 0 : _window$location.hostname) || 'unknown',
|
|
784
811
|
'event:product': config.product,
|
|
@@ -792,7 +819,7 @@ function createInteractionMetricsPayload(interaction, interactionId, experimenta
|
|
|
792
819
|
'event:region': config.region || 'unknown',
|
|
793
820
|
'experience:key': experimental ? 'custom.experimental-interaction-metrics' : 'custom.interaction-metrics',
|
|
794
821
|
'experience:name': newUFOName
|
|
795
|
-
}, getBrowserMetadata()), getSSRProperties(type)), getPPSMetrics(interaction)), getPaintMetrics(type)), getNavigationMetrics(type)), getVCMetrics(interaction)), experimental ? (0, _createExperimentalInteractionMetricsPayload.getExperimentalVCMetrics)(interaction) : undefined), (_config$additionalPay = config.additionalPayloadData) === null || _config$additionalPay === void 0 ? void 0 : _config$additionalPay.call(config, interaction)), getTracingContextData(interaction)), getStylesheetMetrics()), getErrorCounts(interaction)), {}, {
|
|
822
|
+
}, getBrowserMetadata()), getSSRProperties(type)), getAssetsMetrics(interaction, resourceTimings)), getPPSMetrics(interaction)), getPaintMetrics(type)), getNavigationMetrics(type)), getVCMetrics(interaction)), experimental ? (0, _createExperimentalInteractionMetricsPayload.getExperimentalVCMetrics)(interaction) : undefined), (_config$additionalPay = config.additionalPayloadData) === null || _config$additionalPay === void 0 ? void 0 : _config$additionalPay.call(config, interaction)), getTracingContextData(interaction)), getStylesheetMetrics()), getErrorCounts(interaction)), {}, {
|
|
796
823
|
interactionMetrics: _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
|
|
797
824
|
namePrefix: config.namePrefix || '',
|
|
798
825
|
segmentPrefix: config.segmentPrefix || '',
|
|
@@ -824,7 +851,7 @@ function createInteractionMetricsPayload(interaction, interactionId, experimenta
|
|
|
824
851
|
marks: optimizeMarks(interaction.marks),
|
|
825
852
|
customData: optimizeCustomData(interaction),
|
|
826
853
|
reactProfilerTimings: optimizeReactProfilerTimings(interaction.reactProfilerTimings, start)
|
|
827
|
-
}, labelStack), getPageLoadInteractionMetrics()), getDetailedInteractionMetrics()), getPageLoadDetailedInteractionMetrics()), getBm3TrackerTimings(interaction)), {}, {
|
|
854
|
+
}, labelStack), getPageLoadInteractionMetrics()), getDetailedInteractionMetrics(resourceTimings)), getPageLoadDetailedInteractionMetrics()), getBm3TrackerTimings(interaction)), {}, {
|
|
828
855
|
'metric:ttai': experimental ? regularTTAI || expTTAI : undefined,
|
|
829
856
|
'metric:experimental:ttai': expTTAI
|
|
830
857
|
}),
|
|
@@ -130,6 +130,7 @@ var MultiRevisionHeatmap = exports.MultiRevisionHeatmap = /*#__PURE__*/function
|
|
|
130
130
|
value: function processData(_ref4) {
|
|
131
131
|
var _this3 = this;
|
|
132
132
|
var VCParts = _ref4.VCParts,
|
|
133
|
+
VCCalculationMethods = _ref4.VCCalculationMethods,
|
|
133
134
|
_ref4$ssr = _ref4.ssr,
|
|
134
135
|
ssr = _ref4$ssr === void 0 ? UNUSED_SECTOR : _ref4$ssr;
|
|
135
136
|
return this.heatmaps.map(function (heatmap, i) {
|
|
@@ -172,26 +173,14 @@ var MultiRevisionHeatmap = exports.MultiRevisionHeatmap = /*#__PURE__*/function
|
|
|
172
173
|
}).sort(function (a, b) {
|
|
173
174
|
return a[0] > b[0] ? 1 : -1;
|
|
174
175
|
});
|
|
175
|
-
var
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
if ((VC[value] === null || VC[value] === undefined) && VCRatio >= value / 100) {
|
|
184
|
-
var _componentsLog$time;
|
|
185
|
-
VC[value] = time;
|
|
186
|
-
VCBox[value] = new Set();
|
|
187
|
-
(_componentsLog$time = componentsLog[time]) === null || _componentsLog$time === void 0 || _componentsLog$time.forEach(function (v) {
|
|
188
|
-
var _VCBox$value;
|
|
189
|
-
return (_VCBox$value = VCBox[value]) === null || _VCBox$value === void 0 ? void 0 : _VCBox$value.add(v.targetName);
|
|
190
|
-
});
|
|
191
|
-
}
|
|
192
|
-
});
|
|
193
|
-
return VCRatio;
|
|
194
|
-
}, 0);
|
|
176
|
+
var _VCCalculationMethods = VCCalculationMethods[i]({
|
|
177
|
+
VCParts: VCParts,
|
|
178
|
+
componentsLog: componentsLog,
|
|
179
|
+
entries: entries,
|
|
180
|
+
totalPainted: totalPainted
|
|
181
|
+
}),
|
|
182
|
+
VC = _VCCalculationMethods.VC,
|
|
183
|
+
VCBox = _VCCalculationMethods.VCBox;
|
|
195
184
|
var VCEntries = entries.reduce(function (acc, _ref5, i) {
|
|
196
185
|
var _acc$abs, _componentsLog$timest;
|
|
197
186
|
var _ref6 = (0, _slicedToArray2.default)(_ref5, 2),
|
|
@@ -256,6 +256,10 @@ var VCObserver = exports.VCObserver = /*#__PURE__*/function () {
|
|
|
256
256
|
VCParts: VCObserver.VCParts.map(function (v) {
|
|
257
257
|
return parseInt(v);
|
|
258
258
|
}),
|
|
259
|
+
VCCalculationMethods: (0, _revisions.getRevisions)().map(function (_ref8) {
|
|
260
|
+
var classifier = _ref8.classifier;
|
|
261
|
+
return classifier.VCCalculationMethod;
|
|
262
|
+
}),
|
|
259
263
|
ssr: ssr,
|
|
260
264
|
clean: !abortReasonInfo
|
|
261
265
|
})) : null;
|
|
@@ -302,13 +306,13 @@ var VCObserver = exports.VCObserver = /*#__PURE__*/function () {
|
|
|
302
306
|
});
|
|
303
307
|
}
|
|
304
308
|
});
|
|
305
|
-
(0, _defineProperty2.default)(this, "onViewportChangeDetected", function (
|
|
306
|
-
var element =
|
|
307
|
-
type =
|
|
308
|
-
ignoreReason =
|
|
309
|
-
timestamp =
|
|
310
|
-
targetName =
|
|
311
|
-
intersectionRect =
|
|
309
|
+
(0, _defineProperty2.default)(this, "onViewportChangeDetected", function (_ref10) {
|
|
310
|
+
var element = _ref10.element,
|
|
311
|
+
type = _ref10.type,
|
|
312
|
+
ignoreReason = _ref10.ignoreReason,
|
|
313
|
+
timestamp = _ref10.timestamp,
|
|
314
|
+
targetName = _ref10.targetName,
|
|
315
|
+
intersectionRect = _ref10.intersectionRect;
|
|
312
316
|
if (_this.multiHeatmap === null) {
|
|
313
317
|
return;
|
|
314
318
|
}
|
|
@@ -390,10 +394,10 @@ var VCObserver = exports.VCObserver = /*#__PURE__*/function () {
|
|
|
390
394
|
var unbinds = (0, _attachAbortListeners.attachAbortListeners)(window, _this.viewport, _this.abortReasonCallback);
|
|
391
395
|
if ((_window = window) !== null && _window !== void 0 && _window.__SSR_ABORT_LISTENERS__) {
|
|
392
396
|
var _window2;
|
|
393
|
-
Object.entries(window.__SSR_ABORT_LISTENERS__.aborts).forEach(function (
|
|
394
|
-
var
|
|
395
|
-
key =
|
|
396
|
-
time =
|
|
397
|
+
Object.entries(window.__SSR_ABORT_LISTENERS__.aborts).forEach(function (_ref11) {
|
|
398
|
+
var _ref12 = (0, _slicedToArray2.default)(_ref11, 2),
|
|
399
|
+
key = _ref12[0],
|
|
400
|
+
time = _ref12[1];
|
|
397
401
|
if (time) {
|
|
398
402
|
_this.abortReasonCallback(key, time);
|
|
399
403
|
}
|
|
@@ -428,8 +432,8 @@ var VCObserver = exports.VCObserver = /*#__PURE__*/function () {
|
|
|
428
432
|
}
|
|
429
433
|
return (0, _createClass2.default)(VCObserver, [{
|
|
430
434
|
key: "start",
|
|
431
|
-
value: function start(
|
|
432
|
-
var startTime =
|
|
435
|
+
value: function start(_ref13) {
|
|
436
|
+
var startTime = _ref13.startTime;
|
|
433
437
|
this.active = true;
|
|
434
438
|
if (this.observers.isBrowserSupported()) {
|
|
435
439
|
this.setViewportSize();
|
|
@@ -451,12 +455,12 @@ var VCObserver = exports.VCObserver = /*#__PURE__*/function () {
|
|
|
451
455
|
}, {
|
|
452
456
|
key: "getIgnoredElements",
|
|
453
457
|
value: function getIgnoredElements(componentsLog) {
|
|
454
|
-
return Object.values(componentsLog).flat().filter(function (
|
|
455
|
-
var ignoreReason =
|
|
458
|
+
return Object.values(componentsLog).flat().filter(function (_ref14) {
|
|
459
|
+
var ignoreReason = _ref14.ignoreReason;
|
|
456
460
|
return Boolean(ignoreReason);
|
|
457
|
-
}).map(function (
|
|
458
|
-
var targetName =
|
|
459
|
-
ignoreReason =
|
|
461
|
+
}).map(function (_ref15) {
|
|
462
|
+
var targetName = _ref15.targetName,
|
|
463
|
+
ignoreReason = _ref15.ignoreReason;
|
|
460
464
|
return {
|
|
461
465
|
targetName: targetName,
|
|
462
466
|
ignoreReason: ignoreReason
|
|
@@ -577,12 +581,12 @@ var VCObserver = exports.VCObserver = /*#__PURE__*/function () {
|
|
|
577
581
|
}
|
|
578
582
|
}], [{
|
|
579
583
|
key: "calculateVC",
|
|
580
|
-
value: function calculateVC(
|
|
581
|
-
var heatmap =
|
|
582
|
-
|
|
583
|
-
ssr =
|
|
584
|
-
componentsLog =
|
|
585
|
-
viewport =
|
|
584
|
+
value: function calculateVC(_ref16) {
|
|
585
|
+
var heatmap = _ref16.heatmap,
|
|
586
|
+
_ref16$ssr = _ref16.ssr,
|
|
587
|
+
ssr = _ref16$ssr === void 0 ? UNUSED_SECTOR : _ref16$ssr,
|
|
588
|
+
componentsLog = _ref16.componentsLog,
|
|
589
|
+
viewport = _ref16.viewport;
|
|
586
590
|
var lastUpdate = {};
|
|
587
591
|
var totalPainted = 0;
|
|
588
592
|
if (ssr !== UNUSED_SECTOR) {
|
|
@@ -651,11 +655,11 @@ var VCObserver = exports.VCObserver = /*#__PURE__*/function () {
|
|
|
651
655
|
});
|
|
652
656
|
return VCRatio;
|
|
653
657
|
}, 0);
|
|
654
|
-
var VCEntries = entries.reduce(function (acc,
|
|
658
|
+
var VCEntries = entries.reduce(function (acc, _ref17, i) {
|
|
655
659
|
var _acc$abs, _componentsLog$timest, _acc$rel$vc, _acc$rel;
|
|
656
|
-
var
|
|
657
|
-
timestamp =
|
|
658
|
-
entryPainted =
|
|
660
|
+
var _ref18 = (0, _slicedToArray2.default)(_ref17, 2),
|
|
661
|
+
timestamp = _ref18[0],
|
|
662
|
+
entryPainted = _ref18[1];
|
|
659
663
|
var currentlyPainted = entryPainted + (((_acc$abs = acc.abs[i - 1]) === null || _acc$abs === void 0 ? void 0 : _acc$abs[1]) || 0);
|
|
660
664
|
var currentlyPaintedRatio = Math.round(currentlyPainted / totalPainted * 1000) / 10;
|
|
661
665
|
var logEntry = (_componentsLog$timest = componentsLog[timestamp]) === null || _componentsLog$timest === void 0 ? void 0 : _componentsLog$timest.map(function (v) {
|
|
@@ -19,6 +19,14 @@ var ViewportUpdateClassifier = exports.ViewportUpdateClassifier = /*#__PURE__*/f
|
|
|
19
19
|
(0, _defineProperty2.default)(this, "__combinedFilters", []);
|
|
20
20
|
}
|
|
21
21
|
return (0, _createClass2.default)(ViewportUpdateClassifier, [{
|
|
22
|
+
key: "VCCalculationMethod",
|
|
23
|
+
value: function VCCalculationMethod(_) {
|
|
24
|
+
return {
|
|
25
|
+
VC: {},
|
|
26
|
+
VCBox: {}
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
}, {
|
|
22
30
|
key: "mergeConfig",
|
|
23
31
|
value: function mergeConfig() {
|
|
24
32
|
var _this = this;
|
|
@@ -5,8 +5,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.revFY24_01Classifier = exports.FY24_01Classifier = void 0;
|
|
8
|
-
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
9
8
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
9
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
10
10
|
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
11
11
|
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
12
12
|
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
@@ -34,6 +34,38 @@ var FY24_01Classifier = exports.FY24_01Classifier = /*#__PURE__*/function (_View
|
|
|
34
34
|
return _this;
|
|
35
35
|
}
|
|
36
36
|
(0, _inherits2.default)(FY24_01Classifier, _ViewportUpdateClassi);
|
|
37
|
-
return (0, _createClass2.default)(FY24_01Classifier
|
|
37
|
+
return (0, _createClass2.default)(FY24_01Classifier, [{
|
|
38
|
+
key: "VCCalculationMethod",
|
|
39
|
+
value: function VCCalculationMethod(_ref2) {
|
|
40
|
+
var VCParts = _ref2.VCParts,
|
|
41
|
+
entries = _ref2.entries,
|
|
42
|
+
totalPainted = _ref2.totalPainted,
|
|
43
|
+
componentsLog = _ref2.componentsLog;
|
|
44
|
+
var VC = {};
|
|
45
|
+
var VCBox = {};
|
|
46
|
+
entries.reduce(function () {
|
|
47
|
+
var acc = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
|
|
48
|
+
var v = arguments.length > 1 ? arguments[1] : undefined;
|
|
49
|
+
var VCRatio = v[1] / totalPainted + acc;
|
|
50
|
+
var time = v[0];
|
|
51
|
+
VCParts.forEach(function (value) {
|
|
52
|
+
if ((VC[value] === null || VC[value] === undefined) && VCRatio >= value / 100) {
|
|
53
|
+
var _componentsLog$time;
|
|
54
|
+
VC[value] = time;
|
|
55
|
+
VCBox[value] = new Set();
|
|
56
|
+
(_componentsLog$time = componentsLog[time]) === null || _componentsLog$time === void 0 || _componentsLog$time.forEach(function (v) {
|
|
57
|
+
var _VCBox$value;
|
|
58
|
+
return (_VCBox$value = VCBox[value]) === null || _VCBox$value === void 0 ? void 0 : _VCBox$value.add(v.targetName);
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
return VCRatio;
|
|
63
|
+
}, 0);
|
|
64
|
+
return {
|
|
65
|
+
VC: VC,
|
|
66
|
+
VCBox: VCBox
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
}]);
|
|
38
70
|
}(_ViewportUpdateClassifier.ViewportUpdateClassifier);
|
|
39
71
|
var revFY24_01Classifier = exports.revFY24_01Classifier = new FY24_01Classifier();
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
+
import { calculateTransferType, DISK_KEY, MEMORY_KEY, NETWORK_KEY, round } from './utils';
|
|
3
|
+
export class CHRSummary {
|
|
4
|
+
constructor() {
|
|
5
|
+
_defineProperty(this, "bundles", {
|
|
6
|
+
[MEMORY_KEY]: 0,
|
|
7
|
+
[DISK_KEY]: 0,
|
|
8
|
+
[NETWORK_KEY]: 0
|
|
9
|
+
});
|
|
10
|
+
_defineProperty(this, "bundlesCount", 0);
|
|
11
|
+
_defineProperty(this, "size", {
|
|
12
|
+
[MEMORY_KEY]: 0,
|
|
13
|
+
[DISK_KEY]: 0,
|
|
14
|
+
[NETWORK_KEY]: 0
|
|
15
|
+
});
|
|
16
|
+
_defineProperty(this, "sizeTotal", 0);
|
|
17
|
+
}
|
|
18
|
+
add(asset) {
|
|
19
|
+
const size = 'size' in asset ? asset.size : undefined;
|
|
20
|
+
const encodedSize = 'encodedSize' in asset ? Number(asset.encodedSize) : 0;
|
|
21
|
+
const type = calculateTransferType(asset.type, asset.duration, size);
|
|
22
|
+
if (type === null) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
this.bundles[type] += 1;
|
|
26
|
+
this.bundlesCount += 1;
|
|
27
|
+
this.size[type] += encodedSize;
|
|
28
|
+
this.sizeTotal += encodedSize;
|
|
29
|
+
}
|
|
30
|
+
static makePayload(summary) {
|
|
31
|
+
const {
|
|
32
|
+
size,
|
|
33
|
+
bundlesCount,
|
|
34
|
+
sizeTotal
|
|
35
|
+
} = summary;
|
|
36
|
+
const cachedSize = size[MEMORY_KEY] + size[DISK_KEY];
|
|
37
|
+
const sizeRatio = round(cachedSize / summary.sizeTotal);
|
|
38
|
+
return {
|
|
39
|
+
size: sizeTotal,
|
|
40
|
+
chr: sizeRatio,
|
|
41
|
+
count: bundlesCount
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export class CHRReporter {
|
|
46
|
+
constructor() {
|
|
47
|
+
_defineProperty(this, "all", new CHRSummary());
|
|
48
|
+
_defineProperty(this, "allAtlassian", new CHRSummary());
|
|
49
|
+
_defineProperty(this, "preloaded", new CHRSummary());
|
|
50
|
+
}
|
|
51
|
+
get(resourceTimings, assetsClassification) {
|
|
52
|
+
try {
|
|
53
|
+
Object.entries(resourceTimings).map(([label, entry]) => {
|
|
54
|
+
if (assetsClassification.all) {
|
|
55
|
+
this.all.add(entry);
|
|
56
|
+
}
|
|
57
|
+
if (assetsClassification.allAtlassian({
|
|
58
|
+
label,
|
|
59
|
+
entry
|
|
60
|
+
})) {
|
|
61
|
+
this.allAtlassian.add(entry);
|
|
62
|
+
}
|
|
63
|
+
if (assetsClassification.preloaded({
|
|
64
|
+
label,
|
|
65
|
+
entry
|
|
66
|
+
})) {
|
|
67
|
+
this.preloaded.add(entry);
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
if (this.all.bundlesCount === 0) {
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
return {
|
|
74
|
+
all: CHRSummary.makePayload(this.all),
|
|
75
|
+
allAtlassian: CHRSummary.makePayload(this.allAtlassian),
|
|
76
|
+
preloaded: CHRSummary.makePayload(this.preloaded)
|
|
77
|
+
};
|
|
78
|
+
} catch (error) {
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/* Borrowed from https://bitbucket.org/atlassian/atlassian-frontend/src/master/packages/performance/browser-metrics/src/plugins/timings/resource.ts */
|
|
2
|
+
export const cacheableTypes = ['script', 'link'];
|
|
3
|
+
export const MEMORY_KEY = 'mem';
|
|
4
|
+
export const DISK_KEY = 'disk';
|
|
5
|
+
export const NETWORK_KEY = 'net';
|
|
6
|
+
export const calculateTransferType = (type, duration, size) => {
|
|
7
|
+
if (!cacheableTypes.includes(type)) {
|
|
8
|
+
return null;
|
|
9
|
+
}
|
|
10
|
+
if ((size === undefined || size === 0) && duration === 0) {
|
|
11
|
+
return MEMORY_KEY;
|
|
12
|
+
}
|
|
13
|
+
if (size === 0 && duration > 0) {
|
|
14
|
+
return DISK_KEY;
|
|
15
|
+
}
|
|
16
|
+
if (size === undefined) {
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
return NETWORK_KEY;
|
|
20
|
+
};
|
|
21
|
+
export const round = n => {
|
|
22
|
+
if (isNaN(n)) {
|
|
23
|
+
return 0;
|
|
24
|
+
}
|
|
25
|
+
return Math.round(n * 10000) / 10000;
|
|
26
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import Bowser from 'bowser-ultralight';
|
|
2
2
|
import { fg } from '@atlaskit/platform-feature-flags';
|
|
3
3
|
import { getLighthouseMetrics } from '../additional-payload';
|
|
4
|
+
import { CHRReporter } from '../assets';
|
|
4
5
|
import * as bundleEvalTiming from '../bundle-eval-timing';
|
|
5
6
|
import coinflip from '../coinflip';
|
|
6
7
|
import { REACT_UFO_VERSION } from '../common/constants';
|
|
@@ -298,6 +299,33 @@ function getSSRProperties(type) {
|
|
|
298
299
|
'ssr:featureFlags': getSSRFeatureFlags(type)
|
|
299
300
|
};
|
|
300
301
|
}
|
|
302
|
+
const getAssetsMetrics = (interaction, resourceTimings) => {
|
|
303
|
+
try {
|
|
304
|
+
const config = getConfig();
|
|
305
|
+
const {
|
|
306
|
+
type
|
|
307
|
+
} = interaction;
|
|
308
|
+
const isCHREnabled = fg('ufo_chr_config');
|
|
309
|
+
const allowedTypes = ['page_load', 'transition'];
|
|
310
|
+
const assetsClassification = config === null || config === void 0 ? void 0 : config.assetsClassification;
|
|
311
|
+
if (!isCHREnabled || !allowedTypes.includes(type) || !assetsClassification) {
|
|
312
|
+
// Skip if: FG disabled, not allowed type or assetsClassification isn't configured
|
|
313
|
+
return {};
|
|
314
|
+
}
|
|
315
|
+
const reporter = new CHRReporter();
|
|
316
|
+
const assets = reporter.get(resourceTimings, assetsClassification);
|
|
317
|
+
if (assets) {
|
|
318
|
+
// Only add assets in case it exists
|
|
319
|
+
return {
|
|
320
|
+
'event:assets': assets
|
|
321
|
+
};
|
|
322
|
+
}
|
|
323
|
+
return {};
|
|
324
|
+
} catch (error) {
|
|
325
|
+
// Skip CHR in case of error
|
|
326
|
+
return {};
|
|
327
|
+
}
|
|
328
|
+
};
|
|
301
329
|
const getBrowserMetadata = () => {
|
|
302
330
|
const data = {};
|
|
303
331
|
const now = new Date();
|
|
@@ -723,7 +751,7 @@ function createInteractionMetricsPayload(interaction, interactionId, experimenta
|
|
|
723
751
|
};
|
|
724
752
|
};
|
|
725
753
|
// Detailed payload. Page visibility = visible
|
|
726
|
-
const getDetailedInteractionMetrics =
|
|
754
|
+
const getDetailedInteractionMetrics = resourceTimings => {
|
|
727
755
|
if (experimental || window.__UFO_COMPACT_PAYLOAD__ || !isDetailedPayload) {
|
|
728
756
|
return {};
|
|
729
757
|
}
|
|
@@ -744,7 +772,7 @@ function createInteractionMetricsPayload(interaction, interactionId, experimenta
|
|
|
744
772
|
requestInfo: optimizeRequestInfo(interaction.requestInfo, start),
|
|
745
773
|
customTimings: optimizeCustomTimings(interaction.customTimings, start),
|
|
746
774
|
bundleEvalTimings: objectToArray(getBundleEvalTimings(start)),
|
|
747
|
-
resourceTimings: objectToArray(
|
|
775
|
+
resourceTimings: objectToArray(resourceTimings)
|
|
748
776
|
};
|
|
749
777
|
};
|
|
750
778
|
// Page load & detailed payload
|
|
@@ -765,6 +793,7 @@ function createInteractionMetricsPayload(interaction, interactionId, experimenta
|
|
|
765
793
|
regularTTAI = getTTAI(interaction);
|
|
766
794
|
}
|
|
767
795
|
const newUFOName = sanitizeUfoName(ufoName);
|
|
796
|
+
const resourceTimings = getResourceTimings(start, end);
|
|
768
797
|
const payload = {
|
|
769
798
|
actionSubject: 'experience',
|
|
770
799
|
action: 'measured',
|
|
@@ -789,6 +818,7 @@ function createInteractionMetricsPayload(interaction, interactionId, experimenta
|
|
|
789
818
|
// root
|
|
790
819
|
...getBrowserMetadata(),
|
|
791
820
|
...getSSRProperties(type),
|
|
821
|
+
...getAssetsMetrics(interaction, resourceTimings),
|
|
792
822
|
...getPPSMetrics(interaction),
|
|
793
823
|
...getPaintMetrics(type),
|
|
794
824
|
...getNavigationMetrics(type),
|
|
@@ -831,7 +861,7 @@ function createInteractionMetricsPayload(interaction, interactionId, experimenta
|
|
|
831
861
|
reactProfilerTimings: optimizeReactProfilerTimings(interaction.reactProfilerTimings, start),
|
|
832
862
|
...labelStack,
|
|
833
863
|
...getPageLoadInteractionMetrics(),
|
|
834
|
-
...getDetailedInteractionMetrics(),
|
|
864
|
+
...getDetailedInteractionMetrics(resourceTimings),
|
|
835
865
|
...getPageLoadDetailedInteractionMetrics(),
|
|
836
866
|
...getBm3TrackerTimings(interaction),
|
|
837
867
|
'metric:ttai': experimental ? regularTTAI || expTTAI : undefined,
|