@@ -36,12 +36,18 @@ export class PerflogMetric extends Metric {
36
36
**/
37
37
constructor ( private _driverExtension : WebDriverExtension , private _setTimeout : Function ,
38
38
private _microMetrics : { [ key : string ] : any } , private _forceGc : boolean ,
39
- private _captureFrames : boolean ) {
39
+ private _captureFrames : boolean , private _receivedData : boolean ,
40
+ private _requestCount : boolean ) {
40
41
super ( ) ;
41
42
42
43
this . _remainingEvents = [ ] ;
43
44
this . _measureCount = 0 ;
44
45
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
+ }
45
51
}
46
52
47
53
describe ( ) : { [ key : string ] : any } {
@@ -61,6 +67,12 @@ export class PerflogMetric extends Metric {
61
67
res [ 'forcedGcAmount' ] = 'forced gc amount in kbytes' ;
62
68
}
63
69
}
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
+ }
64
76
if ( this . _captureFrames ) {
65
77
if ( ! this . _perfLogFeatures . frameCapture ) {
66
78
var warningMsg = 'WARNING: Metric requested, but not supported by driver' ;
@@ -188,6 +200,12 @@ export class PerflogMetric extends Metric {
188
200
result [ 'frameTime.smooth' ] = 0 ;
189
201
}
190
202
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
+ }
191
209
192
210
var markStartEvent = null ;
193
211
var markEndEvent = null ;
@@ -217,6 +235,22 @@ export class PerflogMetric extends Metric {
217
235
markEndEvent = event ;
218
236
}
219
237
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
+ }
220
254
if ( isPresent ( markStartEvent ) && isBlank ( markEndEvent ) &&
221
255
event [ 'pid' ] === markStartEvent [ 'pid' ] ) {
222
256
if ( StringWrapper . equals ( ph , 'b' ) && StringWrapper . equals ( name , _MARK_NAME_FRAME_CAPUTRE ) ) {
@@ -236,7 +270,7 @@ export class PerflogMetric extends Metric {
236
270
frameCaptureEndEvent = event ;
237
271
}
238
272
239
- if ( StringWrapper . equals ( ph , 'I' ) || StringWrapper . equals ( ph , 'i' ) ) {
273
+ if ( isInstant ) {
240
274
if ( isPresent ( frameCaptureStartEvent ) && isBlank ( frameCaptureEndEvent ) &&
241
275
StringWrapper . equals ( name , 'frame' ) ) {
242
276
frameTimestamps . push ( event [ 'ts' ] ) ;
@@ -332,14 +366,17 @@ var _FRAME_TIME_SMOOTH_THRESHOLD = 17;
332
366
var _PROVIDERS = [
333
367
bind ( PerflogMetric )
334
368
. 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 ) ,
337
372
[
338
373
WebDriverExtension ,
339
374
_SET_TIMEOUT ,
340
375
Options . MICRO_METRICS ,
341
376
Options . FORCE_GC ,
342
- Options . CAPTURE_FRAMES
377
+ Options . CAPTURE_FRAMES ,
378
+ Options . RECEIVED_DATA ,
379
+ Options . REQUEST_COUNT
343
380
] ) ,
344
381
provide ( _SET_TIMEOUT , { useValue : ( fn , millis ) => TimerWrapper . setTimeout ( fn , millis ) } )
345
382
] ;
0 commit comments