diff --git a/modules/benchmarks/src/tree/tree_benchmark.js b/modules/benchmarks/src/tree/tree_benchmark.js index 26550b7f98..b667fa593c 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, window, Element} from 'facade/dom'; +import {DOM, document, window, Element, gc} from 'facade/dom'; import {isPresent} from 'facade/lang'; var MAX_DEPTH = 9; @@ -137,18 +137,29 @@ export function main() { function profile(create, destroy, name) { return function(_) { - window.console.profile(name); + window.console.profile(name + ' w GC'); var duration = 0; - var downCount = 200; var count = 0; - while(downCount--) { + while(count++ < 150) { + gc(); var start = window.performance.now(); create(_); duration += window.performance.now() - start; destroy(_); - count++; } - window.console.profileEnd(name); + window.console.profileEnd(name + ' w GC'); + window.console.log(`Iterations: ${count}; time: ${duration / count} ms / iteration`); + + window.console.profile(name + ' w/o GC'); + duration = 0; + count = 0; + while(count++ < 150) { + var start = window.performance.now(); + create(_); + duration += window.performance.now() - start; + destroy(_); + } + window.console.profileEnd(name + ' w/o GC'); window.console.log(`Iterations: ${count}; time: ${duration / count} ms / iteration`); }; } @@ -227,6 +238,7 @@ var BASELINE_IF_TEMPLATE = DOM.createTemplate( // http://jsperf.com/nextsibling-vs-childnodes class BaseLineTreeComponent { + element:Element; value:BaseLineInterpolation; left:BaseLineIf; right:BaseLineIf; diff --git a/modules/facade/src/dom.dart b/modules/facade/src/dom.dart index db21f02a62..1b247a2016 100644 --- a/modules/facade/src/dom.dart +++ b/modules/facade/src/dom.dart @@ -1,7 +1,7 @@ library angular.core.facade.dom; import 'dart:html'; -import 'dart:js' show JsObject; +import 'dart:js' show JsObject, context; export 'dart:html' show DocumentFragment, Node, Element, TemplateElement, Text, document, location, window; @@ -11,6 +11,15 @@ class IdentitySanitizer implements NodeTreeSanitizer { void sanitizeTree(Node node) {} } +var _window = context['window']; +var _gc = context['gc']; + +gc() { + if (_gc != null) { + _gc.apply(const []); + } +} + final identitySanitizer = new IdentitySanitizer(); class DOM { diff --git a/modules/facade/src/dom.es6 b/modules/facade/src/dom.es6 index 83715aad08..aa06c390ef 100644 --- a/modules/facade/src/dom.es6 +++ b/modules/facade/src/dom.es6 @@ -7,6 +7,7 @@ export var Element = window.HTMLElement; export var TemplateElement = window.HTMLTemplateElement; export var document = window.document; export var location = window.location; +export var gc = window.gc ? () => window.gc() : () => null; import {List, MapWrapper, ListWrapper} from 'facade/collection';