@@ -7,6 +7,7 @@ import {AnnotatedType} from 'core/compiler/annotated_type';
77
88import { Parser } from 'change_detection/parser/parser' ;
99import { Lexer } from 'change_detection/parser/lexer' ;
10+ import { ProtoRecordRange } from 'change_detection/record_range' ;
1011
1112import { Compiler } from 'core/compiler/compiler' ;
1213import { DirectiveMetadataReader } from 'core/compiler/directive_metadata_reader' ;
@@ -15,12 +16,70 @@ import {Component} from 'core/annotations/annotations';
1516import { Decorator } from 'core/annotations/annotations' ;
1617import { TemplateConfig } from 'core/annotations/template_config' ;
1718
19+ import { reflector } from 'reflection/reflection' ;
20+
1821var COUNT = 30 ;
1922
2023var compiler ;
2124var annotatedComponent ;
2225
2326function setup ( ) {
27+ reflector . registerType ( BenchmarkComponent , {
28+ "factory" : ( ) => new BenchmarkComponent ( ) ,
29+ "parameters" : [ ] ,
30+ "annotations" : [ new Component ( { template : new TemplateConfig ( { directives : [ Dir0 , Dir1 , Dir2 , Dir3 , Dir4 ] } ) } ) ]
31+ } ) ;
32+
33+ reflector . registerType ( Dir0 , {
34+ "factory" : ( ) => new Dir0 ( ) ,
35+ "parameters" : [ ] ,
36+ "annotations" : [ new Decorator ( { selector : '[dir0]' , bind : { 'attr0' : 'prop' } } ) ]
37+ } ) ;
38+
39+ reflector . registerType ( Dir1 , {
40+ "factory" : ( dir0 ) => new Dir1 ( dir0 ) ,
41+ "parameters" : [ [ Dir0 ] ] ,
42+ "annotations" : [ new Decorator ( { selector : '[dir1]' , bind : { 'attr1' : 'prop' } } ) ]
43+ } ) ;
44+
45+ reflector . registerType ( Dir2 , {
46+ "factory" : ( dir1 ) => new Dir2 ( dir1 ) ,
47+ "parameters" : [ [ Dir1 ] ] ,
48+ "annotations" : [ new Decorator ( { selector : '[dir2]' , bind : { 'attr2' : 'prop' } } ) ]
49+ } ) ;
50+
51+ reflector . registerType ( Dir3 , {
52+ "factory" : ( dir2 ) => new Dir3 ( dir2 ) ,
53+ "parameters" : [ [ Dir2 ] ] ,
54+ "annotations" : [ new Decorator ( { selector : '[dir3]' , bind : { 'attr3' : 'prop' } } ) ]
55+ } ) ;
56+
57+ reflector . registerType ( Dir4 , {
58+ "factory" : ( dir3 ) => new Dir4 ( dir3 ) ,
59+ "parameters" : [ [ Dir3 ] ] ,
60+ "annotations" : [ new Decorator ( { selector : '[dir4]' , bind : { 'attr4' : 'prop' } } ) ]
61+ } ) ;
62+
63+ reflector . registerGetters ( {
64+ "inter0" : ( a ) => a . inter0 , "inter1" : ( a ) => a . inter1 ,
65+ "inter2" : ( a ) => a . inter2 , "inter3" : ( a ) => a . inter3 , "inter4" : ( a ) => a . inter4 ,
66+
67+ "value0" : ( a ) => a . value0 , "value1" : ( a ) => a . value1 ,
68+ "value2" : ( a ) => a . value2 , "value3" : ( a ) => a . value3 , "value4" : ( a ) => a . value4 ,
69+
70+ "prop" : ( a ) => a . prop
71+ } ) ;
72+
73+ reflector . registerSetters ( {
74+ "inter0" : ( a , v ) => a . inter0 = v , "inter1" : ( a , v ) => a . inter1 = v ,
75+ "inter2" : ( a , v ) => a . inter2 = v , "inter3" : ( a , v ) => a . inter3 = v , "inter4" : ( a , v ) => a . inter4 = v ,
76+
77+ "value0" : ( a , v ) => a . value0 = v , "value1" : ( a , v ) => a . value1 = v ,
78+ "value2" : ( a , v ) => a . value2 = v , "value3" : ( a , v ) => a . value3 = v , "value4" : ( a , v ) => a . value4 = v ,
79+
80+ "prop" : ( a , v ) => a . prop = v
81+ } ) ;
82+
2483 var reader = new CachingDirectiveMetadataReader ( ) ;
2584 compiler = new Compiler ( null , reader , new Parser ( new Lexer ( ) ) ) ;
2685 annotatedComponent = reader . annotatedType ( BenchmarkComponent ) ;
@@ -48,6 +107,19 @@ export function main() {
48107 compiler . compileWithCache ( null , annotatedComponent , cloned ) ;
49108 } ) ;
50109 } ) ;
110+
111+ benchmark ( `instantiate 5*${ COUNT } element with bindings` , function ( ) {
112+ var template = loadTemplate ( 'templateWithBindings' , COUNT ) ;
113+ var protoView = compiler . compileWithCache ( null , annotatedComponent , template ) ;
114+ var rootRecordRange = new ProtoRecordRange ( ) . instantiate ( null , new Object ( ) ) ;
115+
116+ benchmarkStep ( 'run' , function ( ) {
117+ var view = protoView . instantiate ( null , null , null ) ;
118+ // also include adding / removing the RecordRange from the parent in the benchmark.
119+ rootRecordRange . addRange ( view . recordRange ) ;
120+ view . recordRange . remove ( ) ;
121+ } ) ;
122+ } ) ;
51123}
52124
53125function loadTemplate ( templateId , repeatCount ) {
@@ -90,31 +162,39 @@ class Dir0 {}
90162 'attr1' : 'prop'
91163 }
92164} )
93- class Dir1 { }
165+ class Dir1 {
166+ constructor ( dir0 :Dir0 ) { }
167+ }
94168
95169@Decorator ( {
96170 selector : '[dir2]' ,
97171 bind : {
98172 'attr2' : 'prop'
99173 }
100174} )
101- class Dir2 { }
175+ class Dir2 {
176+ constructor ( dir1 :Dir1 ) { }
177+ }
102178
103179@Decorator ( {
104180 selector : '[dir3]' ,
105181 bind : {
106182 'attr3' : 'prop'
107183 }
108184} )
109- class Dir3 { }
185+ class Dir3 {
186+ constructor ( dir2 :Dir2 ) { }
187+ }
110188
111189@Decorator ( {
112190 selector : '[dir4]' ,
113191 bind : {
114192 'attr4' : 'prop'
115193 }
116194} )
117- class Dir4 { }
195+ class Dir4 {
196+ constructor ( dir3 :Dir3 ) { }
197+ }
118198
119199@Component ( {
120200 template : new TemplateConfig ( {
0 commit comments