| 
									
										
										
										
											2016-08-26 12:27:24 -07:00
										 |  |  | /** | 
					
						
							|  |  |  |  * @license | 
					
						
							|  |  |  |  * Copyright Google Inc. All Rights Reserved. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Use of this source code is governed by an MIT-style license that can be | 
					
						
							|  |  |  |  * found in the LICENSE file at https://angular.io/license
 | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2015-05-29 21:40:15 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-30 09:29:39 -07:00
										 |  |  | import {runBenchmark, verifyNoBrowserErrors} from 'e2e_util/perf_util'; | 
					
						
							| 
									
										
										
										
											2016-11-10 18:13:11 -08:00
										 |  |  | import {$} from 'protractor'; | 
					
						
							| 
									
										
										
										
											2015-05-29 21:40:15 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-01 16:56:45 -07:00
										 |  |  | interface Worker { | 
					
						
							|  |  |  |   id: string; | 
					
						
							|  |  |  |   prepare?(): void; | 
					
						
							|  |  |  |   work(): void; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const CreateOnlyWorker: Worker = { | 
					
						
							|  |  |  |   id: 'createOnly', | 
					
						
							|  |  |  |   prepare: () => $('#destroyDom').click(), | 
					
						
							|  |  |  |   work: () => $('#createDom').click() | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const CreateAndDestroyWorker: Worker = { | 
					
						
							|  |  |  |   id: 'createDestroy', | 
					
						
							|  |  |  |   work: () => { | 
					
						
							|  |  |  |     $('#createDom').click(); | 
					
						
							|  |  |  |     $('#destroyDom').click(); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const UpdateWorker: Worker = { | 
					
						
							|  |  |  |   id: 'update', | 
					
						
							|  |  |  |   work: () => $('#createDom').click() | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-30 14:17:37 -07:00
										 |  |  | describe('tree benchmark perf', () => { | 
					
						
							| 
									
										
										
										
											2015-05-29 21:40:15 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-26 12:27:24 -07:00
										 |  |  |   afterEach(verifyNoBrowserErrors); | 
					
						
							| 
									
										
										
										
											2015-05-29 21:40:15 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-01 16:56:45 -07:00
										 |  |  |   [CreateOnlyWorker, CreateAndDestroyWorker, UpdateWorker].forEach((worker) => { | 
					
						
							|  |  |  |     describe(worker.id, () => { | 
					
						
							| 
									
										
										
										
											2015-05-29 21:40:15 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-01 16:56:45 -07:00
										 |  |  |       it('should run for ng2', (done) => { | 
					
						
							|  |  |  |         runTreeBenchmark({ | 
					
						
							|  |  |  |           id: `deepTree.ng2.${worker.id}`, | 
					
						
							|  |  |  |           url: 'all/benchmarks/src/tree/ng2/index.html', | 
					
						
							| 
									
										
										
										
											2016-09-30 09:09:31 -07:00
										 |  |  |           work: worker.work, | 
					
						
							|  |  |  |           prepare: worker.prepare, | 
					
						
							|  |  |  |         }).then(done, done.fail); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-20 13:10:57 -08:00
										 |  |  |       it('should run for ng2 next', (done) => { | 
					
						
							|  |  |  |         runTreeBenchmark({ | 
					
						
							|  |  |  |           id: `deepTree.ng2.next.${worker.id}`, | 
					
						
							|  |  |  |           url: 'all/benchmarks/src/tree/ng2_next/index.html', | 
					
						
							|  |  |  |           ignoreBrowserSynchronization: true, | 
					
						
							|  |  |  |           work: worker.work, | 
					
						
							|  |  |  |           prepare: worker.prepare, | 
					
						
							|  |  |  |           // Can't use bundles as we use non exported code
 | 
					
						
							|  |  |  |           extraParams: [{name: 'bundles', value: false}] | 
					
						
							|  |  |  |         }).then(done, done.fail); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-30 09:09:31 -07:00
										 |  |  |       it('should run for ng2 ftl', (done) => { | 
					
						
							|  |  |  |         runTreeBenchmark({ | 
					
						
							|  |  |  |           id: `deepTree.ng2.ftl.${worker.id}`, | 
					
						
							|  |  |  |           url: 'all/benchmarks/src/tree/ng2_ftl/index.html', | 
					
						
							|  |  |  |           work: worker.work, | 
					
						
							|  |  |  |           prepare: worker.prepare, | 
					
						
							|  |  |  |           // Can't use bundles as we use AoT generated code
 | 
					
						
							|  |  |  |           // which relies on deep imports
 | 
					
						
							|  |  |  |           extraParams: [{name: 'bundles', value: false}] | 
					
						
							| 
									
										
										
										
											2016-09-01 16:56:45 -07:00
										 |  |  |         }).then(done, done.fail); | 
					
						
							|  |  |  |       }); | 
					
						
							| 
									
										
										
										
											2016-09-01 10:29:35 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-01 16:56:45 -07:00
										 |  |  |       it('should run for ng2 static', (done) => { | 
					
						
							|  |  |  |         runTreeBenchmark({ | 
					
						
							|  |  |  |           id: `deepTree.ng2.static.${worker.id}`, | 
					
						
							|  |  |  |           url: 'all/benchmarks/src/tree/ng2_static/index.html', | 
					
						
							| 
									
										
										
										
											2016-09-30 09:09:31 -07:00
										 |  |  |           work: worker.work, | 
					
						
							|  |  |  |           prepare: worker.prepare, | 
					
						
							|  |  |  |         }).then(done, done.fail); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it('should run for ng2 static ftl', (done) => { | 
					
						
							|  |  |  |         runTreeBenchmark({ | 
					
						
							|  |  |  |           id: `deepTree.ng2.ftl.${worker.id}`, | 
					
						
							|  |  |  |           url: 'all/benchmarks/src/tree/ng2_static_ftl/index.html', | 
					
						
							|  |  |  |           work: worker.work, | 
					
						
							|  |  |  |           prepare: worker.prepare, | 
					
						
							|  |  |  |           // Can't use bundles as we use AoT generated code
 | 
					
						
							|  |  |  |           // which relies on deep imports
 | 
					
						
							|  |  |  |           extraParams: [{name: 'bundles', value: false}] | 
					
						
							| 
									
										
										
										
											2016-09-01 16:56:45 -07:00
										 |  |  |         }).then(done, done.fail); | 
					
						
							|  |  |  |       }); | 
					
						
							| 
									
										
										
										
											2015-05-29 21:40:15 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-01 16:56:45 -07:00
										 |  |  |       it('should run for ng2 switch', (done) => { | 
					
						
							|  |  |  |         runTreeBenchmark({ | 
					
						
							|  |  |  |           id: `deepTree.ng2_switch.${worker.id}`, | 
					
						
							|  |  |  |           url: 'all/benchmarks/src/tree/ng2_switch/index.html', | 
					
						
							| 
									
										
										
										
											2016-09-30 09:09:31 -07:00
										 |  |  |           work: worker.work, | 
					
						
							|  |  |  |           prepare: worker.prepare, | 
					
						
							| 
									
										
										
										
											2016-09-01 16:56:45 -07:00
										 |  |  |         }).then(done, done.fail); | 
					
						
							|  |  |  |       }); | 
					
						
							| 
									
										
										
										
											2016-09-01 10:31:31 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-01 16:56:45 -07:00
										 |  |  |       it('should run for the baseline', (done) => { | 
					
						
							|  |  |  |         runTreeBenchmark({ | 
					
						
							|  |  |  |           id: `deepTree.baseline.${worker.id}`, | 
					
						
							|  |  |  |           url: 'all/benchmarks/src/tree/baseline/index.html', | 
					
						
							|  |  |  |           ignoreBrowserSynchronization: true, | 
					
						
							| 
									
										
										
										
											2016-09-30 09:09:31 -07:00
										 |  |  |           work: worker.work, | 
					
						
							|  |  |  |           prepare: worker.prepare, | 
					
						
							| 
									
										
										
										
											2016-09-01 16:56:45 -07:00
										 |  |  |         }).then(done, done.fail); | 
					
						
							|  |  |  |       }); | 
					
						
							| 
									
										
										
										
											2016-09-01 10:31:31 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-01 16:56:45 -07:00
										 |  |  |       it('should run for incremental-dom', (done) => { | 
					
						
							|  |  |  |         runTreeBenchmark({ | 
					
						
							|  |  |  |           id: `deepTree.incremental_dom.${worker.id}`, | 
					
						
							|  |  |  |           url: 'all/benchmarks/src/tree/incremental_dom/index.html', | 
					
						
							|  |  |  |           ignoreBrowserSynchronization: true, | 
					
						
							| 
									
										
										
										
											2016-09-30 09:09:31 -07:00
										 |  |  |           work: worker.work, | 
					
						
							|  |  |  |           prepare: worker.prepare, | 
					
						
							| 
									
										
										
										
											2016-09-01 16:56:45 -07:00
										 |  |  |         }).then(done, done.fail); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it('should run for polymer binary tree', (done) => { | 
					
						
							|  |  |  |         runTreeBenchmark({ | 
					
						
							|  |  |  |           id: `deepTree.polymer.${worker.id}`, | 
					
						
							|  |  |  |           url: 'all/benchmarks/src/tree/polymer/index.html', | 
					
						
							|  |  |  |           ignoreBrowserSynchronization: true, | 
					
						
							| 
									
										
										
										
											2016-09-30 09:09:31 -07:00
										 |  |  |           work: worker.work, | 
					
						
							|  |  |  |           prepare: worker.prepare, | 
					
						
							| 
									
										
										
										
											2016-09-01 16:56:45 -07:00
										 |  |  |         }).then(done, done.fail); | 
					
						
							|  |  |  |       }); | 
					
						
							| 
									
										
										
										
											2016-08-30 13:44:52 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-01 16:56:45 -07:00
										 |  |  |       it('should run for polymer leaves', (done) => { | 
					
						
							|  |  |  |         runTreeBenchmark({ | 
					
						
							|  |  |  |           id: `deepTree.polymer_leaves.${worker.id}`, | 
					
						
							|  |  |  |           url: 'all/benchmarks/src/tree/polymer_leaves/index.html', | 
					
						
							|  |  |  |           ignoreBrowserSynchronization: true, | 
					
						
							| 
									
										
										
										
											2016-09-30 09:09:31 -07:00
										 |  |  |           work: worker.work, | 
					
						
							|  |  |  |           prepare: worker.prepare, | 
					
						
							| 
									
										
										
										
											2016-09-01 16:56:45 -07:00
										 |  |  |         }).then(done, done.fail); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2017-01-20 13:10:57 -08:00
										 |  |  |   }); | 
					
						
							| 
									
										
										
										
											2016-12-28 15:26:49 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-20 13:10:57 -08:00
										 |  |  |   it('should run ng2 changedetection', (done) => { | 
					
						
							|  |  |  |     runTreeBenchmark({ | 
					
						
							|  |  |  |       id: `deepTree.ng2.changedetection`, | 
					
						
							|  |  |  |       url: 'all/benchmarks/src/tree/ng2/index.html', | 
					
						
							|  |  |  |       work: () => $('#detectChanges').click(), | 
					
						
							|  |  |  |       setup: () => $('#createDom').click(), | 
					
						
							|  |  |  |     }).then(done, done.fail); | 
					
						
							|  |  |  |   }); | 
					
						
							| 
									
										
										
										
											2016-12-28 15:26:49 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-20 13:10:57 -08:00
										 |  |  |   it('should run ng2 next changedetection', (done) => { | 
					
						
							|  |  |  |     runTreeBenchmark({ | 
					
						
							|  |  |  |       id: `deepTree.ng2.next.changedetection`, | 
					
						
							|  |  |  |       url: 'all/benchmarks/src/tree/ng2_next/index.html', | 
					
						
							|  |  |  |       work: () => $('#detectChanges').click(), | 
					
						
							|  |  |  |       setup: () => $('#createDom').click(), | 
					
						
							|  |  |  |       ignoreBrowserSynchronization: true, | 
					
						
							|  |  |  |       // Can't use bundles as we use non exported code
 | 
					
						
							|  |  |  |       extraParams: [{name: 'bundles', value: false}] | 
					
						
							|  |  |  |     }).then(done, done.fail); | 
					
						
							| 
									
										
										
										
											2016-08-30 14:17:37 -07:00
										 |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-30 09:09:31 -07:00
										 |  |  |   function runTreeBenchmark(config: { | 
					
						
							|  |  |  |     id: string, | 
					
						
							|  |  |  |     url: string, ignoreBrowserSynchronization?: boolean, | 
					
						
							|  |  |  |     work: () => any, | 
					
						
							| 
									
										
										
										
											2016-12-28 15:26:49 -08:00
										 |  |  |     prepare?: () => any, | 
					
						
							|  |  |  |     extraParams?: {name: string, value: any}[], | 
					
						
							|  |  |  |     setup?: () => any | 
					
						
							| 
									
										
										
										
											2016-09-30 09:09:31 -07:00
										 |  |  |   }) { | 
					
						
							|  |  |  |     let params = [{name: 'depth', value: 11}]; | 
					
						
							|  |  |  |     if (config.extraParams) { | 
					
						
							|  |  |  |       params = params.concat(config.extraParams); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2016-08-30 14:17:37 -07:00
										 |  |  |     return runBenchmark({ | 
					
						
							|  |  |  |       id: config.id, | 
					
						
							|  |  |  |       url: config.url, | 
					
						
							|  |  |  |       ignoreBrowserSynchronization: config.ignoreBrowserSynchronization, | 
					
						
							| 
									
										
										
										
											2016-09-30 09:09:31 -07:00
										 |  |  |       params: params, | 
					
						
							|  |  |  |       work: config.work, | 
					
						
							| 
									
										
										
										
											2016-12-28 15:26:49 -08:00
										 |  |  |       prepare: config.prepare, | 
					
						
							|  |  |  |       setup: config.setup | 
					
						
							| 
									
										
										
										
											2016-08-30 14:17:37 -07:00
										 |  |  |     }); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2015-05-29 21:40:15 -07:00
										 |  |  | }); |