| 
									
										
										
										
											2016-09-02 12:37:22 -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
 | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import {runBenchmark, verifyNoBrowserErrors} from 'e2e_util/perf_util'; | 
					
						
							| 
									
										
										
										
											2016-11-10 18:13:11 -08:00
										 |  |  | import {$} from 'protractor'; | 
					
						
							| 
									
										
										
										
											2016-09-02 12:37:22 -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() | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | describe('largetable benchmark perf', () => { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   afterEach(verifyNoBrowserErrors); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   [CreateOnlyWorker, CreateAndDestroyWorker, UpdateWorker].forEach((worker) => { | 
					
						
							|  |  |  |     describe(worker.id, () => { | 
					
						
							|  |  |  |       it('should run for ng2', (done) => { | 
					
						
							|  |  |  |         runTableBenchmark({ | 
					
						
							|  |  |  |           id: `largeTable.ng2.${worker.id}`, | 
					
						
							|  |  |  |           url: 'all/benchmarks/src/largetable/ng2/index.html', | 
					
						
							|  |  |  |           worker: worker | 
					
						
							|  |  |  |         }).then(done, done.fail); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it('should run for ng2 with ngSwitch', (done) => { | 
					
						
							|  |  |  |         runTableBenchmark({ | 
					
						
							|  |  |  |           id: `largeTable.ng2_switch.${worker.id}`, | 
					
						
							|  |  |  |           url: 'all/benchmarks/src/largetable/ng2_switch/index.html', | 
					
						
							|  |  |  |           worker: worker | 
					
						
							|  |  |  |         }).then(done, done.fail); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it('should run for the baseline', (done) => { | 
					
						
							|  |  |  |         runTableBenchmark({ | 
					
						
							|  |  |  |           id: `largeTable.baseline.${worker.id}`, | 
					
						
							|  |  |  |           url: 'all/benchmarks/src/largetable/baseline/index.html', | 
					
						
							|  |  |  |           ignoreBrowserSynchronization: true, | 
					
						
							|  |  |  |           worker: worker | 
					
						
							|  |  |  |         }).then(done, done.fail); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it('should run for incremental-dom', (done) => { | 
					
						
							|  |  |  |         runTableBenchmark({ | 
					
						
							|  |  |  |           id: `largeTable.incremental_dom.${worker.id}`, | 
					
						
							|  |  |  |           url: 'all/benchmarks/src/largetable/incremental_dom/index.html', | 
					
						
							|  |  |  |           ignoreBrowserSynchronization: true, | 
					
						
							|  |  |  |           worker: worker | 
					
						
							|  |  |  |         }).then(done, done.fail); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   function runTableBenchmark( | 
					
						
							|  |  |  |       config: {id: string, url: string, ignoreBrowserSynchronization?: boolean, worker: Worker}) { | 
					
						
							|  |  |  |     return runBenchmark({ | 
					
						
							|  |  |  |       id: config.id, | 
					
						
							|  |  |  |       url: config.url, | 
					
						
							|  |  |  |       ignoreBrowserSynchronization: config.ignoreBrowserSynchronization, | 
					
						
							|  |  |  |       params: [{name: 'cols', value: 40}, {name: 'rows', value: 200}], | 
					
						
							|  |  |  |       prepare: config.worker.prepare, | 
					
						
							|  |  |  |       work: config.worker.work | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | }); |