Exemplo n.º 1
0
 static createBindings(childTokens) {
   return [
     bind(_CHILDREN).toAsyncFactory(
       (injector) => PromiseWrapper.all(ListWrapper.map(childTokens, (token) => injector.asyncGet(token) )),
       [Injector]
     ),
     bind(MultiReporter).toFactory(
       (children) => new MultiReporter(children),
       [_CHILDREN]
     )
   ];
 }
Exemplo n.º 2
0
function _createAppInjector(appComponentType: Type, bindings: List<Binding>, zone: VmTurnZone): Injector {
  if (isBlank(_rootInjector)) _rootInjector = new Injector(_rootBindings);
  var mergedBindings = isPresent(bindings) ?
      ListWrapper.concat(_injectorBindings(appComponentType), bindings) :
      _injectorBindings(appComponentType);
  ListWrapper.push(mergedBindings, bind(VmTurnZone).toValue(zone));
  return _rootInjector.createChild(mergedBindings);
}
Exemplo n.º 3
0
 _createBinding(bindingOrType) {
   if (bindingOrType instanceof DirectiveBinding) {
     return bindingOrType;
   } else {
     var b = bind(bindingOrType).toClass(bindingOrType);
     return DirectiveBinding.createFromBinding(b, null);
   }
 }
Exemplo n.º 4
0
 sample({id, execute, prepare, microIterations, bindings}):Promise<SampleState> {
   var sampleBindings = [
     _DEFAULT_BINDINGS,
     this._defaultBindings,
     bind(Options.SAMPLE_ID).toValue(id),
     bind(Options.EXECUTE).toValue(execute)
   ];
   if (isPresent(prepare)) {
     ListWrapper.push(sampleBindings, bind(Options.PREPARE).toValue(prepare));
   }
   if (isPresent(microIterations)) {
     ListWrapper.push(sampleBindings, bind(Options.MICRO_ITERATIONS).toValue(microIterations));
   }
   if (isPresent(bindings)) {
     ListWrapper.push(sampleBindings, bindings);
   }
   return new Injector(sampleBindings).asyncGet(Sampler)
     .then( (sampler) => sampler.sample() );
 }
Exemplo n.º 5
0
          } else if (StringWrapper.equals(name, 'script')) {
            result['scriptTime'] += duration;
          }
        }
      }
    });
    result['pureScriptTime'] = result['scriptTime'] - gcTimeInScript - renderTimeInScript;
    if (this._microIterations > 0) {
      result['microScriptTimeAvg'] = result['scriptTime'] / this._microIterations;
    }
    return isPresent(markStartEvent) && isPresent(markEndEvent) ? result : null;
  }

  _markName(index) {
    return `${_MARK_NAME_PREFIX}${index}`;
  }
}

var _MAX_RETRY_COUNT = 20;
var _MARK_NAME_PREFIX = 'benchpress';
var _SET_TIMEOUT = new OpaqueToken('PerflogMetric.setTimeout');
var _BINDINGS = [
  bind(PerflogMetric).toFactory(
    (driverExtension, setTimeout, microIterations) =>
      new PerflogMetric(driverExtension, setTimeout, microIterations),
    [WebDriverExtension, _SET_TIMEOUT, Options.MICRO_ITERATIONS]
  ),
  bind(_SET_TIMEOUT).toValue( (fn, millis) => PromiseWrapper.setTimeout(fn, millis) ),
  bind(Options.MICRO_ITERATIONS).toValue(0)
];
Exemplo n.º 6
0
function _injectorBindings(appComponentType): List<Binding> {
  return [
      bind(appDocumentToken).toValue(DOM.defaultDoc()),
      bind(appComponentAnnotatedTypeToken).toFactory((reader) => {
        // TODO(rado): investigate whether to support bindings on root component.
        return reader.read(appComponentType);
      }, [DirectiveMetadataReader]),

      bind(appElementToken).toFactory((appComponentAnnotatedType, appDocument) => {
        var selector = appComponentAnnotatedType.annotation.selector;
        var element = DOM.querySelector(appDocument, selector);
        if (isBlank(element)) {
          throw new BaseException(`The app selector "${selector}" did not match any elements`);
        }
        return element;
      }, [appComponentAnnotatedTypeToken, appDocumentToken]),

      bind(appViewToken).toAsyncFactory((changeDetection, compiler, injector, appElement,
        appComponentAnnotatedType, strategy, eventManager) => {
        var annotation = appComponentAnnotatedType.annotation;
        if(!isBlank(annotation) && !(annotation instanceof Component)) {
          var type = appComponentAnnotatedType.type;
          throw new BaseException(`Only Components can be bootstrapped; ` +
                                  `Directive of ${stringify(type)} is not a Component`);
        }
        return compiler.compile(appComponentAnnotatedType.type).then(
            (protoView) => {
          var appProtoView = ProtoView.createRootProtoView(protoView, appElement,
            appComponentAnnotatedType, changeDetection.createProtoChangeDetector('root'),
            strategy);
          // The light Dom of the app element is not considered part of
          // the changular application. Thus the context and lightDomInjector are
          // empty.
          var view = appProtoView.instantiate(null, eventManager);
          view.hydrate(injector, null, null, new Object(), null);
          return view;
        });
      }, [ChangeDetection, Compiler, Injector, appElementToken, appComponentAnnotatedTypeToken,
          ShadowDomStrategy, EventManager]),

      bind(appChangeDetectorToken).toFactory((rootView) => rootView.changeDetector,
          [appViewToken]),
      bind(appComponentType).toFactory((rootView) => rootView.elementInjectors[0].getComponent(),
          [appViewToken]),
      bind(LifeCycle).toFactory((exceptionHandler) => new LifeCycle(exceptionHandler, null, assertionsEnabled()),[ExceptionHandler]),
      bind(EventManager).toFactory((zone) => {
        var plugins = [new HammerGesturesPlugin(), new DomEventsPlugin()];
        return new EventManager(plugins, zone);
      }, [VmTurnZone]),
      bind(ShadowDomStrategy).toFactory(
          (styleUrlResolver, doc) => new EmulatedUnscopedShadowDomStrategy(styleUrlResolver, doc.head),
          [StyleUrlResolver, appDocumentToken]),
      Compiler,
      CompilerCache,
      TemplateResolver,
      bind(ChangeDetection).toValue(dynamicChangeDetection),
      TemplateLoader,
      DirectiveMetadataReader,
      Parser,
      Lexer,
      ExceptionHandler,
      bind(XHR).toValue(new XHRImpl()),
      ComponentUrlMapper,
      UrlResolver,
      StyleUrlResolver,
      StyleInliner,
      bind(CssProcessor).toFactory(() => new CssProcessor(null), []),
      PrivateComponentLoader,
  ];
}
Exemplo n.º 7
0
import {EventManager, DomEventsPlugin} from 'changular2/src/core/events/event_manager';
import {HammerGesturesPlugin} from 'changular2/src/core/events/hammer_gestures';
import {Binding} from 'changular2/src/di/binding';
import {ComponentUrlMapper} from 'changular2/src/core/compiler/component_url_mapper';
import {UrlResolver} from 'changular2/src/core/compiler/url_resolver';
import {StyleUrlResolver} from 'changular2/src/core/compiler/style_url_resolver';
import {StyleInliner} from 'changular2/src/core/compiler/style_inliner';
import {CssProcessor} from 'changular2/src/core/compiler/css_processor';
import {Component} from 'changular2/src/core/annotations/annotations';
import {PrivateComponentLoader} from 'changular2/src/core/compiler/private_component_loader';

var _rootInjector: Injector;

// Contains everything that is safe to share between applications.
var _rootBindings = [
  bind(Reflector).toValue(reflector)
];

export var appViewToken = new OpaqueToken('AppView');
export var appChangeDetectorToken = new OpaqueToken('AppChangeDetector');
export var appElementToken = new OpaqueToken('AppElement');
export var appComponentAnnotatedTypeToken = new OpaqueToken('AppComponentAnnotatedType');
export var appDocumentToken = new OpaqueToken('AppDocument');

function _injectorBindings(appComponentType): List<Binding> {
  return [
      bind(appDocumentToken).toValue(DOM.defaultDoc()),
      bind(appComponentAnnotatedTypeToken).toFactory((reader) => {
        // TODO(rado): investigate whether to support bindings on root component.
        return reader.read(appComponentType);
      }, [DirectiveMetadataReader]),
Exemplo n.º 8
0
 static createFromType(type:Type, annotation:Directive):Binding {
   var binding = bind(type).toClass(type);
   return DirectiveBinding.createFromBinding(binding, annotation);
 }
Exemplo n.º 9
0
  // TODO(tbosch): use static initializer when our transpiler supports it
  /**
   * Number of iterations that run inside the browser by user code.
   * Used for micro benchmarks.
   **/
  static get MICRO_ITERATIONS() { return _MICRO_ITERATIONS; }
  // TODO(tbosch): use static initializer when our transpiler supports it
  static get NOW() { return _NOW; }
  // TODO(tbosch): use static values when our transpiler supports them
  static get WRITE_FILE() { return _WRITE_FILE; }
}

var _SAMPLE_ID = new OpaqueToken('Options.sampleId');
var _DEFAULT_DESCRIPTION = new OpaqueToken('Options.defaultDescription');
var _SAMPLE_DESCRIPTION = new OpaqueToken('Options.sampleDescription');
var _FORCE_GC = new OpaqueToken('Options.forceGc');
var _PREPARE = new OpaqueToken('Options.prepare');
var _EXECUTE = new OpaqueToken('Options.execute');
var _CAPABILITIES = new OpaqueToken('Options.capabilities');
var _USER_AGENT = new OpaqueToken('Options.userAgent');
var _MICRO_ITERATIONS = new OpaqueToken('Options.microIterations');
var _NOW = new OpaqueToken('Options.now');
var _WRITE_FILE = new OpaqueToken('Options.writeFile');

var _DEFAULT_BINDINGS = [
  bind(_DEFAULT_DESCRIPTION).toValue({}),
  bind(_SAMPLE_DESCRIPTION).toValue({}),
  bind(_FORCE_GC).toValue(false),
  bind(_PREPARE).toValue(false),
  bind(_NOW).toValue( () => DateWrapper.now() )
];
Exemplo n.º 10
0
  _sampleSize:number;

  constructor(size) {
    super();
    this._sampleSize = size;
  }

  describe():StringMap {
    return {
      'sampleSize': this._sampleSize
    };
  }

  validate(completeSample:List<MeasureValues>):List<MeasureValues> {
    if (completeSample.length >= this._sampleSize) {
      return ListWrapper.slice(completeSample, completeSample.length - this._sampleSize, completeSample.length);
    } else {
      return null;
    }
  }

}

var _SAMPLE_SIZE = new OpaqueToken('SizeValidator.sampleSize');
var _BINDINGS = [
  bind(SizeValidator).toFactory(
    (size) => new SizeValidator(size),
    [_SAMPLE_SIZE]
  ),
  bind(_SAMPLE_SIZE).toValue(10)
];
      var xValues = [];
      var yValues = [];
      for (var i = 0; i<latestSample.length; i++) {
        // For now, we only use the array index as x value.
        // TODO(tbosch): think about whether we should use time here instead
        ListWrapper.push(xValues, i);
        ListWrapper.push(yValues, latestSample[i].values[this._metric]);
      }
      var regressionSlope = Statistic.calculateRegressionSlope(
        xValues, Statistic.calculateMean(xValues),
        yValues, Statistic.calculateMean(yValues)
      );
      return regressionSlope >= 0 ? latestSample : null;
    } else {
      return null;
    }
  }

}

var _SAMPLE_SIZE = new OpaqueToken('RegressionSlopeValidator.sampleSize');
var _METRIC = new OpaqueToken('RegressionSlopeValidator.metric');
var _BINDINGS = [
  bind(RegressionSlopeValidator).toFactory(
    (sampleSize, metric) => new RegressionSlopeValidator(sampleSize, metric),
    [_SAMPLE_SIZE, _METRIC]
  ),
  bind(_SAMPLE_SIZE).toValue(10),
  bind(_METRIC).toValue('scriptTime')
];
Exemplo n.º 12
0
    return new Injector(sampleBindings).asyncGet(Sampler)
      .then( (sampler) => sampler.sample() );
  }
}

var _DEFAULT_BINDINGS = [
  Options.DEFAULT_BINDINGS,
  Sampler.BINDINGS,
  ConsoleReporter.BINDINGS,
  RegressionSlopeValidator.BINDINGS,
  SizeValidator.BINDINGS,
  ChromeDriverExtension.BINDINGS,
  IOsDriverExtension.BINDINGS,
  PerflogMetric.BINDINGS,
  SampleDescription.BINDINGS,
  MultiReporter.createBindings([ConsoleReporter]),
  MultiMetric.createBindings([PerflogMetric]),

  Reporter.bindTo(MultiReporter),
  Validator.bindTo(RegressionSlopeValidator),
  WebDriverExtension.bindTo([ChromeDriverExtension, IOsDriverExtension]),
  Metric.bindTo(MultiMetric),

  bind(Options.CAPABILITIES).toAsyncFactory(
    (adapter) => adapter.capabilities(), [WebDriverAdapter]
  ),
  bind(Options.USER_AGENT).toAsyncFactory(
    (adapter) => adapter.executeScript('return window.navigator.userAgent;'), [WebDriverAdapter]
  )
];
Exemplo n.º 13
0
        var formattedCv = NumberWrapper.isNaN(cv) ? 'NaN' : Math.floor(cv);
        // Note: Don't use the unicode character for +- as it might cause
        // hickups consoles...
        return `${ConsoleReporter._formatNum(mean)}+-${formattedCv}%`;
      })
    );
    return PromiseWrapper.resolve(null);
  }

  _printStringRow(parts, fill = ' ') {
    this._print(
      ListWrapper.map(parts, (part) => {
        var w = this._columnWidth;
        return ConsoleReporter._lpad(part, w, fill);
      }).join(' | ')
    );
  }

}

var _PRINT = new OpaqueToken('ConsoleReporter.print');
var _COLUMN_WIDTH = new OpaqueToken('ConsoleReporter.columnWidht');
var _BINDINGS = [
  bind(ConsoleReporter).toFactory(
    (columnWidth, sampleDescription, print) => new ConsoleReporter(columnWidth, sampleDescription, print),
    [_COLUMN_WIDTH, SampleDescription, _PRINT]
  ),
  bind(_COLUMN_WIDTH).toValue(18),
  bind(_PRINT).toValue(print)
];
Exemplo n.º 14
0
    super();
    this._description = sampleDescription;
    this._path = path;
    this._writeFile = writeFile;
    this._now = now;
  }

  reportMeasureValues(measureValues:MeasureValues):Promise {
    return PromiseWrapper.resolve(null);
  }

  reportSample(completeSample:List<MeasureValues>, validSample:List<MeasureValues>):Promise {
    var content = Json.stringify({
      'description': this._description,
      'completeSample': completeSample,
      'validSample': validSample
    });
    var filePath = `${this._path}/${this._description.id}_${DateWrapper.toMillis(this._now())}.json`;
    return this._writeFile(filePath, content);
  }
}

var _PATH = new OpaqueToken('JsonFileReporter.path');
var _BINDINGS = [
  bind(JsonFileReporter).toFactory(
    (sampleDescription, path, writeFile, now) => new JsonFileReporter(sampleDescription, path, writeFile, now),
    [SampleDescription, _PATH, Options.WRITE_FILE, Options.NOW]
  ),
  bind(_PATH).toValue('.')
];