@@ -3,6 +3,7 @@ import * as playwright from 'playwright';
33
44import { CpuUsage , CpuUsageSampler , CpuUsageSerialized } from './perf/cpu.js' ;
55import { JsHeapUsage , JsHeapUsageSampler , JsHeapUsageSerialized } from './perf/memory.js' ;
6+ import { NetworkUsage , NetworkUsageCollector , NetworkUsageSerialized } from './perf/network.js' ;
67import { PerfMetricsSampler } from './perf/sampler.js' ;
78import { Result } from './results/result.js' ;
89import { Scenario , TestCase } from './scenarios.js' ;
@@ -28,13 +29,24 @@ const PredefinedNetworkConditions = Object.freeze({
2829} ) ;
2930
3031export class Metrics {
31- constructor ( public readonly vitals : WebVitals , public readonly cpu : CpuUsage , public readonly memory : JsHeapUsage ) { }
32-
33- public static fromJSON ( data : Partial < { vitals : Partial < WebVitals > , cpu : CpuUsageSerialized , memory : JsHeapUsageSerialized } > ) : Metrics {
32+ constructor (
33+ public readonly vitals : WebVitals ,
34+ public readonly cpu : CpuUsage ,
35+ public readonly memory : JsHeapUsage ,
36+ public readonly network : NetworkUsage ) { }
37+
38+ public static fromJSON (
39+ data : Partial < {
40+ vitals : Partial < WebVitals > ,
41+ cpu : CpuUsageSerialized ,
42+ memory : JsHeapUsageSerialized ,
43+ network : NetworkUsageSerialized
44+ } > ) : Metrics {
3445 return new Metrics (
3546 WebVitals . fromJSON ( data . vitals || { } ) ,
3647 CpuUsage . fromJSON ( data . cpu || { } ) ,
3748 JsHeapUsage . fromJSON ( data . memory || { } ) ,
49+ NetworkUsage . fromJSON ( data . network || { } ) ,
3850 ) ;
3951 }
4052}
@@ -131,7 +143,9 @@ export class MetricsCollector {
131143 const cpuSampler = new CpuUsageSampler ( perfSampler ) ;
132144 const memSampler = new JsHeapUsageSampler ( perfSampler ) ;
133145
146+ const networkCollector = await NetworkUsageCollector . create ( page ) ;
134147 const vitalsCollector = await WebVitalsCollector . create ( page ) ;
148+
135149 await scenario . run ( browser , page ) ;
136150
137151 // NOTE: FID needs some interaction to actually show a value
@@ -141,7 +155,11 @@ export class MetricsCollector {
141155 throw `Error logs in browser console:\n\t\t${ errorLogs . join ( '\n\t\t' ) } ` ;
142156 }
143157
144- return new Metrics ( vitals , cpuSampler . getData ( ) , memSampler . getData ( ) ) ;
158+ return new Metrics (
159+ vitals ,
160+ cpuSampler . getData ( ) ,
161+ memSampler . getData ( ) ,
162+ networkCollector . getData ( ) ) ;
145163 } ) ( ) , {
146164 milliseconds : 60 * 1000 ,
147165 } ) ;
0 commit comments