refactor(benchpress): remove facades from chrome_driver_extension

This commit is contained in:
Tobias Bosch 2016-09-14 17:59:47 -07:00 committed by Alex Eagle
parent cfc12c6539
commit 93054d4e3d

View File

@ -9,13 +9,9 @@
import {Inject, Injectable} from '@angular/core'; import {Inject, Injectable} from '@angular/core';
import {Options} from '../common_options'; import {Options} from '../common_options';
import {ListWrapper, StringMapWrapper} from '../facade/collection';
import {NumberWrapper, StringWrapper, isBlank, isPresent} from '../facade/lang';
import {WebDriverAdapter} from '../web_driver_adapter'; import {WebDriverAdapter} from '../web_driver_adapter';
import {PerfLogEvent, PerfLogFeatures, WebDriverExtension} from '../web_driver_extension'; import {PerfLogEvent, PerfLogFeatures, WebDriverExtension} from '../web_driver_extension';
/** /**
* Set the following 'traceCategories' to collect metrics in Chrome: * Set the following 'traceCategories' to collect metrics in Chrome:
* 'v8,blink.console,disabled-by-default-devtools.timeline,devtools.timeline' * 'v8,blink.console,disabled-by-default-devtools.timeline,devtools.timeline'
@ -35,18 +31,18 @@ export class ChromeDriverExtension extends WebDriverExtension {
} }
private _parseChromeVersion(userAgent: string): number { private _parseChromeVersion(userAgent: string): number {
if (isBlank(userAgent)) { if (!userAgent) {
return -1; return -1;
} }
var v = StringWrapper.split(userAgent, /Chrom(e|ium)\//g)[2]; var v = userAgent.split(/Chrom(e|ium)\//g)[2];
if (isBlank(v)) { if (!v) {
return -1; return -1;
} }
v = v.split('.')[0]; v = v.split('.')[0];
if (isBlank(v)) { if (!v) {
return -1; return -1;
} }
return NumberWrapper.parseInt(v, 10); return parseInt(v, 10);
} }
gc() { return this._driver.executeScript('window.gc()'); } gc() { return this._driver.executeScript('window.gc()'); }
@ -57,7 +53,7 @@ export class ChromeDriverExtension extends WebDriverExtension {
timeEnd(name: string, restartName: string = null): Promise<any> { timeEnd(name: string, restartName: string = null): Promise<any> {
var script = `console.timeEnd('${name}');`; var script = `console.timeEnd('${name}');`;
if (isPresent(restartName)) { if (restartName) {
script += `console.time('${restartName}');`; script += `console.time('${restartName}');`;
} }
return this._driver.executeScript(script); return this._driver.executeScript(script);
@ -74,10 +70,10 @@ export class ChromeDriverExtension extends WebDriverExtension {
var events: PerfLogEvent[] = []; var events: PerfLogEvent[] = [];
entries.forEach(entry => { entries.forEach(entry => {
var message = JSON.parse(entry['message'])['message']; var message = JSON.parse(entry['message'])['message'];
if (StringWrapper.equals(message['method'], 'Tracing.dataCollected')) { if (message['method'] === 'Tracing.dataCollected') {
events.push(message['params']); events.push(message['params']);
} }
if (StringWrapper.equals(message['method'], 'Tracing.bufferUsage')) { if (message['method'] === 'Tracing.bufferUsage') {
throw new Error('The DevTools trace buffer filled during the test!'); throw new Error('The DevTools trace buffer filled during the test!');
} }
}); });
@ -87,7 +83,7 @@ export class ChromeDriverExtension extends WebDriverExtension {
private _convertPerfRecordsToEvents( private _convertPerfRecordsToEvents(
chromeEvents: Array<{[key: string]: any}>, normalizedEvents: PerfLogEvent[] = null) { chromeEvents: Array<{[key: string]: any}>, normalizedEvents: PerfLogEvent[] = null) {
if (isBlank(normalizedEvents)) { if (!normalizedEvents) {
normalizedEvents = []; normalizedEvents = [];
} }
var majorGCPids = {}; var majorGCPids = {};
@ -137,8 +133,8 @@ export class ChromeDriverExtension extends WebDriverExtension {
var ph = event['ph']; var ph = event['ph'];
if (this._isEvent( if (this._isEvent(
categories, name, ['disabled-by-default-devtools.timeline'], 'FunctionCall') && categories, name, ['disabled-by-default-devtools.timeline'], 'FunctionCall') &&
(isBlank(args) || isBlank(args['data']) || (!args || !args['data'] ||
!StringWrapper.equals(args['data']['scriptName'], 'InjectedScript'))) { args['data']['scriptName'] !== 'InjectedScript')) {
return normalizeEvent(event, {'name': 'script'}); return normalizeEvent(event, {'name': 'script'});
} else if ( } else if (
this._isEvent( this._isEvent(
@ -151,16 +147,16 @@ export class ChromeDriverExtension extends WebDriverExtension {
} else if (this._isEvent( } else if (this._isEvent(
categories, name, ['disabled-by-default-devtools.timeline'], 'GCEvent')) { categories, name, ['disabled-by-default-devtools.timeline'], 'GCEvent')) {
var normArgs: {[key: string]: any} = { var normArgs: {[key: string]: any} = {
'usedHeapSize': isPresent(args['usedHeapSizeAfter']) ? args['usedHeapSizeAfter'] : 'usedHeapSize': args['usedHeapSizeAfter'] ? args['usedHeapSizeAfter'] :
args['usedHeapSizeBefore'] args['usedHeapSizeBefore']
}; };
if (StringWrapper.equals(ph, 'E')) { if (ph === 'E') {
normArgs['majorGc'] = isPresent(majorGCPids[pid]) && majorGCPids[pid]; normArgs['majorGc'] = majorGCPids[pid] && majorGCPids[pid];
} }
majorGCPids[pid] = false; majorGCPids[pid] = false;
return normalizeEvent(event, {'name': 'gc', 'args': normArgs}); return normalizeEvent(event, {'name': 'gc', 'args': normArgs});
} else if ( } else if (
this._isEvent(categories, name, ['v8'], 'majorGC') && StringWrapper.equals(ph, 'B')) { this._isEvent(categories, name, ['v8'], 'majorGC') && ph === 'B') {
majorGCPids[pid] = true; majorGCPids[pid] = true;
} }
return null; // nothing useful in this event return null; // nothing useful in this event
@ -172,22 +168,22 @@ export class ChromeDriverExtension extends WebDriverExtension {
if (this._isEvent(categories, name, ['devtools.timeline', 'v8'], 'MajorGC')) { if (this._isEvent(categories, name, ['devtools.timeline', 'v8'], 'MajorGC')) {
var normArgs = { var normArgs = {
'majorGc': true, 'majorGc': true,
'usedHeapSize': isPresent(args['usedHeapSizeAfter']) ? args['usedHeapSizeAfter'] : 'usedHeapSize': args['usedHeapSizeAfter'] !== undefined ? args['usedHeapSizeAfter'] :
args['usedHeapSizeBefore'] args['usedHeapSizeBefore']
}; };
return normalizeEvent(event, {'name': 'gc', 'args': normArgs}); return normalizeEvent(event, {'name': 'gc', 'args': normArgs});
} else if (this._isEvent(categories, name, ['devtools.timeline', 'v8'], 'MinorGC')) { } else if (this._isEvent(categories, name, ['devtools.timeline', 'v8'], 'MinorGC')) {
var normArgs = { var normArgs = {
'majorGc': false, 'majorGc': false,
'usedHeapSize': isPresent(args['usedHeapSizeAfter']) ? args['usedHeapSizeAfter'] : 'usedHeapSize': args['usedHeapSizeAfter'] !== undefined ? args['usedHeapSizeAfter'] :
args['usedHeapSizeBefore'] args['usedHeapSizeBefore']
}; };
return normalizeEvent(event, {'name': 'gc', 'args': normArgs}); return normalizeEvent(event, {'name': 'gc', 'args': normArgs});
} else if ( } else if (
this._isEvent(categories, name, ['devtools.timeline'], 'FunctionCall') && this._isEvent(categories, name, ['devtools.timeline'], 'FunctionCall') &&
(isBlank(args) || isBlank(args['data']) || (!args || !args['data'] ||
(!StringWrapper.equals(args['data']['scriptName'], 'InjectedScript') && (args['data']['scriptName'] !== 'InjectedScript' &&
!StringWrapper.equals(args['data']['scriptName'], '')))) { args['data']['scriptName'] !== ''))) {
return normalizeEvent(event, {'name': 'script'}); return normalizeEvent(event, {'name': 'script'});
} else if (this._isEvent( } else if (this._isEvent(
categories, name, ['devtools.timeline', 'blink'], 'UpdateLayoutTree')) { categories, name, ['devtools.timeline', 'blink'], 'UpdateLayoutTree')) {
@ -216,9 +212,9 @@ export class ChromeDriverExtension extends WebDriverExtension {
eventCategories: string[], eventName: string, expectedCategories: string[], eventCategories: string[], eventName: string, expectedCategories: string[],
expectedName: string = null): boolean { expectedName: string = null): boolean {
var hasCategories = expectedCategories.reduce( var hasCategories = expectedCategories.reduce(
(value, cat) => { return value && ListWrapper.contains(eventCategories, cat); }, true); (value, cat) => { return value && eventCategories.indexOf(cat) !== -1; }, true);
return isBlank(expectedName) ? hasCategories : return !expectedName ? hasCategories :
hasCategories && StringWrapper.equals(eventName, expectedName); hasCategories && eventName === expectedName;
} }
perfLogFeatures(): PerfLogFeatures { perfLogFeatures(): PerfLogFeatures {
@ -227,27 +223,29 @@ export class ChromeDriverExtension extends WebDriverExtension {
supports(capabilities: {[key: string]: any}): boolean { supports(capabilities: {[key: string]: any}): boolean {
return this._majorChromeVersion != -1 && return this._majorChromeVersion != -1 &&
StringWrapper.equals(capabilities['browserName'].toLowerCase(), 'chrome'); capabilities['browserName'].toLowerCase() === 'chrome';
} }
} }
function normalizeEvent( function normalizeEvent(
chromeEvent: {[key: string]: any}, data: {[key: string]: any}): PerfLogEvent { chromeEvent: {[key: string]: any}, data: {[key: string]: any}): PerfLogEvent {
var ph = chromeEvent['ph']; var ph = chromeEvent['ph'];
if (StringWrapper.equals(ph, 'S')) { if (ph === 'S') {
ph = 'b'; ph = 'b';
} else if (StringWrapper.equals(ph, 'F')) { } else if (ph === 'F') {
ph = 'e'; ph = 'e';
} }
var result: {[key: string]: any} = var result: {[key: string]: any} =
{'pid': chromeEvent['pid'], 'ph': ph, 'cat': 'timeline', 'ts': chromeEvent['ts'] / 1000}; {'pid': chromeEvent['pid'], 'ph': ph, 'cat': 'timeline', 'ts': chromeEvent['ts'] / 1000};
if (chromeEvent['ph'] === 'X') { if (chromeEvent['ph'] === 'X') {
var dur = chromeEvent['dur']; var dur = chromeEvent['dur'];
if (isBlank(dur)) { if (dur === undefined) {
dur = chromeEvent['tdur']; dur = chromeEvent['tdur'];
} }
result['dur'] = isBlank(dur) ? 0.0 : dur / 1000; result['dur'] = !dur ? 0.0 : dur / 1000;
}
for (let prop in data) {
result[prop] = data[prop];
} }
StringMapWrapper.forEach(data, (value, prop) => { result[prop] = value; });
return result; return result;
} }