browsertime 23.5.0 → 24.0.0-alpha.1
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 +18 -0
- package/bin/browsertime.js +3 -2
- package/lib/android/gnirehtet.js +2 -2
- package/lib/android/index.js +2 -2
- package/lib/android/root.js +2 -2
- package/lib/chrome/chromeDevtoolsProtocol.js +4 -4
- package/lib/chrome/har.js +2 -2
- package/lib/chrome/networkManager.js +2 -2
- package/lib/chrome/parseCpuTrace.js +2 -2
- package/lib/chrome/traceCategoriesParser.js +2 -2
- package/lib/chrome/webdriver/builder.js +1 -2
- package/lib/chrome/webdriver/chromium.js +2 -2
- package/lib/chrome/webdriver/setupChromiumOptions.js +2 -2
- package/lib/chrome/webdriver/traceUtilities.js +2 -2
- package/lib/connectivity/humble.js +2 -2
- package/lib/connectivity/index.js +2 -2
- package/lib/core/engine/collector.js +2 -2
- package/lib/core/engine/command/addText.js +2 -2
- package/lib/core/engine/command/android.js +2 -2
- package/lib/core/engine/command/bidi.js +2 -2
- package/lib/core/engine/command/cache.js +2 -2
- package/lib/core/engine/command/chromeDevToolsProtocol.js +2 -2
- package/lib/core/engine/command/chromeTrace.js +2 -2
- package/lib/core/engine/command/click.js +2 -2
- package/lib/core/engine/command/debug.js +2 -2
- package/lib/core/engine/command/geckoProfiler.js +2 -2
- package/lib/core/engine/command/javaScript.js +2 -2
- package/lib/core/engine/command/measure.js +2 -2
- package/lib/core/engine/command/mouse/clickAndHold.js +2 -2
- package/lib/core/engine/command/mouse/contextClick.js +2 -2
- package/lib/core/engine/command/mouse/doubleClick.js +2 -2
- package/lib/core/engine/command/mouse/mouseMove.js +2 -2
- package/lib/core/engine/command/mouse/singleClick.js +2 -2
- package/lib/core/engine/command/navigation.js +2 -2
- package/lib/core/engine/command/screenshot.js +2 -2
- package/lib/core/engine/command/scroll.js +2 -2
- package/lib/core/engine/command/select.js +2 -2
- package/lib/core/engine/command/set.js +2 -2
- package/lib/core/engine/command/stopWatch.js +2 -2
- package/lib/core/engine/command/switch.js +2 -2
- package/lib/core/engine/command/wait.js +2 -2
- package/lib/core/engine/index.js +8 -14
- package/lib/core/engine/iteration.js +2 -2
- package/lib/core/seleniumRunner.js +8 -12
- package/lib/core/webdriver/index.js +1 -1
- package/lib/edge/webdriver/builder.js +3 -4
- package/lib/firefox/firefoxBidi.js +2 -2
- package/lib/firefox/geckoProfiler.js +2 -2
- package/lib/firefox/memoryReport.js +2 -2
- package/lib/firefox/networkManager.js +2 -2
- package/lib/firefox/perfStats.js +2 -2
- package/lib/firefox/webdriver/builder.js +3 -5
- package/lib/firefox/webdriver/firefox.js +2 -2
- package/lib/screenshot/index.js +7 -9
- package/lib/screenshot/loadCustomJimp.js +17 -0
- package/lib/support/browserScript.js +4 -5
- package/lib/support/cli.js +15 -5
- package/lib/support/dns.js +2 -2
- package/lib/support/engineUtils.js +4 -5
- package/lib/support/fileUtil.js +20 -3
- package/lib/support/getPort.js +25 -0
- package/lib/support/getViewPort.js +2 -2
- package/lib/support/har/index.js +5 -6
- package/lib/support/images/index.js +8 -17
- package/lib/support/logging.js +14 -39
- package/lib/support/pathToFolder.js +3 -3
- package/lib/support/preURL.js +2 -2
- package/lib/support/statistics.js +2 -2
- package/lib/support/stop.js +2 -2
- package/lib/support/storageManager.js +5 -5
- package/lib/support/util.js +73 -3
- package/lib/support/xvfb.js +55 -26
- package/lib/video/postprocessing/finetune/addTextToVideo.js +2 -2
- package/lib/video/postprocessing/finetune/convertFps.js +2 -2
- package/lib/video/postprocessing/finetune/index.js +2 -2
- package/lib/video/postprocessing/finetune/removeOrange.js +2 -2
- package/lib/video/postprocessing/visualmetrics/getVideoMetrics.js +2 -2
- package/lib/video/postprocessing/visualmetrics/visualMetrics.js +2 -2
- package/lib/video/screenRecording/android/recorder.js +2 -2
- package/lib/video/screenRecording/desktop/convert.js +2 -2
- package/lib/video/screenRecording/desktop/desktopRecorder.js +2 -2
- package/lib/video/screenRecording/desktop/ffmpegRecorder.js +2 -2
- package/lib/video/screenRecording/desktop/osx/getScreen.js +2 -2
- package/lib/video/screenRecording/firefox/firefoxWindowRecorder.js +2 -2
- package/lib/video/screenRecording/ios/convertToMp4.js +2 -2
- package/lib/video/screenRecording/ios/iosRecorder.js +2 -2
- package/lib/video/screenRecording/iosSimulator/convertToMp4.js +2 -2
- package/lib/video/screenRecording/iosSimulator/recorder.js +2 -2
- package/lib/video/screenRecording/setOrangeBackground.js +2 -2
- package/package.json +8 -13
- package/types/support/engineUtils.d.ts.map +1 -1
- package/types/support/fileUtil.d.ts +1 -0
- package/types/support/fileUtil.d.ts.map +1 -1
- package/types/support/util.d.ts +3 -0
- package/types/support/util.d.ts.map +1 -1
package/lib/support/util.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
const log = intel.getLogger('browsertime');
|
|
1
|
+
import { getLogger } from '@sitespeed.io/log';
|
|
2
|
+
const log = getLogger('browsertime');
|
|
4
3
|
|
|
5
4
|
export function formatMetric(name, metric, multiple, inMs, extras) {
|
|
6
5
|
if (metric === undefined) return;
|
|
@@ -45,6 +44,7 @@ export function logResultLogLine(results) {
|
|
|
45
44
|
// get the id
|
|
46
45
|
let pageId = results.har.log.pages[index].id;
|
|
47
46
|
let entriesByPage = groupBy(results.har.log.entries, 'pageref');
|
|
47
|
+
|
|
48
48
|
requests = entriesByPage[pageId]
|
|
49
49
|
? entriesByPage[pageId].length + ' requests'
|
|
50
50
|
: '';
|
|
@@ -265,3 +265,73 @@ export function adjustVisualProgressTimestamps(
|
|
|
265
265
|
}
|
|
266
266
|
return visualProgress;
|
|
267
267
|
}
|
|
268
|
+
|
|
269
|
+
export function localTime() {
|
|
270
|
+
const date = new Date();
|
|
271
|
+
|
|
272
|
+
const year = date.getFullYear();
|
|
273
|
+
const month = String(date.getMonth() + 1).padStart(2, '0');
|
|
274
|
+
const day = String(date.getDate()).padStart(2, '0');
|
|
275
|
+
const hours = String(date.getHours()).padStart(2, '0');
|
|
276
|
+
const minutes = String(date.getMinutes()).padStart(2, '0');
|
|
277
|
+
const seconds = String(date.getSeconds()).padStart(2, '0');
|
|
278
|
+
|
|
279
|
+
const offset = -date.getTimezoneOffset();
|
|
280
|
+
const sign = offset >= 0 ? '+' : '-';
|
|
281
|
+
const offsetHours = String(Math.floor(Math.abs(offset) / 60)).padStart(
|
|
282
|
+
2,
|
|
283
|
+
'0'
|
|
284
|
+
);
|
|
285
|
+
const offsetMinutes = String(Math.abs(offset) % 60).padStart(2, '0');
|
|
286
|
+
|
|
287
|
+
return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}${sign}${offsetHours}:${offsetMinutes}`;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
export function pick(obj, keys) {
|
|
291
|
+
const result = {};
|
|
292
|
+
if (!obj || typeof obj !== 'object') {
|
|
293
|
+
return result;
|
|
294
|
+
}
|
|
295
|
+
for (const key of keys) {
|
|
296
|
+
if (key in obj) {
|
|
297
|
+
result[key] = obj[key];
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
return result;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
export function isEmpty(value) {
|
|
304
|
+
if (value === null) return true;
|
|
305
|
+
|
|
306
|
+
if (value === undefined) return true;
|
|
307
|
+
|
|
308
|
+
if (typeof value === 'boolean') return false;
|
|
309
|
+
|
|
310
|
+
if (typeof value === 'number') return false;
|
|
311
|
+
|
|
312
|
+
if (typeof value === 'string') return value.length === 0;
|
|
313
|
+
|
|
314
|
+
if (typeof value === 'function') return false;
|
|
315
|
+
|
|
316
|
+
if (Array.isArray(value)) return value.length === 0;
|
|
317
|
+
|
|
318
|
+
if (value instanceof Map || value instanceof Set) return value.size === 0;
|
|
319
|
+
|
|
320
|
+
if (typeof value === 'object') {
|
|
321
|
+
return Object.keys(value).length === 0;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
return false;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
function groupBy(array, property) {
|
|
328
|
+
const grouped = {};
|
|
329
|
+
for (const item of array) {
|
|
330
|
+
const key = item[property];
|
|
331
|
+
if (!grouped[key]) {
|
|
332
|
+
grouped[key] = [];
|
|
333
|
+
}
|
|
334
|
+
grouped[key].push(item);
|
|
335
|
+
}
|
|
336
|
+
return grouped;
|
|
337
|
+
}
|
package/lib/support/xvfb.js
CHANGED
|
@@ -1,55 +1,83 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { execa } from 'execa';
|
|
2
2
|
import get from 'lodash.get';
|
|
3
|
-
import Xvfb from '@cypress/xvfb';
|
|
4
3
|
import { xvfbDisplay } from '../video/defaults.js';
|
|
5
4
|
import { getViewPort } from '../support/getViewPort.js';
|
|
6
5
|
import { isAndroidConfigured } from '../android/index.js';
|
|
7
6
|
|
|
8
|
-
function
|
|
7
|
+
function buildXvfbCommand({ display, screen = 0, size, silent }) {
|
|
9
8
|
return {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
9
|
+
command: 'Xvfb',
|
|
10
|
+
args: [
|
|
11
|
+
`:${display}`,
|
|
12
|
+
'-ac',
|
|
13
|
+
'-nolisten',
|
|
14
|
+
'tcp',
|
|
15
|
+
'-screen',
|
|
16
|
+
screen,
|
|
17
|
+
`${size}x24`
|
|
18
|
+
],
|
|
19
|
+
silent
|
|
14
20
|
};
|
|
15
21
|
}
|
|
16
22
|
|
|
17
|
-
async function startXvfb({ size, options }) {
|
|
23
|
+
export async function startXvfb({ size, options }) {
|
|
24
|
+
// If using Firefox, add some extra width to avoid issues
|
|
18
25
|
let xvfbSize = size;
|
|
19
26
|
if (options.browser === 'firefox') {
|
|
20
27
|
const extraSizeInFirefox = 200;
|
|
21
|
-
const
|
|
22
|
-
xvfbSize = Number(
|
|
28
|
+
const [width, height] = size.split('x');
|
|
29
|
+
xvfbSize = `${Number(width) + extraSizeInFirefox}x${height}`;
|
|
23
30
|
}
|
|
24
|
-
|
|
25
|
-
|
|
31
|
+
|
|
32
|
+
const display = get(options, 'xvfbParams.display', xvfbDisplay);
|
|
33
|
+
const silent = options.verbose >= 2 ? false : true;
|
|
34
|
+
|
|
35
|
+
const { command, args } = buildXvfbCommand({
|
|
36
|
+
display,
|
|
26
37
|
size: xvfbSize,
|
|
27
|
-
silent
|
|
38
|
+
silent
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
const xvfbProcess = execa(command, args, {
|
|
42
|
+
stdio: silent ? 'ignore' : 'inherit',
|
|
43
|
+
detached: true
|
|
28
44
|
});
|
|
29
|
-
|
|
30
|
-
const
|
|
31
|
-
await
|
|
32
|
-
|
|
45
|
+
|
|
46
|
+
const waitToSettle = get(options, 'xvfbParams.waitToSettle', 500);
|
|
47
|
+
await new Promise(resolve => {
|
|
48
|
+
setTimeout(resolve, waitToSettle);
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
// Export for the browser
|
|
52
|
+
process.env.DISPLAY = `:${display}`;
|
|
53
|
+
|
|
54
|
+
return {
|
|
55
|
+
display,
|
|
56
|
+
process: xvfbProcess
|
|
57
|
+
};
|
|
33
58
|
}
|
|
59
|
+
export async function stopXvfb(xvfbSession) {
|
|
60
|
+
if (!xvfbSession || !xvfbSession.process) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
34
63
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
64
|
+
try {
|
|
65
|
+
xvfbSession.process.kill('SIGTERM');
|
|
66
|
+
await xvfbSession.process;
|
|
67
|
+
} catch {
|
|
68
|
+
// Just swallow
|
|
69
|
+
}
|
|
38
70
|
}
|
|
39
71
|
|
|
40
|
-
/**
|
|
41
|
-
* Create a new XVFB instance
|
|
42
|
-
* @class
|
|
43
|
-
*/
|
|
44
72
|
export class XVFB {
|
|
45
73
|
constructor(options) {
|
|
46
74
|
this.options = options;
|
|
75
|
+
this.xvfbSession = undefined;
|
|
47
76
|
}
|
|
48
77
|
|
|
49
78
|
async start() {
|
|
50
|
-
// This is the fix for the current use of ENV in Docker
|
|
51
|
-
// we should do a better fix for that
|
|
52
79
|
const useXvfb = get(this.options, 'xvfb', false);
|
|
80
|
+
|
|
53
81
|
if (
|
|
54
82
|
(useXvfb === true || useXvfb === 'true') &&
|
|
55
83
|
!isAndroidConfigured(this.options)
|
|
@@ -64,6 +92,7 @@ export class XVFB {
|
|
|
64
92
|
async stop() {
|
|
65
93
|
if (this.xvfbSession) {
|
|
66
94
|
await stopXvfb(this.xvfbSession);
|
|
95
|
+
this.xvfbSession = undefined;
|
|
67
96
|
}
|
|
68
97
|
}
|
|
69
98
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { execa } from 'execa';
|
|
2
|
-
import
|
|
2
|
+
import { getLogger } from '@sitespeed.io/log';
|
|
3
3
|
import { getTimingMetrics } from './getTimingMetrics.js';
|
|
4
4
|
import { getFont } from './getFont.js';
|
|
5
5
|
import { isAndroidConfigured } from '../../../android/index.js';
|
|
6
|
-
const log =
|
|
6
|
+
const log = getLogger('browsertime.video');
|
|
7
7
|
|
|
8
8
|
function isSmallish(options) {
|
|
9
9
|
return (
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { execa } from 'execa';
|
|
2
|
-
import
|
|
3
|
-
const log =
|
|
2
|
+
import { getLogger } from '@sitespeed.io/log';
|
|
3
|
+
const log = getLogger('browsertime.video');
|
|
4
4
|
|
|
5
5
|
export async function convert(source, destination, framerate) {
|
|
6
6
|
const scriptArguments = [
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
unlink as _unlink
|
|
6
6
|
} from 'node:fs';
|
|
7
7
|
import { promisify } from 'node:util';
|
|
8
|
-
import
|
|
8
|
+
import { getLogger } from '@sitespeed.io/log';
|
|
9
9
|
import get from 'lodash.get';
|
|
10
10
|
import { addTextToVideo } from './addTextToVideo.js';
|
|
11
11
|
import { removeOrange } from './removeOrange.js';
|
|
@@ -15,7 +15,7 @@ import { isAndroidConfigured } from '../../../android/index.js';
|
|
|
15
15
|
const rename = promisify(_rename);
|
|
16
16
|
const copyFile = promisify(_copyFile);
|
|
17
17
|
const unlink = promisify(_unlink);
|
|
18
|
-
const log =
|
|
18
|
+
const log = getLogger('browsertime.video');
|
|
19
19
|
|
|
20
20
|
export async function finetuneVideo(
|
|
21
21
|
videoDir,
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
|
-
import
|
|
2
|
+
import { getLogger } from '@sitespeed.io/log';
|
|
3
3
|
import { run } from './visualMetrics.js';
|
|
4
4
|
import { extraMetrics } from './extraMetrics.js';
|
|
5
|
-
const log =
|
|
5
|
+
const log = getLogger('browsertime.video');
|
|
6
6
|
|
|
7
7
|
export async function getVideoMetrics(
|
|
8
8
|
videoDir,
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { fileURLToPath } from 'node:url';
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { execa } from 'execa';
|
|
4
|
-
import
|
|
4
|
+
import { getLogger } from '@sitespeed.io/log';
|
|
5
5
|
import get from 'lodash.get';
|
|
6
6
|
import { readFile, removeFile, copyFile } from '../../../support/fileUtil.js';
|
|
7
7
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
8
|
-
const log =
|
|
8
|
+
const log = getLogger('browsertime.video');
|
|
9
9
|
|
|
10
10
|
const SCRIPT_PATH = path.join(
|
|
11
11
|
__dirname,
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { promisify } from 'node:util';
|
|
2
2
|
import { unlink as _unlink } from 'node:fs';
|
|
3
3
|
import get from 'lodash.get';
|
|
4
|
-
import
|
|
4
|
+
import { getLogger } from '@sitespeed.io/log';
|
|
5
5
|
import { framerate } from '../../defaults.js';
|
|
6
6
|
import { Android } from '../../../android/index.js';
|
|
7
7
|
const unlink = promisify(_unlink);
|
|
8
|
-
const log =
|
|
8
|
+
const log = getLogger('browsertime.video');
|
|
9
9
|
const delay = ms => new Promise(res => setTimeout(res, ms));
|
|
10
10
|
|
|
11
11
|
export class AndroidRecorder {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { execa } from 'execa';
|
|
2
|
-
import
|
|
3
|
-
const log =
|
|
2
|
+
import { getLogger } from '@sitespeed.io/log';
|
|
3
|
+
const log = getLogger('browsertime.video');
|
|
4
4
|
|
|
5
5
|
export async function convert(source, destination, crf, threads) {
|
|
6
6
|
const scriptArguments = [
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { promisify } from 'node:util';
|
|
2
2
|
import { unlink as _unlink, rename as _rename } from 'node:fs';
|
|
3
|
-
import
|
|
3
|
+
import { getLogger } from '@sitespeed.io/log';
|
|
4
4
|
import get from 'lodash.get';
|
|
5
5
|
import { start as _start, stop as _stop } from './ffmpegRecorder.js';
|
|
6
6
|
import { convert } from './convert.js';
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
import { getViewPort } from '../../../support/getViewPort.js';
|
|
15
15
|
const unlink = promisify(_unlink);
|
|
16
16
|
const rename = promisify(_rename);
|
|
17
|
-
const log =
|
|
17
|
+
const log = getLogger('browsertime.video');
|
|
18
18
|
|
|
19
19
|
export class DesktopRecorder {
|
|
20
20
|
constructor(options) {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { execa } from 'execa';
|
|
2
|
-
import
|
|
2
|
+
import { getLogger } from '@sitespeed.io/log';
|
|
3
3
|
import { getScreenOnOSX } from './osx/getScreen.js';
|
|
4
4
|
import { getSPDisplaysDataType } from './osx/getSPDisplaysDataType.js';
|
|
5
|
-
const log =
|
|
5
|
+
const log = getLogger('browsertime.video');
|
|
6
6
|
|
|
7
7
|
async function buildX11FfmpegArguments({
|
|
8
8
|
display,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { execa } from 'execa';
|
|
2
|
-
import
|
|
3
|
-
const log =
|
|
2
|
+
import { getLogger } from '@sitespeed.io/log';
|
|
3
|
+
const log = getLogger('browsertime.video');
|
|
4
4
|
|
|
5
5
|
export async function getScreenOnOSX() {
|
|
6
6
|
const scriptArguments = [
|
|
@@ -7,11 +7,11 @@ import {
|
|
|
7
7
|
copyFileSync
|
|
8
8
|
} from 'node:fs';
|
|
9
9
|
import path from 'node:path';
|
|
10
|
-
import
|
|
10
|
+
import { getLogger } from '@sitespeed.io/log';
|
|
11
11
|
import { execa } from 'execa';
|
|
12
12
|
import { removeDirAndFiles } from '../../../support/fileUtil.js';
|
|
13
13
|
import { Android, isAndroidConfigured } from '../../../android/index.js';
|
|
14
|
-
const log =
|
|
14
|
+
const log = getLogger('browsertime.video');
|
|
15
15
|
|
|
16
16
|
const unlink = promisify(_unlink);
|
|
17
17
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { execa } from 'execa';
|
|
2
|
-
import
|
|
3
|
-
const log =
|
|
2
|
+
import { getLogger } from '@sitespeed.io/log';
|
|
3
|
+
const log = getLogger('browsertime.video');
|
|
4
4
|
|
|
5
5
|
export async function convert(source, destination) {
|
|
6
6
|
const scriptArguments = [
|
|
@@ -4,8 +4,8 @@ import { execaCommand as command } from 'execa';
|
|
|
4
4
|
import { promisify } from 'node:util';
|
|
5
5
|
import { unlink as _unlink } from 'node:fs';
|
|
6
6
|
import { convert } from './convertToMp4.js';
|
|
7
|
-
import
|
|
8
|
-
const log =
|
|
7
|
+
import { getLogger } from '@sitespeed.io/log';
|
|
8
|
+
const log = getLogger('browsertime.video');
|
|
9
9
|
const unlink = promisify(_unlink);
|
|
10
10
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
11
11
|
const moduleRootPath = path.resolve(__dirname, '..', '..', '..', '..');
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { execa } from 'execa';
|
|
2
|
-
import
|
|
3
|
-
const log =
|
|
2
|
+
import { getLogger } from '@sitespeed.io/log';
|
|
3
|
+
const log = getLogger('browsertime.video');
|
|
4
4
|
|
|
5
5
|
export async function convert(source, destination) {
|
|
6
6
|
const scriptArguments = [
|
|
@@ -2,11 +2,11 @@ import path from 'node:path';
|
|
|
2
2
|
import { promisify } from 'node:util';
|
|
3
3
|
import fs from 'node:fs';
|
|
4
4
|
import { execaCommand } from 'execa';
|
|
5
|
-
import
|
|
5
|
+
import { getLogger } from '@sitespeed.io/log';
|
|
6
6
|
import { convert } from './convertToMp4.js';
|
|
7
7
|
const unlink = promisify(fs.unlink);
|
|
8
8
|
const delay = ms => new Promise(res => setTimeout(res, ms));
|
|
9
|
-
const log =
|
|
9
|
+
const log = getLogger('browsertime.video');
|
|
10
10
|
|
|
11
11
|
export class IOSSimulatorRecorder {
|
|
12
12
|
constructor(options, baseDir) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { getLogger } from '@sitespeed.io/log';
|
|
2
2
|
import { until, By } from 'selenium-webdriver';
|
|
3
|
-
const log =
|
|
3
|
+
const log = getLogger('browsertime.video');
|
|
4
4
|
export async function setOrangeBackground(driver) {
|
|
5
5
|
log.debug('Add orange color');
|
|
6
6
|
// We tried other ways for Android (access an orange page)
|
package/package.json
CHANGED
|
@@ -1,41 +1,36 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "browsertime",
|
|
3
3
|
"description": "Get performance metrics from your web page using Browsertime.",
|
|
4
|
-
"version": "
|
|
4
|
+
"version": "24.0.0-alpha.1",
|
|
5
5
|
"bin": "./bin/browsertime.js",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"types": "./types/scripting.d.ts",
|
|
8
8
|
"dependencies": {
|
|
9
|
-
"@cypress/xvfb": "1.2.4",
|
|
10
9
|
"@devicefarmer/adbkit": "3.3.8",
|
|
11
10
|
"@sitespeed.io/chromedriver": "131.0.6778-69",
|
|
12
|
-
"@sitespeed.io/edgedriver": "
|
|
11
|
+
"@sitespeed.io/edgedriver": "131.0.2903-112",
|
|
13
12
|
"@sitespeed.io/geckodriver": "0.35.0-1",
|
|
13
|
+
"@sitespeed.io/log": "0.1.0",
|
|
14
14
|
"@sitespeed.io/throttle": "5.0.1",
|
|
15
15
|
"@sitespeed.io/tracium": "0.3.3",
|
|
16
|
-
"btoa": "1.2.1",
|
|
17
16
|
"chrome-har": "1.0.1",
|
|
18
17
|
"chrome-remote-interface": "0.33.2",
|
|
19
|
-
"dayjs": "1.11.13",
|
|
20
18
|
"execa": "9.5.2",
|
|
21
19
|
"fast-stats": "0.0.7",
|
|
22
20
|
"ff-test-bidi-har-export": "0.0.17",
|
|
23
|
-
"find-up": "7.0.0",
|
|
24
|
-
"get-port": "7.1.0",
|
|
25
|
-
"hasbin": "1.2.3",
|
|
26
|
-
"intel": "1.2.0",
|
|
27
21
|
"lodash.get": "4.4.2",
|
|
28
|
-
"lodash.groupby": "4.6.0",
|
|
29
|
-
"lodash.isempty": "4.4.0",
|
|
30
22
|
"lodash.merge": "4.6.2",
|
|
31
|
-
"lodash.pick": "4.4.0",
|
|
32
23
|
"lodash.set": "4.3.2",
|
|
33
24
|
"selenium-webdriver": "4.27.0",
|
|
34
25
|
"usb-power-profiling": "1.5.0",
|
|
35
26
|
"yargs": "17.7.2"
|
|
36
27
|
},
|
|
37
28
|
"optionalDependencies": {
|
|
38
|
-
"jimp": "0.22.12"
|
|
29
|
+
"@jimp/custom": "0.22.12",
|
|
30
|
+
"@jimp/png": "0.22.12",
|
|
31
|
+
"@jimp/jpeg": "0.22.12",
|
|
32
|
+
"@jimp/plugin-resize": "0.22.12",
|
|
33
|
+
"@jimp/plugin-scale": "0.22.12"
|
|
39
34
|
},
|
|
40
35
|
"devDependencies": {
|
|
41
36
|
"@types/selenium-webdriver": "4.1.25",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engineUtils.d.ts","sourceRoot":"","sources":["../../lib/support/engineUtils.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"engineUtils.d.ts","sourceRoot":"","sources":["../../lib/support/engineUtils.js"],"names":[],"mappings":"AAkFA,+EAOC;AAED,kEAKC;AAED,qFAKC;AACD,oCAEC"}
|
|
@@ -7,4 +7,5 @@ export function readFile(fileName: any): Promise<Buffer>;
|
|
|
7
7
|
export function removeDirAndFiles(dirName: any): Promise<void>;
|
|
8
8
|
export function removeByType(dir: any, type: any): Promise<void>;
|
|
9
9
|
export function findFiles(dir: any, filter: any): Promise<string[]>;
|
|
10
|
+
export function findUpSync(filenames: any, startDir?: string): string;
|
|
10
11
|
//# sourceMappingURL=fileUtil.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fileUtil.d.ts","sourceRoot":"","sources":["../../lib/support/fileUtil.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fileUtil.d.ts","sourceRoot":"","sources":["../../lib/support/fileUtil.js"],"names":[],"mappings":"AAyBA,8DAEC;AAED,kEAEC;AAED,6DAEC;AAED,uEAEC;AACD,yDAEC;AACD,yDAEC;AACD,+DAqBC;AACD,iEAUC;AACD,oEAMC;AAED,sEAcC"}
|
package/types/support/util.d.ts
CHANGED
|
@@ -4,4 +4,7 @@ export function toArray(arrayLike: any): any[];
|
|
|
4
4
|
export function jsonifyVisualProgress(visualProgress: any): any;
|
|
5
5
|
export function jsonifyKeyColorFrames(keyColorFrames: any): any;
|
|
6
6
|
export function adjustVisualProgressTimestamps(visualProgress: any, profilerStartTime: any, recordingStartTime: any): any;
|
|
7
|
+
export function localTime(): string;
|
|
8
|
+
export function pick(obj: any, keys: any): {};
|
|
9
|
+
export function isEmpty(value: any): boolean;
|
|
7
10
|
//# sourceMappingURL=util.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../lib/support/util.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../lib/support/util.js"],"names":[],"mappings":"AAGA,oGAeC;AACD,qDA2LC;AACD,+CAQC;AACD,gEAeC;AACD,gEAsBC;AACD,0HAWC;AAED,oCAmBC;AAED,8CAWC;AAED,6CAsBC"}
|