Skip to content

Commit 77fa886

Browse files
committed
review changes
1 parent bedeecf commit 77fa886

File tree

6 files changed

+15
-11
lines changed

6 files changed

+15
-11
lines changed

packages/replay/metrics/README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
Evaluates Replay impact on website performance by running a web app in Chromium via Playwright and collecting various metrics.
44

5-
The general idea is to run a web app without Sentry Replay and then run the same app again with Replay included.
6-
For both scenarios, we collect some metrics (CPU, memory, vitals) and later compare them and post as a comment in a PR.
7-
Changes in the collected, compared to previous runs from the main branch, should be evaluated on case-by-case basis when preparing and reviewing the PR.
5+
The general idea is to run a web app without Sentry Replay and then run the same app again with Sentry and another one with Sentry+Replay included.
6+
For the three scenarios, we collect some metrics (CPU, memory, vitals) and later compare them and post as a comment in a PR.
7+
Changes in the metrics, compared to previous runs from the main branch, should be evaluated on case-by-case basis when preparing and reviewing the PR.
88

99
## Resources
1010

packages/replay/metrics/src/results/metrics-stats.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import * as ss from 'simple-statistics'
22

33
import { Metrics } from '../collector';
44

5-
export type NumberProvider = (metrics: Metrics) => number;
5+
export type NumberProvider = (metrics: Metrics) => number | undefined;
66
export type AnalyticsFunction = (items: Metrics[], dataProvider: NumberProvider) => number | undefined;
77

88
export class MetricsStats {
@@ -13,20 +13,24 @@ export class MetricsStats {
1313
static memoryMax: NumberProvider = metrics => ss.max(Array.from(metrics.memory.snapshots.values()));
1414

1515
static mean: AnalyticsFunction = (items: Metrics[], dataProvider: NumberProvider) => {
16-
const numbers = MetricsStats._filteredValues(items.map(dataProvider));
16+
const numbers = MetricsStats._filteredValues(MetricsStats._collect(items, dataProvider));
1717
return numbers.length > 0 ? ss.mean(numbers) : undefined;
1818
}
1919

2020
static max: AnalyticsFunction = (items: Metrics[], dataProvider: NumberProvider) => {
21-
const numbers = MetricsStats._filteredValues(items.map(dataProvider));
21+
const numbers = MetricsStats._filteredValues(MetricsStats._collect(items, dataProvider));
2222
return numbers.length > 0 ? ss.max(numbers) : undefined;
2323
}
2424

2525
static stddev: AnalyticsFunction = (items: Metrics[], dataProvider: NumberProvider) => {
26-
const numbers = MetricsStats._filteredValues(items.map(dataProvider));
26+
const numbers = MetricsStats._filteredValues(MetricsStats._collect(items, dataProvider));
2727
return numbers.length > 0 ? ss.standardDeviation(numbers) : undefined;
2828
}
2929

30+
private static _collect(items: Metrics[], dataProvider: NumberProvider): number[] {
31+
return items.map(dataProvider).filter(v => v != undefined && !Number.isNaN(v)) as number[];
32+
}
33+
3034
// See https://en.wikipedia.org/wiki/Interquartile_range#Outliers for details on filtering.
3135
private static _filteredValues(numbers: number[]): number[] {
3236
numbers.sort((a, b) => a - b)

packages/replay/metrics/src/vitals/cls.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ class CLS {
3434
}`);
3535
}
3636

37-
public async collect(): Promise<number> {
37+
public async collect(): Promise<number | undefined> {
3838
const result = await this._page.evaluate('window.cumulativeLayoutShiftScore');
3939
return result as number;
4040
}

packages/replay/metrics/src/vitals/fid.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class FID {
2828
}`);
2929
}
3030

31-
public async collect(): Promise<number> {
31+
public async collect(): Promise<number | undefined> {
3232
const result = await this._page.evaluate('window.firstInputDelay');
3333
return result as number;
3434
}

packages/replay/metrics/src/vitals/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { LCP } from './lcp.js';
77
export { WebVitals, WebVitalsCollector };
88

99
class WebVitals {
10-
constructor(public lcp: number, public cls: number, public fid: number) { }
10+
constructor(public lcp: number | undefined, public cls: number | undefined, public fid: number | undefined) { }
1111

1212
public static fromJSON(data: Partial<WebVitals>): WebVitals {
1313
return new WebVitals(data.lcp as number, data.cls as number, data.fid as number);

packages/replay/metrics/src/vitals/lcp.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class LCP {
2828
}`);
2929
}
3030

31-
public async collect(): Promise<number> {
31+
public async collect(): Promise<number | undefined> {
3232
const result = await this._page.evaluate('window.largestContentfulPaint');
3333
return result as number;
3434
}

0 commit comments

Comments
 (0)