@@ -36,12 +36,18 @@ export class PerflogMetric extends Metric {
3636 **/
3737 constructor ( private _driverExtension : WebDriverExtension , private _setTimeout : Function ,
3838 private _microMetrics : { [ key : string ] : any } , private _forceGc : boolean ,
39- private _captureFrames : boolean ) {
39+ private _captureFrames : boolean , private _receivedData : boolean ,
40+ private _requestCount : boolean ) {
4041 super ( ) ;
4142
4243 this . _remainingEvents = [ ] ;
4344 this . _measureCount = 0 ;
4445 this . _perfLogFeatures = _driverExtension . perfLogFeatures ( ) ;
46+ if ( ! this . _perfLogFeatures . userTiming ) {
47+ // User timing is needed for navigationStart.
48+ this . _receivedData = false ;
49+ this . _requestCount = false ;
50+ }
4551 }
4652
4753 describe ( ) : { [ key : string ] : any } {
@@ -61,6 +67,12 @@ export class PerflogMetric extends Metric {
6167 res [ 'forcedGcAmount' ] = 'forced gc amount in kbytes' ;
6268 }
6369 }
70+ if ( this . _receivedData ) {
71+ res [ 'receivedData' ] = 'encoded bytes received since navigationStart' ;
72+ }
73+ if ( this . _requestCount ) {
74+ res [ 'requestCount' ] = 'count of requests sent since navigationStart' ;
75+ }
6476 if ( this . _captureFrames ) {
6577 if ( ! this . _perfLogFeatures . frameCapture ) {
6678 var warningMsg = 'WARNING: Metric requested, but not supported by driver' ;
@@ -188,6 +200,12 @@ export class PerflogMetric extends Metric {
188200 result [ 'frameTime.smooth' ] = 0 ;
189201 }
190202 StringMapWrapper . forEach ( this . _microMetrics , ( desc , name ) => { result [ name ] = 0 ; } ) ;
203+ if ( this . _receivedData ) {
204+ result [ 'receivedData' ] = 0 ;
205+ }
206+ if ( this . _requestCount ) {
207+ result [ 'requestCount' ] = 0 ;
208+ }
191209
192210 var markStartEvent = null ;
193211 var markEndEvent = null ;
@@ -217,6 +235,22 @@ export class PerflogMetric extends Metric {
217235 markEndEvent = event ;
218236 }
219237
238+ let isInstant = StringWrapper . equals ( ph , 'I' ) || StringWrapper . equals ( ph , 'i' ) ;
239+ if ( this . _requestCount && StringWrapper . equals ( name , 'sendRequest' ) ) {
240+ result [ 'requestCount' ] += 1 ;
241+ } else if ( this . _receivedData && StringWrapper . equals ( name , 'receivedData' ) && isInstant ) {
242+ result [ 'receivedData' ] += event [ 'args' ] [ 'encodedDataLength' ] ;
243+ } else if ( StringWrapper . equals ( name , 'navigationStart' ) ) {
244+ // We count data + requests since the last navigationStart
245+ // (there might be chrome extensions loaded by selenium before our page, so there
246+ // will likely be more than one navigationStart).
247+ if ( this . _receivedData ) {
248+ result [ 'receivedData' ] = 0 ;
249+ }
250+ if ( this . _requestCount ) {
251+ result [ 'requestCount' ] = 0 ;
252+ }
253+ }
220254 if ( isPresent ( markStartEvent ) && isBlank ( markEndEvent ) &&
221255 event [ 'pid' ] === markStartEvent [ 'pid' ] ) {
222256 if ( StringWrapper . equals ( ph , 'b' ) && StringWrapper . equals ( name , _MARK_NAME_FRAME_CAPUTRE ) ) {
@@ -236,7 +270,7 @@ export class PerflogMetric extends Metric {
236270 frameCaptureEndEvent = event ;
237271 }
238272
239- if ( StringWrapper . equals ( ph , 'I' ) || StringWrapper . equals ( ph , 'i' ) ) {
273+ if ( isInstant ) {
240274 if ( isPresent ( frameCaptureStartEvent ) && isBlank ( frameCaptureEndEvent ) &&
241275 StringWrapper . equals ( name , 'frame' ) ) {
242276 frameTimestamps . push ( event [ 'ts' ] ) ;
@@ -332,14 +366,17 @@ var _FRAME_TIME_SMOOTH_THRESHOLD = 17;
332366var _PROVIDERS = [
333367 bind ( PerflogMetric )
334368 . toFactory (
335- ( driverExtension , setTimeout , microMetrics , forceGc , captureFrames ) =>
336- new PerflogMetric ( driverExtension , setTimeout , microMetrics , forceGc , captureFrames ) ,
369+ ( driverExtension , setTimeout , microMetrics , forceGc , captureFrames , receivedData ,
370+ requestCount ) => new PerflogMetric ( driverExtension , setTimeout , microMetrics , forceGc ,
371+ captureFrames , receivedData , requestCount ) ,
337372 [
338373 WebDriverExtension ,
339374 _SET_TIMEOUT ,
340375 Options . MICRO_METRICS ,
341376 Options . FORCE_GC ,
342- Options . CAPTURE_FRAMES
377+ Options . CAPTURE_FRAMES ,
378+ Options . RECEIVED_DATA ,
379+ Options . REQUEST_COUNT
343380 ] ) ,
344381 provide ( _SET_TIMEOUT , { useValue : ( fn , millis ) => TimerWrapper . setTimeout ( fn , millis ) } )
345382] ;
0 commit comments