browsertime 16.17.0 → 17.0.0-beta.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.
Files changed (121) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/bin/browsertime.js +43 -43
  3. package/bin/browsertimeWebPageReplay.js +10 -9
  4. package/browserscripts/pageinfo/generator.js +1 -1
  5. package/index.js +14 -13
  6. package/lib/android/gnirehtet.js +14 -15
  7. package/lib/android/index.js +92 -89
  8. package/lib/android/root.js +6 -9
  9. package/lib/chrome/chromeDevtoolsProtocol.js +46 -45
  10. package/lib/chrome/har.js +12 -13
  11. package/lib/chrome/longTaskMetrics.js +3 -5
  12. package/lib/chrome/parseCpuTrace.js +13 -10
  13. package/lib/chrome/settings/chromeAndroidOptions.js +1 -3
  14. package/lib/chrome/settings/chromeDesktopOptions.js +1 -3
  15. package/lib/chrome/settings/traceCategories.js +1 -3
  16. package/lib/chrome/traceCategoriesParser.js +35 -36
  17. package/lib/chrome/webdriver/builder.js +18 -26
  18. package/lib/chrome/webdriver/chromium.js +56 -46
  19. package/lib/chrome/webdriver/setupChromiumOptions.js +32 -27
  20. package/lib/connectivity/humble.js +13 -14
  21. package/lib/connectivity/index.js +74 -77
  22. package/lib/connectivity/trafficShapeParser.js +31 -35
  23. package/lib/core/engine/collector.js +22 -22
  24. package/lib/core/engine/command/addText.js +24 -27
  25. package/lib/core/engine/command/android.js +7 -11
  26. package/lib/core/engine/command/cache.js +3 -4
  27. package/lib/core/engine/command/chromeDevToolsProtocol.js +20 -20
  28. package/lib/core/engine/command/click.js +48 -49
  29. package/lib/core/engine/command/debug.js +3 -4
  30. package/lib/core/engine/command/javaScript.js +18 -19
  31. package/lib/core/engine/command/measure.js +31 -37
  32. package/lib/core/engine/command/meta.js +1 -4
  33. package/lib/core/engine/command/mouse/clickAndHold.js +36 -39
  34. package/lib/core/engine/command/mouse/contextClick.js +17 -18
  35. package/lib/core/engine/command/mouse/doubleClick.js +17 -19
  36. package/lib/core/engine/command/mouse/index.js +5 -9
  37. package/lib/core/engine/command/mouse/mouseMove.js +19 -23
  38. package/lib/core/engine/command/mouse/singleClick.js +15 -19
  39. package/lib/core/engine/command/navigation.js +12 -14
  40. package/lib/core/engine/command/screenshot.js +1 -4
  41. package/lib/core/engine/command/scroll.js +4 -7
  42. package/lib/core/engine/command/select.js +26 -26
  43. package/lib/core/engine/command/set.js +25 -23
  44. package/lib/core/engine/command/stopWatch.js +5 -8
  45. package/lib/core/engine/command/switch.js +18 -20
  46. package/lib/core/engine/command/util/lcpHighlightScript.js +1 -2
  47. package/lib/core/engine/command/util/lsHighlightScript.js +1 -2
  48. package/lib/core/engine/command/wait.js +18 -18
  49. package/lib/core/engine/index.js +81 -71
  50. package/lib/core/engine/iteration.js +83 -79
  51. package/lib/core/engine/run.js +5 -9
  52. package/lib/core/pageCompleteChecks/defaultPageCompleteCheck.js +1 -2
  53. package/lib/core/pageCompleteChecks/pageCompleteCheckByInactivity.js +1 -3
  54. package/lib/core/pageCompleteChecks/spaInactivity.js +1 -3
  55. package/lib/core/seleniumRunner.js +92 -100
  56. package/lib/core/webdriver/index.js +24 -21
  57. package/lib/edge/webdriver/builder.js +21 -26
  58. package/lib/extensionserver/httpServer.js +17 -21
  59. package/lib/extensionserver/index.js +8 -12
  60. package/lib/extensionserver/setup.js +12 -12
  61. package/lib/firefox/geckoProfiler.js +27 -21
  62. package/lib/firefox/getHAR.js +7 -8
  63. package/lib/firefox/memoryReport.js +9 -11
  64. package/lib/firefox/perfStats.js +5 -7
  65. package/lib/firefox/settings/disableSafeBrowsingPreferences.js +1 -3
  66. package/lib/firefox/settings/disableTrackingProtectionPreferences.js +1 -3
  67. package/lib/firefox/settings/firefoxPreferences.js +2 -4
  68. package/lib/firefox/settings/geckoProfilerDefaults.js +5 -9
  69. package/lib/firefox/webdriver/builder.js +66 -63
  70. package/lib/firefox/webdriver/firefox.js +43 -48
  71. package/lib/safari/webdriver/builder.js +4 -5
  72. package/lib/safari/webdriver/safari.js +4 -8
  73. package/lib/screenshot/defaults.js +1 -3
  74. package/lib/screenshot/index.js +24 -21
  75. package/lib/support/browserScript.js +65 -56
  76. package/lib/support/cli.js +120 -87
  77. package/lib/support/dns.js +6 -7
  78. package/lib/support/engineUtils.js +85 -38
  79. package/lib/support/errors.js +4 -13
  80. package/lib/support/fileUtil.js +81 -68
  81. package/lib/support/filters.js +15 -20
  82. package/lib/support/getViewPort.js +6 -7
  83. package/lib/support/har/index.js +208 -216
  84. package/lib/support/images/index.js +54 -26
  85. package/lib/support/logging.js +20 -17
  86. package/lib/support/pathToFolder.js +18 -23
  87. package/lib/support/preURL.js +5 -6
  88. package/lib/support/processes.js +4 -6
  89. package/lib/support/setResourceTimingBufferSize.js +2 -4
  90. package/lib/support/statistics.js +58 -56
  91. package/lib/support/stop.js +7 -8
  92. package/lib/support/storageManager.js +44 -44
  93. package/lib/support/tcpdump.js +22 -16
  94. package/lib/support/userTiming.js +7 -13
  95. package/lib/support/util.js +204 -224
  96. package/lib/support/xvfb.js +11 -13
  97. package/lib/video/defaults.js +6 -10
  98. package/lib/video/postprocessing/finetune/addTextToVideo.js +15 -15
  99. package/lib/video/postprocessing/finetune/convertFps.js +14 -8
  100. package/lib/video/postprocessing/finetune/getFont.js +7 -9
  101. package/lib/video/postprocessing/finetune/getTimingMetrics.js +19 -18
  102. package/lib/video/postprocessing/finetune/index.js +40 -36
  103. package/lib/video/postprocessing/finetune/removeOrange.js +10 -11
  104. package/lib/video/postprocessing/visualmetrics/extraMetrics.js +17 -13
  105. package/lib/video/postprocessing/visualmetrics/getVideoMetrics.js +12 -13
  106. package/lib/video/postprocessing/visualmetrics/visualMetrics.js +117 -128
  107. package/lib/video/screenRecording/android/recorder.js +12 -17
  108. package/lib/video/screenRecording/desktop/convert.js +13 -11
  109. package/lib/video/screenRecording/desktop/desktopRecorder.js +29 -24
  110. package/lib/video/screenRecording/desktop/ffmpegRecorder.js +60 -63
  111. package/lib/video/screenRecording/desktop/osx/getSPDisplaysDataType.js +4 -6
  112. package/lib/video/screenRecording/desktop/osx/getScreen.js +9 -10
  113. package/lib/video/screenRecording/firefox/firefoxWindowRecorder.js +54 -54
  114. package/lib/video/screenRecording/ios/convertToMp4.js +10 -11
  115. package/lib/video/screenRecording/ios/iosRecorder.js +23 -21
  116. package/lib/video/screenRecording/iosSimulator/convertToMp4.js +10 -11
  117. package/lib/video/screenRecording/iosSimulator/recorder.js +10 -9
  118. package/lib/video/screenRecording/recorder.js +8 -9
  119. package/lib/video/screenRecording/setOrangeBackground.js +5 -6
  120. package/lib/video/video.js +28 -34
  121. package/package.json +19 -17
@@ -1,8 +1,8 @@
1
- 'use strict';
2
- const log = require('intel').getLogger('browsertime.command.devtoolsprotocol');
1
+ import intel from 'intel';
2
+ const log = intel.getLogger('browsertime.command.devtoolsprotocol');
3
3
 
4
4
  // https://chromedevtools.github.io/devtools-protocol/
5
- class DevToolsProtocol {
5
+ class DevelopmentToolsProtocol {
6
6
  constructor(engineDelegate, browserName) {
7
7
  this.engineDelegate = engineDelegate;
8
8
  this.browserName = browserName;
@@ -13,14 +13,14 @@ class DevToolsProtocol {
13
13
  try {
14
14
  const client = this.engineDelegate.getCDPClient();
15
15
  await client.on(event, f);
16
- } catch (e) {
16
+ } catch (error) {
17
17
  log.error(
18
18
  'Could not listen to DevToolsProtocol event %s with args %j',
19
19
  event,
20
20
  f
21
21
  );
22
- log.verbose(e);
23
- throw Error(
22
+ log.verbose(error);
23
+ throw new Error(
24
24
  `Could not listen to DevToolsProtocol event ${event} with args ${f}`
25
25
  );
26
26
  }
@@ -29,21 +29,21 @@ class DevToolsProtocol {
29
29
  }
30
30
  }
31
31
 
32
- async sendAndGet(command, args) {
32
+ async sendAndGet(command, arguments_) {
33
33
  if (this.browserName === 'chrome' || this.browserName === 'edge') {
34
34
  try {
35
35
  const client = this.engineDelegate.getCDPClient();
36
- const result = await client.send(command, args);
36
+ const result = await client.send(command, arguments_);
37
37
  return result;
38
- } catch (e) {
38
+ } catch (error) {
39
39
  log.error(
40
40
  'Could not sendAndGet to DevToolsProtocol command %s with args %j',
41
41
  command,
42
- args
42
+ arguments_
43
43
  );
44
- log.verbose(e);
45
- throw Error(
46
- `Could not sendAndGet to DevToolsProtocol command ${command} with args ${args}`
44
+ log.verbose(error);
45
+ throw new Error(
46
+ `Could not sendAndGet to DevToolsProtocol command ${command} with args ${arguments_}`
47
47
  );
48
48
  }
49
49
  } else {
@@ -51,23 +51,23 @@ class DevToolsProtocol {
51
51
  }
52
52
  }
53
53
 
54
- async send(command, args) {
54
+ async send(command, arguments_) {
55
55
  if (this.browserName === 'chrome' || this.browserName === 'edge') {
56
56
  try {
57
57
  const client = this.engineDelegate.getCDPClient();
58
- return client.send(command, args);
59
- } catch (e) {
58
+ return client.send(command, arguments_);
59
+ } catch (error) {
60
60
  log.error(
61
61
  'Could not send to DevToolsProtocol command %s with args %j',
62
62
  command,
63
- args
63
+ arguments_
64
64
  );
65
- log.verbose(e);
66
- `Could not send to DevToolsProtocol command ${command} with args ${args}`;
65
+ log.verbose(error);
66
+ `Could not send to DevToolsProtocol command ${command} with args ${arguments_}`;
67
67
  }
68
68
  } else {
69
69
  throw new Error('DevToolsProtocol only supported in Chrome and Edge');
70
70
  }
71
71
  }
72
72
  }
73
- module.exports = DevToolsProtocol;
73
+ export default DevelopmentToolsProtocol;
@@ -1,6 +1,5 @@
1
- 'use strict';
2
-
3
- const log = require('intel').getLogger('browsertime.command.click');
1
+ import intel from 'intel';
2
+ const log = intel.getLogger('browsertime.command.click');
4
3
 
5
4
  function addClick(js) {
6
5
  const trimmed = js.trim();
@@ -29,10 +28,10 @@ class Click {
29
28
  try {
30
29
  const script = `document.getElementsByClassName('${className}')[0].click();`;
31
30
  await this.browser.runScript(script, 'CUSTOM');
32
- } catch (e) {
31
+ } catch (error) {
33
32
  log.error('Could not find element by class name %s', className);
34
- log.verbose(e);
35
- throw Error('Could not find element by class name ' + className);
33
+ log.verbose(error);
34
+ throw new Error('Could not find element by class name ' + className);
36
35
  }
37
36
  }
38
37
 
@@ -47,10 +46,10 @@ class Click {
47
46
  const script = `document.getElementsByClassName('${className}')[0].click();`;
48
47
  await this.browser.runScript(script, 'CUSTOM');
49
48
  return this.browser.extraWait(this.pageCompleteCheck);
50
- } catch (e) {
49
+ } catch (error) {
51
50
  log.error('Could not find element by class name %s', className);
52
- log.verbose(e);
53
- throw Error('Could not find element by class name ' + className);
51
+ log.verbose(error);
52
+ throw new Error('Could not find element by class name ' + className);
54
53
  }
55
54
  }
56
55
 
@@ -64,10 +63,10 @@ class Click {
64
63
  try {
65
64
  const xpath = `//a[text()='${text}']`;
66
65
  return this.byXpath(xpath);
67
- } catch (e) {
66
+ } catch (error) {
68
67
  log.error('Could not find link by text %s', text);
69
- log.verbose(e);
70
- throw Error('Could not find link by text ' + text);
68
+ log.verbose(error);
69
+ throw new Error('Could not find link by text ' + text);
71
70
  }
72
71
  }
73
72
 
@@ -81,10 +80,10 @@ class Click {
81
80
  try {
82
81
  const xpath = `//a[text()='${text}']`;
83
82
  return this.byXpathAndWait(xpath);
84
- } catch (e) {
83
+ } catch (error) {
85
84
  log.error('Could not find link with text %s', text);
86
- log.verbose(e);
87
- throw Error('Could not find link by text ' + text);
85
+ log.verbose(error);
86
+ throw new Error('Could not find link by text ' + text);
88
87
  }
89
88
  }
90
89
 
@@ -98,10 +97,10 @@ class Click {
98
97
  try {
99
98
  const xpath = `//a[contains(text(),'${text}')]`;
100
99
  return this.byXpath(xpath);
101
- } catch (e) {
100
+ } catch (error) {
102
101
  log.error('Could not find link by partial text %s', text);
103
- log.verbose(e);
104
- throw Error('Could not find link by partial text ' + text);
102
+ log.verbose(error);
103
+ throw new Error('Could not find link by partial text ' + text);
105
104
  }
106
105
  }
107
106
 
@@ -115,10 +114,10 @@ class Click {
115
114
  try {
116
115
  const xpath = `//a[contains(text(),'${text}')]`;
117
116
  return this.byXpathAndWait(xpath);
118
- } catch (e) {
117
+ } catch (error) {
119
118
  log.error('Could not find link by partial text %s', text);
120
- log.verbose(e);
121
- throw Error('Could not find link by partial text ' + text);
119
+ log.verbose(error);
120
+ throw new Error('Could not find link by partial text ' + text);
122
121
  }
123
122
  }
124
123
  /**
@@ -133,10 +132,10 @@ class Click {
133
132
  const replaced = xpath.replace(/"/g, "'");
134
133
  const script = `document.evaluate("${replaced}", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.click();`;
135
134
  return this.browser.runScript(script, 'CUSTOM');
136
- } catch (e) {
135
+ } catch (error) {
137
136
  log.error('Could not find element by xpath %s', xpath);
138
- log.verbose(e);
139
- throw Error('Could not find element by xpath ' + xpath);
137
+ log.verbose(error);
138
+ throw new Error('Could not find element by xpath ' + xpath);
140
139
  }
141
140
  }
142
141
  /**.
@@ -153,10 +152,10 @@ class Click {
153
152
  const script = `document.evaluate("${replaced}", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.click();`;
154
153
  await this.browser.runScript(script, 'CUSTOM');
155
154
  return this.browser.extraWait(this.pageCompleteCheck);
156
- } catch (e) {
155
+ } catch (error) {
157
156
  log.error('Could not find element by xpath %s', xpath);
158
- log.verbose(e);
159
- throw Error('Could not find element by xpath ' + xpath);
157
+ log.verbose(error);
158
+ throw new Error('Could not find element by xpath ' + xpath);
160
159
  }
161
160
  }
162
161
 
@@ -170,10 +169,10 @@ class Click {
170
169
  try {
171
170
  const script = addClick(js);
172
171
  await this.browser.runScript(script, 'CUSTOM');
173
- } catch (e) {
172
+ } catch (error) {
174
173
  log.error('Could not find element by JavaScript %s', js);
175
- log.verbose(e);
176
- throw Error('Could not find element by JavaScript ' + js);
174
+ log.verbose(error);
175
+ throw new Error('Could not find element by JavaScript ' + js);
177
176
  }
178
177
  }
179
178
 
@@ -188,10 +187,10 @@ class Click {
188
187
  const script = addClick(js);
189
188
  await this.browser.runScript(script, 'CUSTOM');
190
189
  return this.browser.extraWait(this.pageCompleteCheck);
191
- } catch (e) {
190
+ } catch (error) {
192
191
  log.error('Could not find element by JavaScript %s', js);
193
- log.verbose(e);
194
- throw Error('Could not find element by JavaScript ' + js);
192
+ log.verbose(error);
193
+ throw new Error('Could not find element by JavaScript ' + js);
195
194
  }
196
195
  }
197
196
 
@@ -205,10 +204,10 @@ class Click {
205
204
  try {
206
205
  const script = `document.getElementById('${id}').click();`;
207
206
  await this.browser.runScript(script, 'CUSTOM');
208
- } catch (e) {
207
+ } catch (error) {
209
208
  log.error('Could not find element by id %s', id);
210
- log.verbose(e);
211
- throw Error('Could not find element by id ' + id);
209
+ log.verbose(error);
210
+ throw new Error('Could not find element by id ' + id);
212
211
  }
213
212
  }
214
213
 
@@ -222,10 +221,10 @@ class Click {
222
221
  try {
223
222
  const script = `document.querySelector("[name='${name}']").click()`;
224
223
  await this.browser.runScript(script, 'CUSTOM');
225
- } catch (e) {
224
+ } catch (error) {
226
225
  log.error('Could not find element by name %s', name);
227
- log.verbose(e);
228
- throw Error('Could not find element by name ' + name);
226
+ log.verbose(error);
227
+ throw new Error('Could not find element by name ' + name);
229
228
  }
230
229
  }
231
230
 
@@ -240,10 +239,10 @@ class Click {
240
239
  const script = `document.getElementById('${id}').click();`;
241
240
  await this.browser.runScript(script, 'CUSTOM');
242
241
  return this.browser.extraWait(this.pageCompleteCheck);
243
- } catch (e) {
242
+ } catch (error) {
244
243
  log.error('Could not find element by id %s', id);
245
- log.verbose(e);
246
- throw Error('Could not find element by id ' + id);
244
+ log.verbose(error);
245
+ throw new Error('Could not find element by id ' + id);
247
246
  }
248
247
  }
249
248
 
@@ -251,10 +250,10 @@ class Click {
251
250
  try {
252
251
  const script = `document.querySelector('${selector}').click();`;
253
252
  await this.browser.runScript(script, 'CUSTOM');
254
- } catch (e) {
253
+ } catch (error) {
255
254
  log.error('Could not click using selector %s', selector);
256
- log.verbose(e);
257
- throw Error('Could not click using selector ' + selector);
255
+ log.verbose(error);
256
+ throw new Error('Could not click using selector ' + selector);
258
257
  }
259
258
  }
260
259
 
@@ -263,11 +262,11 @@ class Click {
263
262
  const script = `document.querySelector('${selector}').click();`;
264
263
  await this.browser.runScript(script, 'CUSTOM');
265
264
  return this.browser.extraWait(this.pageCompleteCheck);
266
- } catch (e) {
265
+ } catch (error) {
267
266
  log.error('Could not click using selector %s', selector);
268
- log.verbose(e);
269
- throw Error('Could not click using selector ' + selector);
267
+ log.verbose(error);
268
+ throw new Error('Could not click using selector ' + selector);
270
269
  }
271
270
  }
272
271
  }
273
- module.exports = Click;
272
+ export default Click;
@@ -1,6 +1,5 @@
1
- 'use strict';
2
-
3
- const log = require('intel').getLogger('browsertime.command.debug');
1
+ import intel from 'intel';
2
+ const log = intel.getLogger('browsertime.command.debug');
4
3
  const delay = ms => new Promise(res => setTimeout(res, ms));
5
4
 
6
5
  class Debug {
@@ -45,4 +44,4 @@ class Debug {
45
44
  }
46
45
  }
47
46
 
48
- module.exports = Debug;
47
+ export default Debug;
@@ -1,6 +1,5 @@
1
- 'use strict';
2
-
3
- const log = require('intel').getLogger('browsertime.command.javascript');
1
+ import intel from 'intel';
2
+ const log = intel.getLogger('browsertime.command.javascript');
4
3
  class JavaScript {
5
4
  constructor(browser, pageCompleteCheck) {
6
5
  this.browser = browser;
@@ -17,10 +16,10 @@ class JavaScript {
17
16
  try {
18
17
  const value = await this.browser.runScript(js, 'CUSTOM');
19
18
  return value;
20
- } catch (e) {
19
+ } catch (error) {
21
20
  log.error('Could not run JavaScript %s ', js);
22
- log.verbose(e);
23
- throw Error(`Could not run JavaScript ${js}`);
21
+ log.verbose(error);
22
+ throw new Error(`Could not run JavaScript ${js}`);
24
23
  }
25
24
  }
26
25
 
@@ -34,10 +33,10 @@ class JavaScript {
34
33
  try {
35
34
  await this.browser.runScript(js, 'CUSTOM');
36
35
  return this.browser.extraWait(this.pageCompleteCheck);
37
- } catch (e) {
36
+ } catch (error) {
38
37
  log.error('Could not run JavaScript %s ', js);
39
- log.verbose(e);
40
- throw Error(`Could not run JavaScript ${js}`);
38
+ log.verbose(error);
39
+ throw new Error(`Could not run JavaScript ${js}`);
41
40
  }
42
41
  }
43
42
 
@@ -54,10 +53,10 @@ class JavaScript {
54
53
  'CUSTOM PRIVILEGED'
55
54
  );
56
55
  return value;
57
- } catch (e) {
56
+ } catch (error) {
58
57
  log.error('Could not run privileged JavaScript %s ', js);
59
- log.verbose(e);
60
- throw e;
58
+ log.verbose(error);
59
+ throw error;
61
60
  }
62
61
  }
63
62
 
@@ -71,10 +70,10 @@ class JavaScript {
71
70
  try {
72
71
  await this.browser.runPrivilegedScript(js, 'CUSTOM PRIVILEGED');
73
72
  return this.browser.extraWait(this.pageCompleteCheck);
74
- } catch (e) {
73
+ } catch (error) {
75
74
  log.error('Could not run privileged JavaScript %s ', js);
76
- log.verbose(e);
77
- throw e;
75
+ log.verbose(error);
76
+ throw error;
78
77
  }
79
78
  }
80
79
 
@@ -91,11 +90,11 @@ class JavaScript {
91
90
  'CUSTOM ASYNC PRIVILEGED'
92
91
  );
93
92
  return value;
94
- } catch (e) {
93
+ } catch (error) {
95
94
  log.error('Could not run async privileged JavaScript %s ', js);
96
- log.verbose(e);
97
- throw e;
95
+ log.verbose(error);
96
+ throw error;
98
97
  }
99
98
  }
100
99
  }
101
- module.exports = JavaScript;
100
+ export default JavaScript;
@@ -1,19 +1,18 @@
1
- 'use strict';
2
-
3
- const log = require('intel').getLogger('browsertime.command.measure');
4
- const get = require('lodash.get');
5
- const engineUtils = require('../../../support/engineUtils');
6
- const Video = require('../../../video/video');
7
- const merge = require('lodash.merge');
8
- const pathToFolder = require('../../../support/pathToFolder');
9
- const path = require('path');
10
- const setOrangeBackground = require('../../../video/screenRecording/setOrangeBackground');
11
- const { filterWhitelisted } = require('../../../support/userTiming');
12
- const { isAndroidConfigured, Android } = require('../../../android');
13
- const TCPDump = require('../../../support/tcpdump');
1
+ import { join } from 'node:path';
2
+ import intel from 'intel';
3
+ import get from 'lodash.get';
4
+ import merge from 'lodash.merge';
5
+ import { timestamp as _timestamp } from '../../../support/engineUtils.js';
6
+ import Video from '../../../video/video.js';
7
+ import pathToFolder from '../../../support/pathToFolder.js';
8
+ import setOrangeBackground from '../../../video/screenRecording/setOrangeBackground.js';
9
+ import { filterWhitelisted } from '../../../support/userTiming.js';
10
+ import { isAndroidConfigured, Android } from '../../../android/index.js';
11
+ import TCPDump from '../../../support/tcpdump.js';
12
+ import highlightLargestContentfulPaint from './util/lcpHighlightScript.js';
13
+ import highlightLS from './util/lsHighlightScript.js';
14
14
  const delay = ms => new Promise(res => setTimeout(res, ms));
15
- const highlightLargestContentfulPaint = require('./util/lcpHighlightScript.js');
16
- const highlightLS = require('./util/lsHighlightScript.js');
15
+ const log = intel.getLogger('browsertime.command.measure');
17
16
 
18
17
  // In some cases we could have one alias mapped to multiple URLs
19
18
  // we've seen it for login etc where the user get different query parameter
@@ -23,7 +22,7 @@ const aliasAndUrl = {};
23
22
  function getNewResult() {
24
23
  return {
25
24
  extraJson: {},
26
- timestamp: engineUtils.timestamp(),
25
+ timestamp: _timestamp(),
27
26
  extras: {}
28
27
  };
29
28
  }
@@ -191,7 +190,7 @@ class Measure {
191
190
  }
192
191
 
193
192
  this.result.push(getNewResult());
194
- this.result[this.numberOfMeasuredPages].timestamp = engineUtils.timestamp();
193
+ this.result[this.numberOfMeasuredPages].timestamp = _timestamp();
195
194
 
196
195
  if (alias || optionalAlias) {
197
196
  this.result[this.numberOfMeasuredPages].alias = alias || optionalAlias;
@@ -232,8 +231,8 @@ class Measure {
232
231
  await this.engineDelegate.beforeEachURL(this.browser, url);
233
232
  await this.browser.loadAndWait(url, this.pageCompleteCheck);
234
233
  return this.stop(url);
235
- } catch (e) {
236
- this.result[this.numberOfMeasuredPages].error = [e.name];
234
+ } catch (error) {
235
+ this.result[this.numberOfMeasuredPages].error = [error.name];
237
236
  // The page failed loading but make sure we keep track of
238
237
  // how many pages we tried to measure
239
238
  this.numberOfMeasuredPages++;
@@ -242,7 +241,7 @@ class Measure {
242
241
  // If we got an error we still should stop the video to make sure we can use it to
243
242
  // try to understand what went wrong
244
243
  await this._stopVideo(url);
245
- throw e;
244
+ throw error;
246
245
  }
247
246
  } else {
248
247
  this.areWeMeasuring = true;
@@ -267,11 +266,9 @@ class Measure {
267
266
  url
268
267
  );
269
268
  this.testedURLs[url] = this.testedURLs[url] + 1;
270
- if (url.indexOf('?') > -1) {
271
- url = url + '&browsertime_run=' + this.testedURLs[url];
272
- } else {
273
- url = url + '?browsertime_run=' + this.testedURLs[url];
274
- }
269
+ url = url.includes('?')
270
+ ? url + '&browsertime_run=' + this.testedURLs[url]
271
+ : url + '?browsertime_run=' + this.testedURLs[url];
275
272
  } else {
276
273
  this.testedURLs[url] = 1;
277
274
  }
@@ -291,7 +288,7 @@ class Measure {
291
288
 
292
289
  // We have the URL, create the data dir
293
290
  await this.storageManager.createSubDataDir(
294
- path.join(pathToFolder(url, this.options))
291
+ join(pathToFolder(url, this.options))
295
292
  );
296
293
  await this._stopVideo(url);
297
294
 
@@ -378,13 +375,10 @@ class Measure {
378
375
  !this.options.videoParams.debug &&
379
376
  this.video.getRecordingStartTime()
380
377
  ) {
381
- this.result[this.numberOfMeasuredPages].recordingStartTime = parseFloat(
382
- this.video.getRecordingStartTime()
383
- );
384
- this.result[this.numberOfMeasuredPages].timeToFirstFrame = parseInt(
385
- this.video.getTimeToFirstFrame(),
386
- 10
387
- );
378
+ this.result[this.numberOfMeasuredPages].recordingStartTime =
379
+ Number.parseFloat(this.video.getRecordingStartTime());
380
+ this.result[this.numberOfMeasuredPages].timeToFirstFrame =
381
+ Number.parseInt(this.video.getTimeToFirstFrame(), 10);
388
382
  }
389
383
 
390
384
  if (this.options.screenshot) {
@@ -397,7 +391,7 @@ class Measure {
397
391
  url,
398
392
  this.index
399
393
  );
400
- } catch (e) {
394
+ } catch {
401
395
  // not getting screenshots shouldn't result in a failed test.
402
396
  }
403
397
  }
@@ -465,8 +459,8 @@ class Measure {
465
459
  this.index
466
460
  );
467
461
  await this.browser.runScript(lcpScriptClean, 'CLEAN_LCP');
468
- } catch (e) {
469
- log.error('Could not get LCP screenshot', e);
462
+ } catch (error) {
463
+ log.error('Could not get LCP screenshot', error);
470
464
  }
471
465
  }
472
466
 
@@ -529,4 +523,4 @@ class Measure {
529
523
  }
530
524
  }
531
525
 
532
- module.exports = Measure;
526
+ export default Measure;
@@ -1,6 +1,4 @@
1
- 'use strict';
2
-
3
- class Meta {
1
+ export default class Meta {
4
2
  constructor() {}
5
3
 
6
4
  setDescription(text) {
@@ -10,4 +8,3 @@ class Meta {
10
8
  this.title = text;
11
9
  }
12
10
  }
13
- module.exports = Meta;