From 6e9f48564f931041390e1d71e3889a77eb75828d Mon Sep 17 00:00:00 2001 From: Misko Hevery Date: Wed, 7 Jan 2015 21:58:40 -0800 Subject: [PATCH] perf: add button for profiling tree benchmark --- .../benchmarks/src/tree/tree_benchmark.html | 4 +++ modules/benchmarks/src/tree/tree_benchmark.js | 25 ++++++++++++++++++- modules/facade/src/dom.dart | 2 +- modules/facade/src/dom.es6 | 1 + 4 files changed, 30 insertions(+), 2 deletions(-) diff --git a/modules/benchmarks/src/tree/tree_benchmark.html b/modules/benchmarks/src/tree/tree_benchmark.html index a0634dd2e3..df33985731 100644 --- a/modules/benchmarks/src/tree/tree_benchmark.html +++ b/modules/benchmarks/src/tree/tree_benchmark.html @@ -6,12 +6,16 @@

+ +

Baseline tree benchmark

+ +

diff --git a/modules/benchmarks/src/tree/tree_benchmark.js b/modules/benchmarks/src/tree/tree_benchmark.js index c247bb4217..a8e34331e3 100644 --- a/modules/benchmarks/src/tree/tree_benchmark.js +++ b/modules/benchmarks/src/tree/tree_benchmark.js @@ -8,7 +8,7 @@ import {TemplateLoader} from 'core/compiler/template_loader'; import {LifeCycle} from 'core/life_cycle/life_cycle'; import {reflector} from 'reflection/reflection'; -import {DOM, document, Element} from 'facade/dom'; +import {DOM, document, window, Element} from 'facade/dom'; import {isPresent} from 'facade/lang'; var MAX_DEPTH = 9; @@ -135,6 +135,23 @@ export function main() { changeDetector.detectChanges(); } + function profile(create, destroy, name) { + return function(_) { + window.console.profile(name); + var duration = 0; + var count = 0; + while(duration < 5000) { + var start = window.performance.now(); + create(_); + duration += window.performance.now() - start; + destroy(_); + count++; + } + window.console.profileEnd(name); + window.console.log(`Iterations: ${count}; time: ${duration / count} ms / iteration`); + }; + } + function ng2CreateDom(_) { var values = count++ % 2 == 0 ? ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '*'] : @@ -144,12 +161,16 @@ export function main() { changeDetector.detectChanges(); } + function noop() {} + function initNg2() { bootstrap(AppComponent).then((injector) => { changeDetector = injector.get(ChangeDetector); app = injector.get(AppComponent); DOM.on(DOM.querySelector(document, '#ng2DestroyDom'), 'click', ng2DestroyDom); DOM.on(DOM.querySelector(document, '#ng2CreateDom'), 'click', ng2CreateDom); + DOM.on(DOM.querySelector(document, '#ng2UpdateDomProfile'), 'click', profile(ng2CreateDom, noop, 'ng2-update')); + DOM.on(DOM.querySelector(document, '#ng2CreateDomProfile'), 'click', profile(ng2CreateDom, ng2DestroyDom, 'ng2-create')); }); } @@ -170,6 +191,8 @@ export function main() { DOM.appendChild(DOM.querySelector(document, 'baseline'), baselineRootTreeComponent.element); DOM.on(DOM.querySelector(document, '#baselineDestroyDom'), 'click', baselineDestroyDom); DOM.on(DOM.querySelector(document, '#baselineCreateDom'), 'click', baselineCreateDom); + DOM.on(DOM.querySelector(document, '#baselineUpdateDomProfile'), 'click', profile(baselineCreateDom, noop, 'baseline-update')); + DOM.on(DOM.querySelector(document, '#baselineCreateDomProfile'), 'click', profile(baselineCreateDom, baselineDestroyDom, 'baseline-create')); } initNg2(); diff --git a/modules/facade/src/dom.dart b/modules/facade/src/dom.dart index 5e2b78073c..db21f02a62 100644 --- a/modules/facade/src/dom.dart +++ b/modules/facade/src/dom.dart @@ -3,7 +3,7 @@ library angular.core.facade.dom; import 'dart:html'; import 'dart:js' show JsObject; -export 'dart:html' show DocumentFragment, Node, Element, TemplateElement, Text, document, location; +export 'dart:html' show DocumentFragment, Node, Element, TemplateElement, Text, document, location, window; // TODO(tbosch): Is there a builtin one? Why is Dart // removing unknown elements by default? diff --git a/modules/facade/src/dom.es6 b/modules/facade/src/dom.es6 index cfa0c2f36b..83715aad08 100644 --- a/modules/facade/src/dom.es6 +++ b/modules/facade/src/dom.es6 @@ -1,3 +1,4 @@ +export var window = frames.window; export var DocumentFragment = window.DocumentFragment; export var Node = window.Node; export var NodeList = window.NodeList;