browsertime 27.0.2 → 27.0.4

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 CHANGED
@@ -1,5 +1,13 @@
1
1
  # Browsertime changelog (we do [semantic versioning](https://semver.org))
2
2
 
3
+ ## 27.0.4 - 2026-05-05
4
+ ### Fixed
5
+ * Fix Safari iOS video time scale [#2457](https://github.com/sitespeedio/browsertime/pull/2457). This make the video and Safari metric match.
6
+
7
+ ## 27.0.3 - 2026-05-04
8
+ ### Fixed
9
+ * Fix so INP only is calculated on interactions with an id [#2456](https://github.com/sitespeedio/browsertime/pull/2456).
10
+
3
11
  ## 27.0.2 - 2026-05-02
4
12
 
5
13
  ### Fixed
@@ -106,6 +106,13 @@
106
106
  const longestInteractionList = [];
107
107
  const longestInteractionMap = {};
108
108
  for (let entry of entries) {
109
+ // web-vitals only counts entries the browser tagged as part of a
110
+ // discrete interaction; bare events like a `pointerover` fired by
111
+ // a stationary OS cursor get interactionId === 0 and must be
112
+ // skipped. Without this guard automated runs report a synthetic
113
+ // INP whenever the cursor happens to be over content as it paints.
114
+ // See https://github.com/GoogleChrome/web-vitals/blob/main/src/lib/interactions.ts
115
+ if (!entry.interactionId) continue;
109
116
  var minLongestInteraction =
110
117
  longestInteractionList[longestInteractionList.length - 1];
111
118
  var existingInteraction = longestInteractionMap[entry.interactionId];
@@ -9,6 +9,13 @@
9
9
  const longestInteractionList = [];
10
10
  const longestInteractionMap = {};
11
11
  for (let entry of entries) {
12
+ // web-vitals only counts entries the browser tagged as part of a
13
+ // discrete interaction; bare events like a `pointerover` fired by
14
+ // a stationary OS cursor get interactionId === 0 and must be
15
+ // skipped. Without this guard automated runs report a synthetic
16
+ // INP whenever the cursor happens to be over content as it paints.
17
+ // See https://github.com/GoogleChrome/web-vitals/blob/main/src/lib/interactions.ts
18
+ if (!entry.interactionId) continue;
12
19
  var minLongestInteraction =
13
20
  longestInteractionList[longestInteractionList.length - 1];
14
21
  var existingInteraction = longestInteractionMap[entry.interactionId];
Binary file
@@ -234,7 +234,7 @@ int main(int argc, const char *argv[]) {
234
234
  signal(SIGINT, handleSignal);
235
235
  signal(SIGTERM, handleSignal);
236
236
 
237
- int framerate = 30;
237
+ int framerate = 60;
238
238
  for (int i = 1; i < argc; i++) {
239
239
  if (strcmp(argv[i], "-r") == 0 && i + 1 < argc) {
240
240
  framerate = atoi(argv[++i]);
@@ -142,7 +142,7 @@ export class Safari {
142
142
  );
143
143
 
144
144
  log.debug('Starting ios-capture server');
145
- this.iosCaptureProcess = execa(iosCaptureCommand, ['-r', '30'], {
145
+ this.iosCaptureProcess = execa(iosCaptureCommand, ['-r', '60'], {
146
146
  stdin: 'pipe',
147
147
  stdout: 'pipe',
148
148
  stderr: 'pipe',
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "browsertime",
3
3
  "description": "Get performance metrics from your web page using Browsertime.",
4
- "version": "27.0.2",
4
+ "version": "27.0.4",
5
5
  "bin": "./bin/browsertime.js",
6
6
  "type": "module",
7
7
  "types": "./types/scripting.d.ts",