feat(change_detection): reimplement change detection

This commit is contained in:
vsavkin
2015-01-14 13:51:16 -08:00
parent 22653707d9
commit 9957c1338e
30 changed files with 1257 additions and 2233 deletions

View File

@ -7,7 +7,7 @@ import {
Lexer,
Parser,
ChangeDetector,
ProtoRecordRange,
ProtoChangeDetector,
ChangeDispatcher,
} from 'change_detection/change_detection';
@ -102,8 +102,8 @@ function setUpChangeDetection(iterations) {
var dispatcher = new DummyDispatcher();
var parser = new Parser(new Lexer());
var parentProto = new ProtoRecordRange();
var parentRange = parentProto.instantiate(dispatcher, MapWrapper.create());
var parentProto = new ProtoChangeDetector();
var parentCD = parentProto.instantiate(dispatcher, MapWrapper.create());
var astWithSource = [
parser.parseBinding('field0', null),
@ -119,12 +119,12 @@ function setUpChangeDetection(iterations) {
];
function proto(i) {
var prr = new ProtoRecordRange();
prr.addRecordsFromAST(astWithSource[i % 10].ast, "memo", i, false);
return prr;
var pcd = new ProtoChangeDetector();
pcd.addAst(astWithSource[i % 10].ast, "memo", i, false);
return pcd;
}
var prr = [
var pcd = [
proto(0),
proto(1),
proto(2),
@ -142,13 +142,13 @@ function setUpChangeDetection(iterations) {
var index = i % 10;
obj.setField(index, i);
var rr = prr[index].instantiate(dispatcher, null);
var rr = pcd[index].instantiate(dispatcher, null);
rr.setContext(obj);
parentRange.addRange(rr);
parentCD.addChild(rr);
}
return new ChangeDetector(parentRange);
return parentCD;
}
export function main () {

View File

@ -125,7 +125,7 @@ export function main() {
setupReflector();
var app;
var changeDetector;
var lifeCycle;
var baselineRootTreeComponent;
var count = 0;
@ -133,7 +133,7 @@ export function main() {
// TODO: We need an initial value as otherwise the getter for data.value will fail
// --> this should be already caught in change detection!
app.initData = new TreeNode('', null, null);
changeDetector.detectChanges();
lifeCycle.tick();
}
function profile(create, destroy, name) {
@ -171,14 +171,15 @@ export function main() {
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', '-'];
app.initData = buildTree(maxDepth, values, 0);
changeDetector.detectChanges();
lifeCycle.tick();
}
function noop() {}
function initNg2() {
bootstrap(AppComponent).then((injector) => {
changeDetector = injector.get(ChangeDetector);
lifeCycle = injector.get(LifeCycle);
app = injector.get(AppComponent);
bindAction('#ng2DestroyDom', ng2DestroyDom);
bindAction('#ng2CreateDom', ng2CreateDom);