@atlaskit/react-ufo 2.14.3 → 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 +20 -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 +42 -5
- package/dist/cjs/experience-trace-id-context/index.js +5 -1
- package/dist/cjs/segment/segment.js +7 -1
- package/dist/cjs/vc/vc-observer/heatmap/heatmap.js +264 -0
- package/dist/cjs/vc/vc-observer/index.js +119 -26
- package/dist/cjs/vc/vc-observer/revisions/ViewportUpdateClassifier.js +60 -0
- package/dist/cjs/vc/vc-observer/revisions/fy24_01.js +71 -0
- package/dist/cjs/vc/vc-observer/revisions/fy25_01.js +39 -0
- package/dist/cjs/vc/vc-observer/revisions/revisions.js +23 -0
- package/dist/cjs/vc/vc-observer/revisions/types.js +5 -0
- 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 +43 -3
- package/dist/es2019/experience-trace-id-context/index.js +4 -0
- package/dist/es2019/segment/segment.js +11 -3
- package/dist/es2019/vc/vc-observer/heatmap/heatmap.js +230 -0
- package/dist/es2019/vc/vc-observer/index.js +97 -3
- package/dist/es2019/vc/vc-observer/revisions/ViewportUpdateClassifier.js +41 -0
- package/dist/es2019/vc/vc-observer/revisions/fy24_01.js +50 -0
- package/dist/es2019/vc/vc-observer/revisions/fy25_01.js +21 -0
- package/dist/es2019/vc/vc-observer/revisions/revisions.js +19 -0
- package/dist/es2019/vc/vc-observer/revisions/types.js +1 -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 +42 -5
- package/dist/esm/experience-trace-id-context/index.js +4 -0
- package/dist/esm/segment/segment.js +7 -1
- package/dist/esm/vc/vc-observer/heatmap/heatmap.js +257 -0
- package/dist/esm/vc/vc-observer/index.js +119 -26
- package/dist/esm/vc/vc-observer/revisions/ViewportUpdateClassifier.js +53 -0
- package/dist/esm/vc/vc-observer/revisions/fy24_01.js +64 -0
- package/dist/esm/vc/vc-observer/revisions/fy25_01.js +32 -0
- package/dist/esm/vc/vc-observer/revisions/revisions.js +17 -0
- package/dist/esm/vc/vc-observer/revisions/types.js +1 -0
- 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/common/vc/types.d.ts +27 -8
- package/dist/types/config/index.d.ts +2 -1
- package/dist/types/create-payload/index.d.ts +11616 -0
- package/dist/types/experience-trace-id-context/index.d.ts +1 -0
- package/dist/types/resource-timing/index.d.ts +1 -1
- package/dist/types/vc/vc-observer/heatmap/heatmap.d.ts +72 -0
- package/dist/types/vc/vc-observer/index.d.ts +5 -1
- package/dist/types/vc/vc-observer/revisions/ViewportUpdateClassifier.d.ts +30 -0
- package/dist/types/vc/vc-observer/revisions/fy24_01.d.ts +13 -0
- package/dist/types/vc/vc-observer/revisions/fy25_01.d.ts +13 -0
- package/dist/types/vc/vc-observer/revisions/revisions.d.ts +2 -0
- package/dist/types/vc/vc-observer/revisions/types.d.ts +23 -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/common/vc/types.d.ts +27 -8
- 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/experience-trace-id-context/index.d.ts +1 -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 +72 -0
- package/dist/types-ts4.5/vc/vc-observer/index.d.ts +15 -1
- package/dist/types-ts4.5/vc/vc-observer/revisions/ViewportUpdateClassifier.d.ts +30 -0
- package/dist/types-ts4.5/vc/vc-observer/revisions/fy24_01.d.ts +13 -0
- package/dist/types-ts4.5/vc/vc-observer/revisions/fy25_01.d.ts +13 -0
- package/dist/types-ts4.5/vc/vc-observer/revisions/revisions.d.ts +2 -0
- package/dist/types-ts4.5/vc/vc-observer/revisions/types.d.ts +23 -0
- package/package.json +11 -2
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
2
|
+
import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
|
|
3
|
+
import _createClass from "@babel/runtime/helpers/createClass";
|
|
4
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
5
|
+
import { calculateTransferType, DISK_KEY, MEMORY_KEY, NETWORK_KEY, round } from './utils';
|
|
6
|
+
export var CHRSummary = /*#__PURE__*/function () {
|
|
7
|
+
function CHRSummary() {
|
|
8
|
+
_classCallCheck(this, CHRSummary);
|
|
9
|
+
_defineProperty(this, "bundles", _defineProperty(_defineProperty(_defineProperty({}, MEMORY_KEY, 0), DISK_KEY, 0), NETWORK_KEY, 0));
|
|
10
|
+
_defineProperty(this, "bundlesCount", 0);
|
|
11
|
+
_defineProperty(this, "size", _defineProperty(_defineProperty(_defineProperty({}, MEMORY_KEY, 0), DISK_KEY, 0), NETWORK_KEY, 0));
|
|
12
|
+
_defineProperty(this, "sizeTotal", 0);
|
|
13
|
+
}
|
|
14
|
+
return _createClass(CHRSummary, [{
|
|
15
|
+
key: "add",
|
|
16
|
+
value: function add(asset) {
|
|
17
|
+
var size = 'size' in asset ? asset.size : undefined;
|
|
18
|
+
var encodedSize = 'encodedSize' in asset ? Number(asset.encodedSize) : 0;
|
|
19
|
+
var type = calculateTransferType(asset.type, asset.duration, size);
|
|
20
|
+
if (type === null) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
this.bundles[type] += 1;
|
|
24
|
+
this.bundlesCount += 1;
|
|
25
|
+
this.size[type] += encodedSize;
|
|
26
|
+
this.sizeTotal += encodedSize;
|
|
27
|
+
}
|
|
28
|
+
}], [{
|
|
29
|
+
key: "makePayload",
|
|
30
|
+
value: function makePayload(summary) {
|
|
31
|
+
var size = summary.size,
|
|
32
|
+
bundlesCount = summary.bundlesCount,
|
|
33
|
+
sizeTotal = summary.sizeTotal;
|
|
34
|
+
var cachedSize = size[MEMORY_KEY] + size[DISK_KEY];
|
|
35
|
+
var sizeRatio = round(cachedSize / summary.sizeTotal);
|
|
36
|
+
return {
|
|
37
|
+
size: sizeTotal,
|
|
38
|
+
chr: sizeRatio,
|
|
39
|
+
count: bundlesCount
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
}]);
|
|
43
|
+
}();
|
|
44
|
+
export var CHRReporter = /*#__PURE__*/function () {
|
|
45
|
+
function CHRReporter() {
|
|
46
|
+
_classCallCheck(this, CHRReporter);
|
|
47
|
+
_defineProperty(this, "all", new CHRSummary());
|
|
48
|
+
_defineProperty(this, "allAtlassian", new CHRSummary());
|
|
49
|
+
_defineProperty(this, "preloaded", new CHRSummary());
|
|
50
|
+
}
|
|
51
|
+
return _createClass(CHRReporter, [{
|
|
52
|
+
key: "get",
|
|
53
|
+
value: function get(resourceTimings, assetsClassification) {
|
|
54
|
+
var _this = this;
|
|
55
|
+
try {
|
|
56
|
+
Object.entries(resourceTimings).map(function (_ref) {
|
|
57
|
+
var _ref2 = _slicedToArray(_ref, 2),
|
|
58
|
+
label = _ref2[0],
|
|
59
|
+
entry = _ref2[1];
|
|
60
|
+
if (assetsClassification.all) {
|
|
61
|
+
_this.all.add(entry);
|
|
62
|
+
}
|
|
63
|
+
if (assetsClassification.allAtlassian({
|
|
64
|
+
label: label,
|
|
65
|
+
entry: entry
|
|
66
|
+
})) {
|
|
67
|
+
_this.allAtlassian.add(entry);
|
|
68
|
+
}
|
|
69
|
+
if (assetsClassification.preloaded({
|
|
70
|
+
label: label,
|
|
71
|
+
entry: entry
|
|
72
|
+
})) {
|
|
73
|
+
_this.preloaded.add(entry);
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
if (this.all.bundlesCount === 0) {
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
all: CHRSummary.makePayload(this.all),
|
|
81
|
+
allAtlassian: CHRSummary.makePayload(this.allAtlassian),
|
|
82
|
+
preloaded: CHRSummary.makePayload(this.preloaded)
|
|
83
|
+
};
|
|
84
|
+
} catch (error) {
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}]);
|
|
89
|
+
}();
|
|
@@ -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 var cacheableTypes = ['script', 'link'];
|
|
3
|
+
export var MEMORY_KEY = 'mem';
|
|
4
|
+
export var DISK_KEY = 'disk';
|
|
5
|
+
export var NETWORK_KEY = 'net';
|
|
6
|
+
export var calculateTransferType = function 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 var round = function round(n) {
|
|
22
|
+
if (isNaN(n)) {
|
|
23
|
+
return 0;
|
|
24
|
+
}
|
|
25
|
+
return Math.round(n * 10000) / 10000;
|
|
26
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -11,6 +11,7 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
|
|
|
11
11
|
import Bowser from 'bowser-ultralight';
|
|
12
12
|
import { fg } from '@atlaskit/platform-feature-flags';
|
|
13
13
|
import { getLighthouseMetrics } from '../additional-payload';
|
|
14
|
+
import { CHRReporter } from '../assets';
|
|
14
15
|
import * as bundleEvalTiming from '../bundle-eval-timing';
|
|
15
16
|
import coinflip from '../coinflip';
|
|
16
17
|
import { REACT_UFO_VERSION } from '../common/constants';
|
|
@@ -211,6 +212,16 @@ var getVCMetrics = function getVCMetrics(interaction) {
|
|
|
211
212
|
if (interactionStatus.originalInteractionStatus !== 'SUCCEEDED' || pageVisibilityUpToTTAI !== 'visible') {
|
|
212
213
|
return result;
|
|
213
214
|
}
|
|
215
|
+
if (fg('ufo_vc_multiheatmap')) {
|
|
216
|
+
var _result;
|
|
217
|
+
(_result = result["".concat(prefix, ":vc:rev")]) === null || _result === void 0 || _result.forEach(function (element) {
|
|
218
|
+
var _element$vcDetails;
|
|
219
|
+
if ((_element$vcDetails = element.vcDetails) !== null && _element$vcDetails !== void 0 && (_element$vcDetails = _element$vcDetails['90']) !== null && _element$vcDetails !== void 0 && _element$vcDetails.t) {
|
|
220
|
+
var _element$vcDetails$;
|
|
221
|
+
element['metric:vc90'] = (_element$vcDetails$ = element.vcDetails['90']) === null || _element$vcDetails$ === void 0 ? void 0 : _element$vcDetails$.t;
|
|
222
|
+
}
|
|
223
|
+
});
|
|
224
|
+
}
|
|
214
225
|
return _objectSpread(_objectSpread({}, result), {}, {
|
|
215
226
|
'metric:vc90': VC['90']
|
|
216
227
|
});
|
|
@@ -294,6 +305,31 @@ function getSSRProperties(type) {
|
|
|
294
305
|
'ssr:featureFlags': getSSRFeatureFlags(type)
|
|
295
306
|
};
|
|
296
307
|
}
|
|
308
|
+
var getAssetsMetrics = function getAssetsMetrics(interaction, resourceTimings) {
|
|
309
|
+
try {
|
|
310
|
+
var config = getConfig();
|
|
311
|
+
var type = interaction.type;
|
|
312
|
+
var isCHREnabled = fg('ufo_chr_config');
|
|
313
|
+
var allowedTypes = ['page_load', 'transition'];
|
|
314
|
+
var assetsClassification = config === null || config === void 0 ? void 0 : config.assetsClassification;
|
|
315
|
+
if (!isCHREnabled || !allowedTypes.includes(type) || !assetsClassification) {
|
|
316
|
+
// Skip if: FG disabled, not allowed type or assetsClassification isn't configured
|
|
317
|
+
return {};
|
|
318
|
+
}
|
|
319
|
+
var reporter = new CHRReporter();
|
|
320
|
+
var assets = reporter.get(resourceTimings, assetsClassification);
|
|
321
|
+
if (assets) {
|
|
322
|
+
// Only add assets in case it exists
|
|
323
|
+
return {
|
|
324
|
+
'event:assets': assets
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
return {};
|
|
328
|
+
} catch (error) {
|
|
329
|
+
// Skip CHR in case of error
|
|
330
|
+
return {};
|
|
331
|
+
}
|
|
332
|
+
};
|
|
297
333
|
var getBrowserMetadata = function getBrowserMetadata() {
|
|
298
334
|
var data = {};
|
|
299
335
|
var now = new Date();
|
|
@@ -708,7 +744,7 @@ function createInteractionMetricsPayload(interaction, interactionId, experimenta
|
|
|
708
744
|
});
|
|
709
745
|
};
|
|
710
746
|
// Detailed payload. Page visibility = visible
|
|
711
|
-
var getDetailedInteractionMetrics = function getDetailedInteractionMetrics() {
|
|
747
|
+
var getDetailedInteractionMetrics = function getDetailedInteractionMetrics(resourceTimings) {
|
|
712
748
|
if (experimental || window.__UFO_COMPACT_PAYLOAD__ || !isDetailedPayload) {
|
|
713
749
|
return {};
|
|
714
750
|
}
|
|
@@ -729,7 +765,7 @@ function createInteractionMetricsPayload(interaction, interactionId, experimenta
|
|
|
729
765
|
requestInfo: optimizeRequestInfo(interaction.requestInfo, start),
|
|
730
766
|
customTimings: optimizeCustomTimings(interaction.customTimings, start),
|
|
731
767
|
bundleEvalTimings: objectToArray(getBundleEvalTimings(start)),
|
|
732
|
-
resourceTimings: objectToArray(
|
|
768
|
+
resourceTimings: objectToArray(resourceTimings)
|
|
733
769
|
};
|
|
734
770
|
};
|
|
735
771
|
// Page load & detailed payload
|
|
@@ -750,6 +786,7 @@ function createInteractionMetricsPayload(interaction, interactionId, experimenta
|
|
|
750
786
|
regularTTAI = getTTAI(interaction);
|
|
751
787
|
}
|
|
752
788
|
var newUFOName = sanitizeUfoName(ufoName);
|
|
789
|
+
var resourceTimings = getResourceTimings(start, end);
|
|
753
790
|
var payload = {
|
|
754
791
|
actionSubject: 'experience',
|
|
755
792
|
action: 'measured',
|
|
@@ -757,7 +794,7 @@ function createInteractionMetricsPayload(interaction, interactionId, experimenta
|
|
|
757
794
|
source: 'measured',
|
|
758
795
|
tags: ['observability'],
|
|
759
796
|
attributes: {
|
|
760
|
-
properties: _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
|
|
797
|
+
properties: _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
|
|
761
798
|
// basic
|
|
762
799
|
'event:hostname': ((_window$location = window.location) === null || _window$location === void 0 ? void 0 : _window$location.hostname) || 'unknown',
|
|
763
800
|
'event:product': config.product,
|
|
@@ -771,7 +808,7 @@ function createInteractionMetricsPayload(interaction, interactionId, experimenta
|
|
|
771
808
|
'event:region': config.region || 'unknown',
|
|
772
809
|
'experience:key': experimental ? 'custom.experimental-interaction-metrics' : 'custom.interaction-metrics',
|
|
773
810
|
'experience:name': newUFOName
|
|
774
|
-
}, getBrowserMetadata()), getSSRProperties(type)), getPPSMetrics(interaction)), getPaintMetrics(type)), getNavigationMetrics(type)), getVCMetrics(interaction)), experimental ? getExperimentalVCMetrics(interaction) : undefined), (_config$additionalPay = config.additionalPayloadData) === null || _config$additionalPay === void 0 ? void 0 : _config$additionalPay.call(config, interaction)), getTracingContextData(interaction)), getStylesheetMetrics()), getErrorCounts(interaction)), {}, {
|
|
811
|
+
}, getBrowserMetadata()), getSSRProperties(type)), getAssetsMetrics(interaction, resourceTimings)), getPPSMetrics(interaction)), getPaintMetrics(type)), getNavigationMetrics(type)), getVCMetrics(interaction)), experimental ? getExperimentalVCMetrics(interaction) : undefined), (_config$additionalPay = config.additionalPayloadData) === null || _config$additionalPay === void 0 ? void 0 : _config$additionalPay.call(config, interaction)), getTracingContextData(interaction)), getStylesheetMetrics()), getErrorCounts(interaction)), {}, {
|
|
775
812
|
interactionMetrics: _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
|
|
776
813
|
namePrefix: config.namePrefix || '',
|
|
777
814
|
segmentPrefix: config.segmentPrefix || '',
|
|
@@ -803,7 +840,7 @@ function createInteractionMetricsPayload(interaction, interactionId, experimenta
|
|
|
803
840
|
marks: optimizeMarks(interaction.marks),
|
|
804
841
|
customData: optimizeCustomData(interaction),
|
|
805
842
|
reactProfilerTimings: optimizeReactProfilerTimings(interaction.reactProfilerTimings, start)
|
|
806
|
-
}, labelStack), getPageLoadInteractionMetrics()), getDetailedInteractionMetrics()), getPageLoadDetailedInteractionMetrics()), getBm3TrackerTimings(interaction)), {}, {
|
|
843
|
+
}, labelStack), getPageLoadInteractionMetrics()), getDetailedInteractionMetrics(resourceTimings)), getPageLoadDetailedInteractionMetrics()), getBm3TrackerTimings(interaction)), {}, {
|
|
807
844
|
'metric:ttai': experimental ? regularTTAI || expTTAI : undefined,
|
|
808
845
|
'metric:experimental:ttai': expTTAI
|
|
809
846
|
}),
|
|
@@ -31,4 +31,8 @@ export var getActiveTraceHttpRequestHeaders = function getActiveTraceHttpRequest
|
|
|
31
31
|
traceId = _state$context.traceId,
|
|
32
32
|
spanId = _state$context.spanId;
|
|
33
33
|
return makeTraceHttpRequestHeaders(traceId, spanId);
|
|
34
|
+
};
|
|
35
|
+
export var getActiveTraceAsQueryParams = function getActiveTraceAsQueryParams(_url) {
|
|
36
|
+
var traceHeaders = getActiveTraceHttpRequestHeaders(_url);
|
|
37
|
+
return traceHeaders ? new URLSearchParams(traceHeaders).toString().toLowerCase() : null;
|
|
34
38
|
};
|
|
@@ -5,6 +5,7 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
|
|
|
5
5
|
import React, { lazy, Profiler, Suspense, useCallback, useContext, useEffect, useMemo, useRef } from 'react';
|
|
6
6
|
import { unstable_NormalPriority as NormalPriority, unstable_scheduleCallback as scheduleCallback } from 'scheduler';
|
|
7
7
|
import { v4 as createUUID } from 'uuid';
|
|
8
|
+
import { fg } from '@atlaskit/platform-feature-flags';
|
|
8
9
|
import coinflip from '../coinflip';
|
|
9
10
|
import { getConfig, getInteractionRate } from '../config';
|
|
10
11
|
import { getActiveTrace, setInteractionActiveTrace } from '../experience-trace-id-context';
|
|
@@ -42,7 +43,9 @@ export default function UFOSegment(_ref) {
|
|
|
42
43
|
}, [parentContext, segmentName, segmentId]);
|
|
43
44
|
var interactionId = useContext(UFOInteractionIDContext);
|
|
44
45
|
var interactionContext = useMemo(function () {
|
|
45
|
-
|
|
46
|
+
if (!fg('platform-ufo-add-segment-use-effect')) {
|
|
47
|
+
addSegment(labelStack);
|
|
48
|
+
}
|
|
46
49
|
var lastCompleteEndTime = 0;
|
|
47
50
|
function complete() {
|
|
48
51
|
var endTime = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : performance.now();
|
|
@@ -221,6 +224,9 @@ export default function UFOSegment(_ref) {
|
|
|
221
224
|
}
|
|
222
225
|
}, [interactionContext]);
|
|
223
226
|
useEffect(function () {
|
|
227
|
+
if (fg('platform-ufo-add-segment-use-effect')) {
|
|
228
|
+
addSegment(labelStack);
|
|
229
|
+
}
|
|
224
230
|
return function () {
|
|
225
231
|
removeSegment(labelStack);
|
|
226
232
|
};
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
2
|
+
import _objectDestructuringEmpty from "@babel/runtime/helpers/objectDestructuringEmpty";
|
|
3
|
+
import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
|
|
4
|
+
import _createClass from "@babel/runtime/helpers/createClass";
|
|
5
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
6
|
+
var UNUSED_SECTOR = 0;
|
|
7
|
+
export var MultiRevisionHeatmap = /*#__PURE__*/function () {
|
|
8
|
+
function MultiRevisionHeatmap(_ref) {
|
|
9
|
+
var _this = this;
|
|
10
|
+
var viewport = _ref.viewport,
|
|
11
|
+
revisions = _ref.revisions,
|
|
12
|
+
arraySize = _ref.arraySize,
|
|
13
|
+
devToolsEnabled = _ref.devToolsEnabled;
|
|
14
|
+
_classCallCheck(this, MultiRevisionHeatmap);
|
|
15
|
+
_defineProperty(this, "arraySize", {
|
|
16
|
+
w: 200,
|
|
17
|
+
h: 200
|
|
18
|
+
});
|
|
19
|
+
_defineProperty(this, "mapPixelsToHeatmap", function (left, top, width, height) {
|
|
20
|
+
var _this$viewport = _this.viewport,
|
|
21
|
+
w = _this$viewport.w,
|
|
22
|
+
h = _this$viewport.h;
|
|
23
|
+
var l = Math.floor(left / w * _this.arraySize.w);
|
|
24
|
+
var t = Math.floor(top / h * _this.arraySize.h);
|
|
25
|
+
var r = Math.ceil((left + width) / w * _this.arraySize.w);
|
|
26
|
+
var b = Math.ceil((top + height) / h * _this.arraySize.h);
|
|
27
|
+
|
|
28
|
+
// correct values to min - 0, max - arraySize
|
|
29
|
+
var result = {
|
|
30
|
+
l: Math.max(0, l),
|
|
31
|
+
t: Math.max(0, t),
|
|
32
|
+
r: Math.min(_this.arraySize.w, r),
|
|
33
|
+
b: Math.min(_this.arraySize.h, b)
|
|
34
|
+
};
|
|
35
|
+
return result;
|
|
36
|
+
});
|
|
37
|
+
_defineProperty(this, "getElementRatio", function (mappedValues) {
|
|
38
|
+
var r = mappedValues.r,
|
|
39
|
+
l = mappedValues.l,
|
|
40
|
+
b = mappedValues.b,
|
|
41
|
+
t = mappedValues.t;
|
|
42
|
+
return (r - l) * (b - t) / (_this.arraySize.w * _this.arraySize.h);
|
|
43
|
+
});
|
|
44
|
+
this.viewport = viewport;
|
|
45
|
+
this.revisions = revisions;
|
|
46
|
+
if (arraySize) {
|
|
47
|
+
this.arraySize = arraySize;
|
|
48
|
+
}
|
|
49
|
+
this.heatmaps = new Array(revisions.length);
|
|
50
|
+
this.componentsLogs = new Array(revisions.length);
|
|
51
|
+
this.vcRatios = new Array(revisions.length);
|
|
52
|
+
this.devToolsEnabled = devToolsEnabled || false;
|
|
53
|
+
revisions.forEach(function (_ref2, i) {
|
|
54
|
+
_objectDestructuringEmpty(_ref2);
|
|
55
|
+
_this.heatmaps[i] = _this.getCleanHeatmap();
|
|
56
|
+
_this.componentsLogs[i] = {};
|
|
57
|
+
_this.vcRatios[i] = {};
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
return _createClass(MultiRevisionHeatmap, [{
|
|
61
|
+
key: "handleUpdate",
|
|
62
|
+
value: function handleUpdate(_ref3) {
|
|
63
|
+
var _this2 = this;
|
|
64
|
+
var time = _ref3.time,
|
|
65
|
+
type = _ref3.type,
|
|
66
|
+
classification = _ref3.classification,
|
|
67
|
+
intersectionRect = _ref3.intersectionRect,
|
|
68
|
+
element = _ref3.element,
|
|
69
|
+
targetName = _ref3.targetName,
|
|
70
|
+
ignoreReason = _ref3.ignoreReason,
|
|
71
|
+
onError = _ref3.onError;
|
|
72
|
+
var mappedValues = this.mapPixelsToHeatmap(intersectionRect.left, intersectionRect.top, intersectionRect.width, intersectionRect.height);
|
|
73
|
+
var result = this.applyChangesToHeatMap(mappedValues, time, classification);
|
|
74
|
+
if (result !== true) {
|
|
75
|
+
onError(result);
|
|
76
|
+
}
|
|
77
|
+
var componentRatio = this.getElementRatio(mappedValues);
|
|
78
|
+
this.revisions.forEach(function (_, i) {
|
|
79
|
+
if (classification[i]) {
|
|
80
|
+
_this2.vcRatios[i][targetName] = componentRatio;
|
|
81
|
+
}
|
|
82
|
+
if (!_this2.componentsLogs[i][time]) {
|
|
83
|
+
_this2.componentsLogs[i][time] = [];
|
|
84
|
+
}
|
|
85
|
+
_this2.componentsLogs[i][time].push({
|
|
86
|
+
__debug__element: _this2.devToolsEnabled ? new WeakRef(element) : null,
|
|
87
|
+
intersectionRect: intersectionRect,
|
|
88
|
+
targetName: targetName,
|
|
89
|
+
ignoreReason: ignoreReason
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
}, {
|
|
94
|
+
key: "getData",
|
|
95
|
+
value: function getData() {
|
|
96
|
+
return {
|
|
97
|
+
heatmaps: this.heatmaps
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
}, {
|
|
101
|
+
key: "getPayloadShapedData",
|
|
102
|
+
value: function getPayloadShapedData(args) {
|
|
103
|
+
var result = this.processData(args);
|
|
104
|
+
var payload = this.revisions.map(function (rev, i) {
|
|
105
|
+
var vcDetails = {};
|
|
106
|
+
args.VCParts.forEach(function (VCPart) {
|
|
107
|
+
vcDetails[VCPart] = {
|
|
108
|
+
t: result[i].VC[VCPart] || 0,
|
|
109
|
+
e: Array.from(result[i].VCBox[VCPart] || [])
|
|
110
|
+
};
|
|
111
|
+
});
|
|
112
|
+
return {
|
|
113
|
+
revision: rev.name,
|
|
114
|
+
vcDetails: vcDetails,
|
|
115
|
+
clean: args.clean,
|
|
116
|
+
'metric:vc90': null // will be set or not in the payload generator
|
|
117
|
+
};
|
|
118
|
+
});
|
|
119
|
+
return payload;
|
|
120
|
+
}
|
|
121
|
+
}, {
|
|
122
|
+
key: "processData",
|
|
123
|
+
value: function processData(_ref4) {
|
|
124
|
+
var _this3 = this;
|
|
125
|
+
var VCParts = _ref4.VCParts,
|
|
126
|
+
VCCalculationMethods = _ref4.VCCalculationMethods,
|
|
127
|
+
_ref4$ssr = _ref4.ssr,
|
|
128
|
+
ssr = _ref4$ssr === void 0 ? UNUSED_SECTOR : _ref4$ssr;
|
|
129
|
+
return this.heatmaps.map(function (heatmap, i) {
|
|
130
|
+
var lastUpdate = {};
|
|
131
|
+
var totalPainted = 0;
|
|
132
|
+
var componentsLog = _this3.componentsLogs[i];
|
|
133
|
+
if (ssr !== UNUSED_SECTOR) {
|
|
134
|
+
var _window$document;
|
|
135
|
+
var element = {
|
|
136
|
+
__debug__element: new WeakRef((_window$document = window.document) === null || _window$document === void 0 ? void 0 : _window$document.body),
|
|
137
|
+
intersectionRect: {
|
|
138
|
+
top: 0,
|
|
139
|
+
left: 0,
|
|
140
|
+
right: 0,
|
|
141
|
+
bottom: 0,
|
|
142
|
+
x: 0,
|
|
143
|
+
y: 0,
|
|
144
|
+
width: _this3.viewport.w,
|
|
145
|
+
height: _this3.viewport.h,
|
|
146
|
+
toJSON: function toJSON() {
|
|
147
|
+
return {};
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
targetName: 'SSR'
|
|
151
|
+
};
|
|
152
|
+
if (!componentsLog[ssr]) {
|
|
153
|
+
componentsLog[ssr] = [];
|
|
154
|
+
}
|
|
155
|
+
componentsLog[ssr].push(element);
|
|
156
|
+
}
|
|
157
|
+
for (var _i = 0; _i < heatmap.length; _i++) {
|
|
158
|
+
var rounded = Math.floor(heatmap[_i] === UNUSED_SECTOR && ssr !== UNUSED_SECTOR ? ssr : heatmap[_i]);
|
|
159
|
+
totalPainted += rounded !== UNUSED_SECTOR ? 1 : 0;
|
|
160
|
+
if (rounded !== UNUSED_SECTOR) {
|
|
161
|
+
lastUpdate[rounded] = lastUpdate[rounded] ? lastUpdate[rounded] + 1 : 1;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
var entries = Object.entries(lastUpdate).map(function (a) {
|
|
165
|
+
return [parseInt(a[0], 10), a[1]];
|
|
166
|
+
}).sort(function (a, b) {
|
|
167
|
+
return a[0] > b[0] ? 1 : -1;
|
|
168
|
+
});
|
|
169
|
+
var _VCCalculationMethods = VCCalculationMethods[i]({
|
|
170
|
+
VCParts: VCParts,
|
|
171
|
+
componentsLog: componentsLog,
|
|
172
|
+
entries: entries,
|
|
173
|
+
totalPainted: totalPainted
|
|
174
|
+
}),
|
|
175
|
+
VC = _VCCalculationMethods.VC,
|
|
176
|
+
VCBox = _VCCalculationMethods.VCBox;
|
|
177
|
+
var VCEntries = entries.reduce(function (acc, _ref5, i) {
|
|
178
|
+
var _acc$abs, _componentsLog$timest;
|
|
179
|
+
var _ref6 = _slicedToArray(_ref5, 2),
|
|
180
|
+
timestamp = _ref6[0],
|
|
181
|
+
entryPainted = _ref6[1];
|
|
182
|
+
var currentlyPainted = entryPainted + (((_acc$abs = acc.abs[i - 1]) === null || _acc$abs === void 0 ? void 0 : _acc$abs[1]) || 0);
|
|
183
|
+
var currentlyPaintedRatio = Math.round(currentlyPainted / totalPainted * 1000) / 10;
|
|
184
|
+
var logEntry = (_componentsLog$timest = componentsLog[timestamp]) === null || _componentsLog$timest === void 0 ? void 0 : _componentsLog$timest.map(function (v) {
|
|
185
|
+
return v.targetName;
|
|
186
|
+
});
|
|
187
|
+
acc.abs.push([timestamp, currentlyPainted]);
|
|
188
|
+
acc.rel.push({
|
|
189
|
+
time: timestamp,
|
|
190
|
+
vc: currentlyPaintedRatio,
|
|
191
|
+
elements: logEntry
|
|
192
|
+
});
|
|
193
|
+
return acc;
|
|
194
|
+
}, {
|
|
195
|
+
abs: [],
|
|
196
|
+
rel: []
|
|
197
|
+
});
|
|
198
|
+
return {
|
|
199
|
+
VC: VC,
|
|
200
|
+
VCBox: VCBox,
|
|
201
|
+
VCEntries: VCEntries,
|
|
202
|
+
totalPainted: totalPainted
|
|
203
|
+
};
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
}, {
|
|
207
|
+
key: "applyChangesToHeatMap",
|
|
208
|
+
value: function applyChangesToHeatMap(a, time, classification) {
|
|
209
|
+
var l = a.l,
|
|
210
|
+
t = a.t,
|
|
211
|
+
r = a.r,
|
|
212
|
+
b = a.b;
|
|
213
|
+
var size = classification.length;
|
|
214
|
+
for (var row = t; row < b; row++) {
|
|
215
|
+
if (this.heatmaps[0][row] === undefined) {
|
|
216
|
+
try {
|
|
217
|
+
return {
|
|
218
|
+
error: "index - ".concat(row),
|
|
219
|
+
time: time
|
|
220
|
+
};
|
|
221
|
+
} catch (e) {
|
|
222
|
+
return {
|
|
223
|
+
error: 'row error',
|
|
224
|
+
time: time
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
} else {
|
|
228
|
+
for (var heatmapIndex = 0; heatmapIndex < size; heatmapIndex++) {
|
|
229
|
+
if (classification[heatmapIndex]) {
|
|
230
|
+
this.heatmaps[heatmapIndex].fill(time, this.getIndex(l, row), this.getIndex(r, row));
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
return true;
|
|
236
|
+
}
|
|
237
|
+
}, {
|
|
238
|
+
key: "getIndex",
|
|
239
|
+
value: function getIndex(x, y) {
|
|
240
|
+
return x + this.arraySize.w * y;
|
|
241
|
+
}
|
|
242
|
+
}, {
|
|
243
|
+
key: "getCleanHeatmap",
|
|
244
|
+
value: function getCleanHeatmap() {
|
|
245
|
+
return new Uint32Array(this.arraySize.w * this.arraySize.h);
|
|
246
|
+
}
|
|
247
|
+
}], [{
|
|
248
|
+
key: "makeVCReturnObj",
|
|
249
|
+
value: function makeVCReturnObj(VCParts) {
|
|
250
|
+
var vc = {};
|
|
251
|
+
VCParts.forEach(function (v) {
|
|
252
|
+
vc[v] = null;
|
|
253
|
+
});
|
|
254
|
+
return vc;
|
|
255
|
+
}
|
|
256
|
+
}]);
|
|
257
|
+
}();
|