@atlaskit/react-ufo 3.3.2 → 3.3.3
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/create-payload/index.js +43 -15
- package/dist/cjs/interaction-metrics-init/index.js +11 -9
- package/dist/cjs/vc/index.js +6 -2
- package/dist/cjs/vc/vc-observer-new/get-element-name.js +19 -6
- package/dist/cjs/vc/vc-observer-new/index.js +6 -3
- package/dist/cjs/vc/vc-observer-new/metric-calculator/abstract-base-vc-calculator.js +4 -2
- package/dist/cjs/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/canvas-pixel.js +10 -11
- package/dist/cjs/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/index.js +23 -30
- package/dist/cjs/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/index.js +7 -7
- package/dist/cjs/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/index.js +3 -3
- package/dist/cjs/vc/vc-observer-new/window-event-observer/index.js +5 -1
- package/dist/es2019/create-payload/index.js +3 -2
- package/dist/es2019/interaction-metrics-init/index.js +11 -9
- package/dist/es2019/vc/index.js +6 -2
- package/dist/es2019/vc/vc-observer-new/get-element-name.js +19 -6
- package/dist/es2019/vc/vc-observer-new/index.js +7 -3
- package/dist/es2019/vc/vc-observer-new/metric-calculator/abstract-base-vc-calculator.js +4 -0
- package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/canvas-pixel.js +1 -2
- package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/index.js +15 -12
- package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/index.js +5 -4
- package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/index.js +3 -2
- package/dist/es2019/vc/vc-observer-new/window-event-observer/index.js +5 -1
- package/dist/esm/create-payload/index.js +43 -15
- package/dist/esm/interaction-metrics-init/index.js +11 -9
- package/dist/esm/vc/index.js +6 -2
- package/dist/esm/vc/vc-observer-new/get-element-name.js +19 -6
- package/dist/esm/vc/vc-observer-new/index.js +6 -3
- package/dist/esm/vc/vc-observer-new/metric-calculator/abstract-base-vc-calculator.js +4 -2
- package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/canvas-pixel.js +10 -11
- package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/index.js +23 -30
- package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/index.js +7 -7
- package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/index.js +3 -3
- package/dist/esm/vc/vc-observer-new/window-event-observer/index.js +5 -1
- package/dist/types/config/index.d.ts +1 -0
- package/dist/types/create-payload/index.d.ts +1 -1
- package/dist/types/vc/vc-observer-new/index.d.ts +3 -2
- package/dist/types/vc/vc-observer-new/metric-calculator/abstract-base-vc-calculator.d.ts +1 -1
- package/dist/types/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/index.d.ts +2 -2
- package/dist/types/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/index.d.ts +2 -1
- package/dist/types/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/index.d.ts +2 -1
- package/dist/types/vc/vc-observer-new/metric-calculator/percentile-calc/types.d.ts +2 -0
- package/dist/types/vc/vc-observer-new/metric-calculator/types.d.ts +2 -0
- package/dist/types-ts4.5/config/index.d.ts +1 -0
- package/dist/types-ts4.5/create-payload/index.d.ts +1 -1
- package/dist/types-ts4.5/vc/vc-observer-new/index.d.ts +3 -2
- package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/abstract-base-vc-calculator.d.ts +1 -1
- package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/index.d.ts +2 -2
- package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/index.d.ts +2 -1
- package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/index.d.ts +2 -1
- package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/percentile-calc/types.d.ts +2 -0
- package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/types.d.ts +2 -0
- package/package.json +2 -2
|
@@ -14,7 +14,6 @@ const DEFAULT_SELECTOR_CONFIG = {
|
|
|
14
14
|
export default class VCObserverNew {
|
|
15
15
|
constructor(config) {
|
|
16
16
|
var _config$selectorConfi;
|
|
17
|
-
_defineProperty(this, "startTime", 0);
|
|
18
17
|
_defineProperty(this, "viewportObserver", null);
|
|
19
18
|
_defineProperty(this, "windowEventObserver", null);
|
|
20
19
|
this.entriesTimeline = new EntriesTimeline();
|
|
@@ -63,10 +62,13 @@ export default class VCObserverNew {
|
|
|
63
62
|
}
|
|
64
63
|
});
|
|
65
64
|
}
|
|
66
|
-
start(
|
|
65
|
+
start({
|
|
66
|
+
startTime
|
|
67
|
+
}) {
|
|
67
68
|
var _this$viewportObserve, _this$windowEventObse;
|
|
68
69
|
(_this$viewportObserve = this.viewportObserver) === null || _this$viewportObserve === void 0 ? void 0 : _this$viewportObserve.start();
|
|
69
70
|
(_this$windowEventObse = this.windowEventObserver) === null || _this$windowEventObse === void 0 ? void 0 : _this$windowEventObse.start();
|
|
71
|
+
this.entriesTimeline.clear();
|
|
70
72
|
}
|
|
71
73
|
stop() {
|
|
72
74
|
var _this$viewportObserve2, _this$windowEventObse2;
|
|
@@ -85,7 +87,9 @@ export default class VCObserverNew {
|
|
|
85
87
|
stop
|
|
86
88
|
});
|
|
87
89
|
const fy25_03 = await calculator_fy25_03.calculate({
|
|
88
|
-
orderedEntries
|
|
90
|
+
orderedEntries,
|
|
91
|
+
startTime: start,
|
|
92
|
+
stopTime: stop
|
|
89
93
|
});
|
|
90
94
|
if (fy25_03) {
|
|
91
95
|
results.push(fy25_03);
|
|
@@ -6,6 +6,8 @@ export default class AbstractVCCalculatorBase {
|
|
|
6
6
|
this.revisionNo = revisionNo;
|
|
7
7
|
}
|
|
8
8
|
async calculate({
|
|
9
|
+
startTime,
|
|
10
|
+
stopTime,
|
|
9
11
|
orderedEntries
|
|
10
12
|
}) {
|
|
11
13
|
var _vcDetails$90$t, _vcDetails$;
|
|
@@ -25,6 +27,8 @@ export default class AbstractVCCalculatorBase {
|
|
|
25
27
|
width: getViewportWidth(),
|
|
26
28
|
height: getViewportHeight()
|
|
27
29
|
},
|
|
30
|
+
startTime,
|
|
31
|
+
stopTime,
|
|
28
32
|
orderedEntries: filteredEntries,
|
|
29
33
|
percentiles: [25, 50, 75, 80, 85, 90, 95, 98, 99]
|
|
30
34
|
});
|
|
@@ -172,7 +172,6 @@ export function getRGBComponents(n) {
|
|
|
172
172
|
*/
|
|
173
173
|
export async function calculateDrawnPixelsRaw(imageData, scaleFactor, arraySize) {
|
|
174
174
|
const data = imageData.data;
|
|
175
|
-
const scaleCompensation = Math.round(1 / (scaleFactor * scaleFactor));
|
|
176
175
|
const arr = new Uint32Array(arraySize);
|
|
177
176
|
for (let i = 0; i < data.length; i += 4) {
|
|
178
177
|
// Check alpha
|
|
@@ -184,7 +183,7 @@ export async function calculateDrawnPixelsRaw(imageData, scaleFactor, arraySize)
|
|
|
184
183
|
// The | operator combines all bits together
|
|
185
184
|
const color = data[i] << 16 | data[i + 1] << 8 | data[i + 2];
|
|
186
185
|
const colorIndex = color - 1;
|
|
187
|
-
arr[colorIndex] = (arr[colorIndex] || 0) +
|
|
186
|
+
arr[colorIndex] = (arr[colorIndex] || 0) + 1;
|
|
188
187
|
}
|
|
189
188
|
if (i % 10000 === 0) {
|
|
190
189
|
await taskYield();
|
package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/index.js
CHANGED
|
@@ -3,7 +3,8 @@ import { ViewportCanvas } from './canvas-pixel';
|
|
|
3
3
|
export default async function calculateTTVCPercentiles({
|
|
4
4
|
viewport,
|
|
5
5
|
orderedEntries,
|
|
6
|
-
percentiles
|
|
6
|
+
percentiles,
|
|
7
|
+
startTime
|
|
7
8
|
}) {
|
|
8
9
|
const canvas = new ViewportCanvas(viewport, fg('platform_ufo_canvas_heatmap_full_precision') ? 1 : 0.25);
|
|
9
10
|
const elementMap = new Map();
|
|
@@ -22,10 +23,11 @@ export default async function calculateTTVCPercentiles({
|
|
|
22
23
|
|
|
23
24
|
// Get pixel counts
|
|
24
25
|
const timePixelCounts = await canvas.getPixelCounts();
|
|
25
|
-
const
|
|
26
|
-
|
|
26
|
+
const canvasDimenstions = canvas.getScaledDimensions();
|
|
27
|
+
const totalPixels = canvasDimenstions.width * canvasDimenstions.height;
|
|
28
|
+
return calculatePercentiles(timePixelCounts, elementMap, percentiles, totalPixels, startTime);
|
|
27
29
|
}
|
|
28
|
-
export function calculatePercentiles(timePixelCounts, elementMap, unorderedPercentiles, totalPixels) {
|
|
30
|
+
export function calculatePercentiles(timePixelCounts, elementMap, unorderedPercentiles, totalPixels, startTime) {
|
|
29
31
|
const results = {};
|
|
30
32
|
let cumulativePixels = 0;
|
|
31
33
|
const percentiles = unorderedPercentiles.sort((a, b) => a - b);
|
|
@@ -42,7 +44,7 @@ export function calculatePercentiles(timePixelCounts, elementMap, unorderedPerce
|
|
|
42
44
|
let matchesAnyCheckpoints = false;
|
|
43
45
|
while (percentileIndex < percentiles.length && percentCovered >= percentiles[percentileIndex]) {
|
|
44
46
|
results[`${percentiles[percentileIndex]}`] = {
|
|
45
|
-
t: Number(time),
|
|
47
|
+
t: Math.round(Number(time - startTime)),
|
|
46
48
|
e: Array.from(domElementsBuffer)
|
|
47
49
|
};
|
|
48
50
|
percentileIndex++;
|
|
@@ -55,15 +57,16 @@ export function calculatePercentiles(timePixelCounts, elementMap, unorderedPerce
|
|
|
55
57
|
break;
|
|
56
58
|
}
|
|
57
59
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
60
|
+
let previousResult = {
|
|
61
|
+
t: 0,
|
|
62
|
+
e: []
|
|
63
|
+
};
|
|
64
|
+
for (let i = 0; i < percentiles.length; i++) {
|
|
65
|
+
const percentile = percentiles[i];
|
|
61
66
|
if (!(percentile in results)) {
|
|
62
|
-
results[`${percentile}`] =
|
|
63
|
-
t: 0,
|
|
64
|
-
e: []
|
|
65
|
-
};
|
|
67
|
+
results[`${percentile}`] = previousResult;
|
|
66
68
|
}
|
|
69
|
+
previousResult = results[`${percentile}`];
|
|
67
70
|
}
|
|
68
71
|
return results;
|
|
69
72
|
}
|
|
@@ -175,7 +175,7 @@ class Heatmap {
|
|
|
175
175
|
}
|
|
176
176
|
}
|
|
177
177
|
}
|
|
178
|
-
async getVCPercentMetrics(vcPercentCheckpoint) {
|
|
178
|
+
async getVCPercentMetrics(vcPercentCheckpoint, startTime) {
|
|
179
179
|
const sortedCheckpoints = [...vcPercentCheckpoint].sort((a, b) => a - b);
|
|
180
180
|
const flattenHeatmap = this.map.flat();
|
|
181
181
|
const totalCells = flattenHeatmap.length;
|
|
@@ -232,7 +232,7 @@ class Heatmap {
|
|
|
232
232
|
}
|
|
233
233
|
matchesAnyCheckpoints = true;
|
|
234
234
|
result[checkpoint.toString()] = {
|
|
235
|
-
t: timestamp,
|
|
235
|
+
t: Math.round(timestamp - startTime),
|
|
236
236
|
e: domElements
|
|
237
237
|
};
|
|
238
238
|
}
|
|
@@ -249,13 +249,14 @@ class Heatmap {
|
|
|
249
249
|
export default async function calculateTTVCPercentiles({
|
|
250
250
|
orderedEntries,
|
|
251
251
|
viewport,
|
|
252
|
-
percentiles
|
|
252
|
+
percentiles,
|
|
253
|
+
startTime
|
|
253
254
|
}) {
|
|
254
255
|
const heatmap = new Heatmap({
|
|
255
256
|
viewport,
|
|
256
257
|
heatmapSize: 200
|
|
257
258
|
});
|
|
258
259
|
await heatmap.applyEntriesToHeatmap(orderedEntries);
|
|
259
|
-
const vcDetails = await heatmap.getVCPercentMetrics(percentiles);
|
|
260
|
+
const vcDetails = await heatmap.getVCPercentMetrics(percentiles, startTime);
|
|
260
261
|
return vcDetails;
|
|
261
262
|
}
|
package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/index.js
CHANGED
|
@@ -4,7 +4,8 @@ import calculateUnionArea from './calc-union-area';
|
|
|
4
4
|
export default async function calculateTTVCPercentiles({
|
|
5
5
|
orderedEntries,
|
|
6
6
|
viewport,
|
|
7
|
-
percentiles
|
|
7
|
+
percentiles,
|
|
8
|
+
startTime
|
|
8
9
|
}) {
|
|
9
10
|
const sortedPercentiles = [...percentiles].sort((a, b) => a - b);
|
|
10
11
|
const viewportArea = viewport.width * viewport.height;
|
|
@@ -43,7 +44,7 @@ export default async function calculateTTVCPercentiles({
|
|
|
43
44
|
}
|
|
44
45
|
matchesAnyCheckpoints = true;
|
|
45
46
|
checkpoints[checkpoint.toString()] = {
|
|
46
|
-
t: iEntry.time,
|
|
47
|
+
t: Math.round(iEntry.time - startTime),
|
|
47
48
|
e: domElements
|
|
48
49
|
};
|
|
49
50
|
}
|
|
@@ -9,6 +9,9 @@ export default class WindowEventObserver {
|
|
|
9
9
|
const unbindCallback = bind(window, {
|
|
10
10
|
type,
|
|
11
11
|
listener: event => {
|
|
12
|
+
if (!event.isTrusted) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
12
15
|
this.onEvent({
|
|
13
16
|
time: event.timeStamp,
|
|
14
17
|
type,
|
|
@@ -16,7 +19,8 @@ export default class WindowEventObserver {
|
|
|
16
19
|
});
|
|
17
20
|
},
|
|
18
21
|
options: {
|
|
19
|
-
passive: true
|
|
22
|
+
passive: true,
|
|
23
|
+
once: true
|
|
20
24
|
}
|
|
21
25
|
});
|
|
22
26
|
this.unbindFns.push(unbindCallback);
|
|
@@ -827,19 +827,47 @@ function _createPayloads() {
|
|
|
827
827
|
}));
|
|
828
828
|
return _createPayloads.apply(this, arguments);
|
|
829
829
|
}
|
|
830
|
-
export function createExperimentalMetricsPayload(
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
830
|
+
export function createExperimentalMetricsPayload(_x6, _x7) {
|
|
831
|
+
return _createExperimentalMetricsPayload.apply(this, arguments);
|
|
832
|
+
}
|
|
833
|
+
function _createExperimentalMetricsPayload() {
|
|
834
|
+
_createExperimentalMetricsPayload = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3(interactionId, interaction) {
|
|
835
|
+
var config, ufoName, rate, pageVisibilityState, result;
|
|
836
|
+
return _regeneratorRuntime.wrap(function _callee3$(_context3) {
|
|
837
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
838
|
+
case 0:
|
|
839
|
+
config = getConfig();
|
|
840
|
+
if (config) {
|
|
841
|
+
_context3.next = 3;
|
|
842
|
+
break;
|
|
843
|
+
}
|
|
844
|
+
throw Error('UFO Configuration not provided');
|
|
845
|
+
case 3:
|
|
846
|
+
ufoName = sanitizeUfoName(interaction.ufoName);
|
|
847
|
+
rate = getExperimentalInteractionRate(ufoName, interaction.type);
|
|
848
|
+
if (coinflip(rate)) {
|
|
849
|
+
_context3.next = 7;
|
|
850
|
+
break;
|
|
851
|
+
}
|
|
852
|
+
return _context3.abrupt("return", null);
|
|
853
|
+
case 7:
|
|
854
|
+
pageVisibilityState = getPageVisibilityState(interaction.start, interaction.end);
|
|
855
|
+
if (!(pageVisibilityState !== 'visible')) {
|
|
856
|
+
_context3.next = 10;
|
|
857
|
+
break;
|
|
858
|
+
}
|
|
859
|
+
return _context3.abrupt("return", null);
|
|
860
|
+
case 10:
|
|
861
|
+
_context3.next = 12;
|
|
862
|
+
return createInteractionMetricsPayload(interaction, interactionId, true);
|
|
863
|
+
case 12:
|
|
864
|
+
result = _context3.sent;
|
|
865
|
+
return _context3.abrupt("return", result);
|
|
866
|
+
case 14:
|
|
867
|
+
case "end":
|
|
868
|
+
return _context3.stop();
|
|
869
|
+
}
|
|
870
|
+
}, _callee3);
|
|
871
|
+
}));
|
|
872
|
+
return _createExperimentalMetricsPayload.apply(this, arguments);
|
|
845
873
|
}
|
|
@@ -29,17 +29,19 @@ function sinkInteraction(instance, payloadPackage) {
|
|
|
29
29
|
function sinkExperimentalInteractionMetrics(instance, payloadPackage) {
|
|
30
30
|
sinkExperimentalHandler(function (interactionId, interaction) {
|
|
31
31
|
scheduleCallback(idlePriority, function () {
|
|
32
|
-
var
|
|
33
|
-
|
|
34
|
-
if (
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
32
|
+
var payloadPromise = payloadPackage.createExperimentalMetricsPayload(interactionId, interaction);
|
|
33
|
+
payloadPromise.then(function (payload) {
|
|
34
|
+
if (payload) {
|
|
35
|
+
if (fg('enable_ufo_devtools_api_for_extra_events')) {
|
|
36
|
+
// NOTE: This API is used by the UFO DevTool Chrome Extension and Criterion
|
|
37
|
+
var devToolObserver = globalThis.__ufo_devtool_onUfoPayload;
|
|
38
|
+
if (typeof devToolObserver === 'function') {
|
|
39
|
+
devToolObserver === null || devToolObserver === void 0 || devToolObserver(payload);
|
|
40
|
+
}
|
|
39
41
|
}
|
|
42
|
+
instance.sendOperationalEvent(payload);
|
|
40
43
|
}
|
|
41
|
-
|
|
42
|
-
}
|
|
44
|
+
});
|
|
43
45
|
});
|
|
44
46
|
});
|
|
45
47
|
}
|
package/dist/esm/vc/index.js
CHANGED
|
@@ -7,15 +7,17 @@ import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
|
7
7
|
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; }
|
|
8
8
|
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) { _defineProperty(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; }
|
|
9
9
|
import { fg } from '@atlaskit/platform-feature-flags';
|
|
10
|
+
import { getConfig } from '../config';
|
|
10
11
|
import { VCObserver } from './vc-observer';
|
|
11
12
|
import VCObserverNew from './vc-observer-new';
|
|
12
13
|
var VCObserverWrapper = /*#__PURE__*/function () {
|
|
13
14
|
function VCObserverWrapper() {
|
|
15
|
+
var _getConfig;
|
|
14
16
|
var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
15
17
|
_classCallCheck(this, VCObserverWrapper);
|
|
16
18
|
this.oldVCObserver = new VCObserver(opts);
|
|
17
19
|
this.newVCObserver = null;
|
|
18
|
-
var isNewVCObserverEnabled = fg('platform_ufo_vc_observer_new');
|
|
20
|
+
var isNewVCObserverEnabled = fg('platform_ufo_vc_observer_new') || ((_getConfig = getConfig()) === null || _getConfig === void 0 || (_getConfig = _getConfig.vc) === null || _getConfig === void 0 ? void 0 : _getConfig.enableVCObserverNew);
|
|
19
21
|
if (isNewVCObserverEnabled) {
|
|
20
22
|
this.newVCObserver = new VCObserverNew({
|
|
21
23
|
selectorConfig: opts.selectorConfig
|
|
@@ -27,7 +29,9 @@ var VCObserverWrapper = /*#__PURE__*/function () {
|
|
|
27
29
|
value: function start(startArg) {
|
|
28
30
|
var _this$oldVCObserver, _this$newVCObserver;
|
|
29
31
|
(_this$oldVCObserver = this.oldVCObserver) === null || _this$oldVCObserver === void 0 || _this$oldVCObserver.start(startArg);
|
|
30
|
-
(_this$newVCObserver = this.newVCObserver) === null || _this$newVCObserver === void 0 || _this$newVCObserver.start(
|
|
32
|
+
(_this$newVCObserver = this.newVCObserver) === null || _this$newVCObserver === void 0 || _this$newVCObserver.start({
|
|
33
|
+
startTime: startArg.startTime
|
|
34
|
+
});
|
|
31
35
|
}
|
|
32
36
|
}, {
|
|
33
37
|
key: "stop",
|
|
@@ -4,7 +4,15 @@ function getAttributeSelector(element, attributeName) {
|
|
|
4
4
|
if (!attrValue) {
|
|
5
5
|
return '';
|
|
6
6
|
}
|
|
7
|
-
return "[".concat(attributeName, "=\"").concat(
|
|
7
|
+
return "[".concat(attributeName, "=\"").concat(attrValue, "\"]");
|
|
8
|
+
}
|
|
9
|
+
function isValidSelector(selector) {
|
|
10
|
+
try {
|
|
11
|
+
document.querySelector(selector);
|
|
12
|
+
return true;
|
|
13
|
+
} catch (err) {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
8
16
|
}
|
|
9
17
|
function isSelectorUnique(selector) {
|
|
10
18
|
return document.querySelectorAll(selector).length === 1;
|
|
@@ -12,11 +20,13 @@ function isSelectorUnique(selector) {
|
|
|
12
20
|
function getUniqueSelector(selectorConfig, element) {
|
|
13
21
|
var currentElement = element;
|
|
14
22
|
var parts = [];
|
|
15
|
-
|
|
23
|
+
var MAX_DEPTH = 3;
|
|
24
|
+
var currentDepth = 0;
|
|
25
|
+
while (currentElement && currentElement.localName !== 'body' && currentDepth <= MAX_DEPTH) {
|
|
16
26
|
var tagName = currentElement.localName;
|
|
17
27
|
var selectorPart = tagName;
|
|
18
|
-
if (selectorConfig.id && currentElement.id) {
|
|
19
|
-
selectorPart += "#".concat(
|
|
28
|
+
if (selectorConfig.id && currentElement.id && isValidSelector("#".concat(currentElement.id))) {
|
|
29
|
+
selectorPart += "#".concat(currentElement.id);
|
|
20
30
|
} else if (selectorConfig.dataVC) {
|
|
21
31
|
selectorPart += getAttributeSelector(currentElement, 'data-vc');
|
|
22
32
|
} else if (selectorConfig.testId) {
|
|
@@ -24,9 +34,11 @@ function getUniqueSelector(selectorConfig, element) {
|
|
|
24
34
|
} else if (selectorConfig.role) {
|
|
25
35
|
selectorPart += getAttributeSelector(currentElement, 'role');
|
|
26
36
|
} else if (selectorConfig.className && currentElement.className) {
|
|
27
|
-
var classNames = Array.from(currentElement.classList).
|
|
37
|
+
var classNames = Array.from(currentElement.classList).join('.');
|
|
28
38
|
if (classNames) {
|
|
29
|
-
|
|
39
|
+
if (isValidSelector(".".concat(classNames))) {
|
|
40
|
+
selectorPart += ".".concat(classNames);
|
|
41
|
+
}
|
|
30
42
|
}
|
|
31
43
|
}
|
|
32
44
|
parts.unshift(selectorPart);
|
|
@@ -35,6 +47,7 @@ function getUniqueSelector(selectorConfig, element) {
|
|
|
35
47
|
return _potentialSelector;
|
|
36
48
|
}
|
|
37
49
|
currentElement = currentElement.parentElement;
|
|
50
|
+
currentDepth++;
|
|
38
51
|
}
|
|
39
52
|
var potentialSelector = parts.join(' > ').trim();
|
|
40
53
|
if (!potentialSelector) {
|
|
@@ -20,7 +20,6 @@ var VCObserverNew = /*#__PURE__*/function () {
|
|
|
20
20
|
var _config$selectorConfi,
|
|
21
21
|
_this = this;
|
|
22
22
|
_classCallCheck(this, VCObserverNew);
|
|
23
|
-
_defineProperty(this, "startTime", 0);
|
|
24
23
|
_defineProperty(this, "viewportObserver", null);
|
|
25
24
|
_defineProperty(this, "windowEventObserver", null);
|
|
26
25
|
this.entriesTimeline = new EntriesTimeline();
|
|
@@ -68,10 +67,12 @@ var VCObserverNew = /*#__PURE__*/function () {
|
|
|
68
67
|
}
|
|
69
68
|
return _createClass(VCObserverNew, [{
|
|
70
69
|
key: "start",
|
|
71
|
-
value: function start() {
|
|
70
|
+
value: function start(_ref2) {
|
|
72
71
|
var _this$viewportObserve, _this$windowEventObse;
|
|
72
|
+
var startTime = _ref2.startTime;
|
|
73
73
|
(_this$viewportObserve = this.viewportObserver) === null || _this$viewportObserve === void 0 || _this$viewportObserve.start();
|
|
74
74
|
(_this$windowEventObse = this.windowEventObserver) === null || _this$windowEventObse === void 0 || _this$windowEventObse.start();
|
|
75
|
+
this.entriesTimeline.clear();
|
|
75
76
|
}
|
|
76
77
|
}, {
|
|
77
78
|
key: "stop",
|
|
@@ -97,7 +98,9 @@ var VCObserverNew = /*#__PURE__*/function () {
|
|
|
97
98
|
});
|
|
98
99
|
_context.next = 6;
|
|
99
100
|
return calculator_fy25_03.calculate({
|
|
100
|
-
orderedEntries: orderedEntries
|
|
101
|
+
orderedEntries: orderedEntries,
|
|
102
|
+
startTime: start,
|
|
103
|
+
stopTime: stop
|
|
101
104
|
});
|
|
102
105
|
case 6:
|
|
103
106
|
fy25_03 = _context.sent;
|
|
@@ -17,11 +17,11 @@ var AbstractVCCalculatorBase = /*#__PURE__*/function () {
|
|
|
17
17
|
var _this = this,
|
|
18
18
|
_vcDetails$90$t,
|
|
19
19
|
_vcDetails$;
|
|
20
|
-
var orderedEntries, filteredEntries, isVCClean, vcDetails;
|
|
20
|
+
var startTime, stopTime, orderedEntries, filteredEntries, isVCClean, vcDetails;
|
|
21
21
|
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
22
22
|
while (1) switch (_context.prev = _context.next) {
|
|
23
23
|
case 0:
|
|
24
|
-
orderedEntries = _ref.orderedEntries;
|
|
24
|
+
startTime = _ref.startTime, stopTime = _ref.stopTime, orderedEntries = _ref.orderedEntries;
|
|
25
25
|
filteredEntries = orderedEntries.filter(function (entry) {
|
|
26
26
|
return _this.isEntryIncluded(entry);
|
|
27
27
|
});
|
|
@@ -42,6 +42,8 @@ var AbstractVCCalculatorBase = /*#__PURE__*/function () {
|
|
|
42
42
|
width: getViewportWidth(),
|
|
43
43
|
height: getViewportHeight()
|
|
44
44
|
},
|
|
45
|
+
startTime: startTime,
|
|
46
|
+
stopTime: stopTime,
|
|
45
47
|
orderedEntries: filteredEntries,
|
|
46
48
|
percentiles: [25, 50, 75, 80, 85, 90, 95, 98, 99]
|
|
47
49
|
});
|
package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/canvas-pixel.js
CHANGED
|
@@ -222,17 +222,16 @@ export function calculateDrawnPixelsRaw(_x, _x2, _x3) {
|
|
|
222
222
|
}
|
|
223
223
|
function _calculateDrawnPixelsRaw() {
|
|
224
224
|
_calculateDrawnPixelsRaw = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(imageData, scaleFactor, arraySize) {
|
|
225
|
-
var data,
|
|
225
|
+
var data, arr, i, color, colorIndex;
|
|
226
226
|
return _regeneratorRuntime.wrap(function _callee2$(_context2) {
|
|
227
227
|
while (1) switch (_context2.prev = _context2.next) {
|
|
228
228
|
case 0:
|
|
229
229
|
data = imageData.data;
|
|
230
|
-
scaleCompensation = Math.round(1 / (scaleFactor * scaleFactor));
|
|
231
230
|
arr = new Uint32Array(arraySize);
|
|
232
231
|
i = 0;
|
|
233
|
-
case
|
|
232
|
+
case 3:
|
|
234
233
|
if (!(i < data.length)) {
|
|
235
|
-
_context2.next =
|
|
234
|
+
_context2.next = 11;
|
|
236
235
|
break;
|
|
237
236
|
}
|
|
238
237
|
// Check alpha
|
|
@@ -244,21 +243,21 @@ function _calculateDrawnPixelsRaw() {
|
|
|
244
243
|
// The | operator combines all bits together
|
|
245
244
|
color = data[i] << 16 | data[i + 1] << 8 | data[i + 2];
|
|
246
245
|
colorIndex = color - 1;
|
|
247
|
-
arr[colorIndex] = (arr[colorIndex] || 0) +
|
|
246
|
+
arr[colorIndex] = (arr[colorIndex] || 0) + 1;
|
|
248
247
|
}
|
|
249
248
|
if (!(i % 10000 === 0)) {
|
|
250
|
-
_context2.next =
|
|
249
|
+
_context2.next = 8;
|
|
251
250
|
break;
|
|
252
251
|
}
|
|
253
|
-
_context2.next =
|
|
252
|
+
_context2.next = 8;
|
|
254
253
|
return taskYield();
|
|
255
|
-
case
|
|
254
|
+
case 8:
|
|
256
255
|
i += 4;
|
|
257
|
-
_context2.next =
|
|
256
|
+
_context2.next = 3;
|
|
258
257
|
break;
|
|
259
|
-
case
|
|
258
|
+
case 11:
|
|
260
259
|
return _context2.abrupt("return", arr);
|
|
261
|
-
case
|
|
260
|
+
case 12:
|
|
262
261
|
case "end":
|
|
263
262
|
return _context2.stop();
|
|
264
263
|
}
|
package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/index.js
CHANGED
|
@@ -11,22 +11,22 @@ export default function calculateTTVCPercentiles(_x) {
|
|
|
11
11
|
}
|
|
12
12
|
function _calculateTTVCPercentiles() {
|
|
13
13
|
_calculateTTVCPercentiles = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(_ref) {
|
|
14
|
-
var viewport, orderedEntries, percentiles, canvas, elementMap,
|
|
14
|
+
var viewport, orderedEntries, percentiles, startTime, canvas, elementMap, _iterator2, _step2, entry, rect, elementName, timePixelCounts, canvasDimenstions, totalPixels;
|
|
15
15
|
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
16
16
|
while (1) switch (_context.prev = _context.next) {
|
|
17
17
|
case 0:
|
|
18
|
-
viewport = _ref.viewport, orderedEntries = _ref.orderedEntries, percentiles = _ref.percentiles;
|
|
18
|
+
viewport = _ref.viewport, orderedEntries = _ref.orderedEntries, percentiles = _ref.percentiles, startTime = _ref.startTime;
|
|
19
19
|
canvas = new ViewportCanvas(viewport, fg('platform_ufo_canvas_heatmap_full_precision') ? 1 : 0.25);
|
|
20
20
|
elementMap = new Map();
|
|
21
|
-
|
|
21
|
+
_iterator2 = _createForOfIteratorHelper(orderedEntries);
|
|
22
22
|
_context.prev = 4;
|
|
23
|
-
|
|
23
|
+
_iterator2.s();
|
|
24
24
|
case 6:
|
|
25
|
-
if ((
|
|
25
|
+
if ((_step2 = _iterator2.n()).done) {
|
|
26
26
|
_context.next = 17;
|
|
27
27
|
break;
|
|
28
28
|
}
|
|
29
|
-
entry =
|
|
29
|
+
entry = _step2.value;
|
|
30
30
|
if ('rect' in entry.data) {
|
|
31
31
|
_context.next = 10;
|
|
32
32
|
break;
|
|
@@ -49,19 +49,20 @@ function _calculateTTVCPercentiles() {
|
|
|
49
49
|
case 19:
|
|
50
50
|
_context.prev = 19;
|
|
51
51
|
_context.t0 = _context["catch"](4);
|
|
52
|
-
|
|
52
|
+
_iterator2.e(_context.t0);
|
|
53
53
|
case 22:
|
|
54
54
|
_context.prev = 22;
|
|
55
|
-
|
|
55
|
+
_iterator2.f();
|
|
56
56
|
return _context.finish(22);
|
|
57
57
|
case 25:
|
|
58
58
|
_context.next = 27;
|
|
59
59
|
return canvas.getPixelCounts();
|
|
60
60
|
case 27:
|
|
61
61
|
timePixelCounts = _context.sent;
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
62
|
+
canvasDimenstions = canvas.getScaledDimensions();
|
|
63
|
+
totalPixels = canvasDimenstions.width * canvasDimenstions.height;
|
|
64
|
+
return _context.abrupt("return", calculatePercentiles(timePixelCounts, elementMap, percentiles, totalPixels, startTime));
|
|
65
|
+
case 31:
|
|
65
66
|
case "end":
|
|
66
67
|
return _context.stop();
|
|
67
68
|
}
|
|
@@ -69,7 +70,7 @@ function _calculateTTVCPercentiles() {
|
|
|
69
70
|
}));
|
|
70
71
|
return _calculateTTVCPercentiles.apply(this, arguments);
|
|
71
72
|
}
|
|
72
|
-
export function calculatePercentiles(timePixelCounts, elementMap, unorderedPercentiles, totalPixels) {
|
|
73
|
+
export function calculatePercentiles(timePixelCounts, elementMap, unorderedPercentiles, totalPixels, startTime) {
|
|
73
74
|
var results = {};
|
|
74
75
|
var cumulativePixels = 0;
|
|
75
76
|
var percentiles = unorderedPercentiles.sort(function (a, b) {
|
|
@@ -102,7 +103,7 @@ export function calculatePercentiles(timePixelCounts, elementMap, unorderedPerce
|
|
|
102
103
|
var matchesAnyCheckpoints = false;
|
|
103
104
|
while (percentileIndex < percentiles.length && percentCovered >= percentiles[percentileIndex]) {
|
|
104
105
|
results["".concat(percentiles[percentileIndex])] = {
|
|
105
|
-
t: Number(time),
|
|
106
|
+
t: Math.round(Number(time - startTime)),
|
|
106
107
|
e: Array.from(domElementsBuffer)
|
|
107
108
|
};
|
|
108
109
|
percentileIndex++;
|
|
@@ -115,29 +116,21 @@ export function calculatePercentiles(timePixelCounts, elementMap, unorderedPerce
|
|
|
115
116
|
break;
|
|
116
117
|
}
|
|
117
118
|
}
|
|
118
|
-
|
|
119
|
-
// Fill in any missing percentiles
|
|
120
119
|
} catch (err) {
|
|
121
120
|
_iterator.e(err);
|
|
122
121
|
} finally {
|
|
123
122
|
_iterator.f();
|
|
124
123
|
}
|
|
125
|
-
var
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
e: []
|
|
134
|
-
};
|
|
135
|
-
}
|
|
124
|
+
var previousResult = {
|
|
125
|
+
t: 0,
|
|
126
|
+
e: []
|
|
127
|
+
};
|
|
128
|
+
for (var i = 0; i < percentiles.length; i++) {
|
|
129
|
+
var percentile = percentiles[i];
|
|
130
|
+
if (!(percentile in results)) {
|
|
131
|
+
results["".concat(percentile)] = previousResult;
|
|
136
132
|
}
|
|
137
|
-
|
|
138
|
-
_iterator2.e(err);
|
|
139
|
-
} finally {
|
|
140
|
-
_iterator2.f();
|
|
133
|
+
previousResult = results["".concat(percentile)];
|
|
141
134
|
}
|
|
142
135
|
return results;
|
|
143
136
|
}
|
|
@@ -236,7 +236,7 @@ var Heatmap = /*#__PURE__*/function () {
|
|
|
236
236
|
}, {
|
|
237
237
|
key: "getVCPercentMetrics",
|
|
238
238
|
value: function () {
|
|
239
|
-
var _getVCPercentMetrics = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(vcPercentCheckpoint) {
|
|
239
|
+
var _getVCPercentMetrics = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(vcPercentCheckpoint, startTime) {
|
|
240
240
|
var sortedCheckpoints, flattenHeatmap, totalCells, timestampMap, i, _cellHead$time, _timestampMap$get, cell, cellHead, timestamp, elementName, curr, sortedTimings, totalCellPainted, result, domElementsBuffer, _i, _timestamp, timestampInfo, cellCount, domElements, currVCRatio, currVCPercent, matchesAnyCheckpoints, checkpoint, _domElements;
|
|
241
241
|
return _regeneratorRuntime.wrap(function _callee2$(_context2) {
|
|
242
242
|
while (1) switch (_context2.prev = _context2.next) {
|
|
@@ -324,7 +324,7 @@ var Heatmap = /*#__PURE__*/function () {
|
|
|
324
324
|
case 41:
|
|
325
325
|
matchesAnyCheckpoints = true;
|
|
326
326
|
result[checkpoint.toString()] = {
|
|
327
|
-
t: _timestamp,
|
|
327
|
+
t: Math.round(_timestamp - startTime),
|
|
328
328
|
e: _domElements
|
|
329
329
|
};
|
|
330
330
|
_context2.next = 36;
|
|
@@ -351,23 +351,23 @@ var Heatmap = /*#__PURE__*/function () {
|
|
|
351
351
|
}
|
|
352
352
|
}, _callee2, this);
|
|
353
353
|
}));
|
|
354
|
-
function getVCPercentMetrics(_x2) {
|
|
354
|
+
function getVCPercentMetrics(_x2, _x3) {
|
|
355
355
|
return _getVCPercentMetrics.apply(this, arguments);
|
|
356
356
|
}
|
|
357
357
|
return getVCPercentMetrics;
|
|
358
358
|
}()
|
|
359
359
|
}]);
|
|
360
360
|
}();
|
|
361
|
-
export default function calculateTTVCPercentiles(
|
|
361
|
+
export default function calculateTTVCPercentiles(_x4) {
|
|
362
362
|
return _calculateTTVCPercentiles.apply(this, arguments);
|
|
363
363
|
}
|
|
364
364
|
function _calculateTTVCPercentiles() {
|
|
365
365
|
_calculateTTVCPercentiles = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3(_ref2) {
|
|
366
|
-
var orderedEntries, viewport, percentiles, heatmap, vcDetails;
|
|
366
|
+
var orderedEntries, viewport, percentiles, startTime, heatmap, vcDetails;
|
|
367
367
|
return _regeneratorRuntime.wrap(function _callee3$(_context3) {
|
|
368
368
|
while (1) switch (_context3.prev = _context3.next) {
|
|
369
369
|
case 0:
|
|
370
|
-
orderedEntries = _ref2.orderedEntries, viewport = _ref2.viewport, percentiles = _ref2.percentiles;
|
|
370
|
+
orderedEntries = _ref2.orderedEntries, viewport = _ref2.viewport, percentiles = _ref2.percentiles, startTime = _ref2.startTime;
|
|
371
371
|
heatmap = new Heatmap({
|
|
372
372
|
viewport: viewport,
|
|
373
373
|
heatmapSize: 200
|
|
@@ -376,7 +376,7 @@ function _calculateTTVCPercentiles() {
|
|
|
376
376
|
return heatmap.applyEntriesToHeatmap(orderedEntries);
|
|
377
377
|
case 4:
|
|
378
378
|
_context3.next = 6;
|
|
379
|
-
return heatmap.getVCPercentMetrics(percentiles);
|
|
379
|
+
return heatmap.getVCPercentMetrics(percentiles, startTime);
|
|
380
380
|
case 6:
|
|
381
381
|
vcDetails = _context3.sent;
|
|
382
382
|
return _context3.abrupt("return", vcDetails);
|