refactor(view_compiler): codegen DI and Queries

BREAKING CHANGE:
- Renderer:
  * renderComponent method is removed form `Renderer`, only present on `RootRenderer`
  * Renderer.setDebugInfo is removed. Renderer.createElement / createText / createTemplateAnchor
    now take the DebugInfo directly.
- Query semantics:
  * Queries don't work with dynamically loaded components.
  * e.g. for router-outlet: loaded components can't be queries via @ViewQuery,
    but router-outlet emits an event `activate` now that emits the activated component
- Exception classes and the context inside changed (renamed fields)
- DebugElement.attributes is an Object and not a Map in JS any more
- ChangeDetectorGenConfig was renamed into CompilerConfig
- AppViewManager.createEmbeddedViewInContainer / AppViewManager.createHostViewInContainer
  are removed, use the methods in ViewContainerRef instead
- Change detection order changed:
  * 1. dirty check component inputs
  * 2. dirty check content children
  * 3. update render nodes

Closes #6301
Closes #6567
This commit is contained in:
Tobias Bosch
2016-01-06 14:13:44 -08:00
parent 45f09ba686
commit 2b34c88b69
312 changed files with 14271 additions and 16566 deletions

View File

@ -1,3 +0,0 @@
library benchmarks.e2e_test.change_detection_perf;
main() {}

View File

@ -1,93 +0,0 @@
import {runClickBenchmark, verifyNoBrowserErrors} from 'angular2/src/testing/perf_util';
describe('ng2 change detection benchmark', function() {
var URL = 'benchmarks/src/change_detection/change_detection_benchmark.html';
afterEach(verifyNoBrowserErrors);
it('should log ng stats (dynamic, reads)', function(done) {
runClickBenchmark({
url: URL,
buttons: ['#ng2ChangeDetectionDynamicReads'],
id: 'ng2.changeDetection.dynamic.reads',
params: [
{name: 'numberOfChecks', value: 900000},
{name: 'iterations', value: 20, scale: 'linear'}
],
microMetrics: {'detectChangesAvg': 'avg time to detect changes (ms)'},
waitForAngular2: false
}).then(done, done.fail);
});
it('should log ng stats (dynamic, writes)', function(done) {
runClickBenchmark({
url: URL,
buttons: ['#ng2ChangeDetectionDynamicWrites'],
id: 'ng2.changeDetection.dynamic.writes',
params: [
{name: 'numberOfChecks', value: 900000},
{name: 'iterations', value: 20, scale: 'linear'}
],
microMetrics: {'detectChangesAvg': 'avg time to detect changes (ms)'},
waitForAngular2: false
}).then(done, done.fail);
});
it('should log ng stats (jit, reads)', function(done) {
runClickBenchmark({
url: URL,
buttons: ['#ng2ChangeDetectionJitReads'],
id: 'ng2.changeDetection.jit.reads',
params: [
{name: 'numberOfChecks', value: 900000},
{name: 'iterations', value: 20, scale: 'linear'}
],
microMetrics: {'detectChangesAvg': 'avg time to detect changes (ms)'},
waitForAngular2: false
}).then(done, done.fail);
});
it('should log ng stats (jit, writes)', function(done) {
runClickBenchmark({
url: URL,
buttons: ['#ng2ChangeDetectionJitWrites'],
id: 'ng2.changeDetection.jit.writes',
params: [
{name: 'numberOfChecks', value: 900000},
{name: 'iterations', value: 20, scale: 'linear'}
],
microMetrics: {'detectChangesAvg': 'avg time to detect changes (ms)'},
waitForAngular2: false
}).then(done, done.fail);
});
it('should log baseline stats (create)', function(done) {
runClickBenchmark({
url: URL,
buttons: ['#baselineChangeDetectionReads'],
id: 'baseline.changeDetection.reads',
params: [
{name: 'numberOfChecks', value: 900000},
{name: 'iterations', value: 20, scale: 'linear'}
],
microMetrics: {'detectChangesAvg': 'avg time to detect changes (ms)'},
waitForAngular2: false
}).then(done, done.fail);
});
it('should log baseline stats (update)', function(done) {
runClickBenchmark({
url: URL,
buttons: ['#baselineChangeDetectionWrites'],
id: 'baseline.changeDetection.writes',
params: [
{name: 'numberOfChecks', value: 900000},
{name: 'iterations', value: 20, scale: 'linear'}
],
microMetrics: {'detectChangesAvg': 'avg time to detect changes (ms)'},
waitForAngular2: false
}).then(done, done.fail);
});
});