| 
									
										
										
										
											2015-02-11 10:13:49 -08:00
										 |  |  | var testUtil = require('./test_util'); | 
					
						
							|  |  |  | var benchpress = require('benchpress/benchpress'); | 
					
						
							| 
									
										
										
										
											2015-01-09 18:00:04 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | module.exports = { | 
					
						
							|  |  |  |   runClickBenchmark: runClickBenchmark, | 
					
						
							| 
									
										
										
										
											2015-01-27 09:53:22 -08:00
										 |  |  |   runBenchmark: runBenchmark, | 
					
						
							| 
									
										
										
										
											2015-02-11 10:13:49 -08:00
										 |  |  |   verifyNoBrowserErrors: testUtil.verifyNoBrowserErrors | 
					
						
							| 
									
										
										
										
											2015-01-09 18:00:04 -08:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function runClickBenchmark(config) { | 
					
						
							| 
									
										
										
										
											2015-01-27 09:53:22 -08:00
										 |  |  |   var buttons = config.buttons.map(function(selector) { | 
					
						
							|  |  |  |     return $(selector); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  |   config.work = function() { | 
					
						
							|  |  |  |     buttons.forEach(function(button) { | 
					
						
							|  |  |  |       button.click(); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2015-02-11 10:13:49 -08:00
										 |  |  |   return runBenchmark(config); | 
					
						
							| 
									
										
										
										
											2015-01-27 09:53:22 -08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function runBenchmark(config) { | 
					
						
							| 
									
										
										
										
											2015-02-11 10:13:49 -08:00
										 |  |  |   return getScaleFactor(browser.params.benchmark.scaling).then(function(scaleFactor) { | 
					
						
							|  |  |  |     var description = {}; | 
					
						
							|  |  |  |     var urlParams = []; | 
					
						
							|  |  |  |     config.params.forEach(function(param) { | 
					
						
							|  |  |  |       var name = param.name; | 
					
						
							|  |  |  |       var value = applyScaleFactor(param.value, scaleFactor, param.scale); | 
					
						
							|  |  |  |       urlParams.push(name + '=' + value); | 
					
						
							|  |  |  |       description[name] = value; | 
					
						
							| 
									
										
										
										
											2015-01-15 15:14:54 -08:00
										 |  |  |     }); | 
					
						
							| 
									
										
										
										
											2015-02-11 10:13:49 -08:00
										 |  |  |     var url = encodeURI(config.url + '?' + urlParams.join('&')); | 
					
						
							| 
									
										
										
										
											2015-01-15 15:14:54 -08:00
										 |  |  |     browser.get(url); | 
					
						
							| 
									
										
										
										
											2015-02-11 10:13:49 -08:00
										 |  |  |     return benchpressRunner.sample({ | 
					
						
							|  |  |  |       id: config.id, | 
					
						
							|  |  |  |       execute: config.work, | 
					
						
							|  |  |  |       prepare: config.prepare, | 
					
						
							|  |  |  |       bindings: [ | 
					
						
							|  |  |  |         benchpress.bind(benchpress.Options.SAMPLE_DESCRIPTION).toValue(description) | 
					
						
							|  |  |  |       ] | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2015-01-09 18:00:04 -08:00
										 |  |  |   }); | 
					
						
							| 
									
										
										
										
											2015-01-15 15:14:54 -08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function getScaleFactor(possibleScalings) { | 
					
						
							|  |  |  |   return browser.executeScript('return navigator.userAgent').then(function(userAgent) { | 
					
						
							|  |  |  |     var scaleFactor = 1; | 
					
						
							|  |  |  |     possibleScalings.forEach(function(entry) { | 
					
						
							|  |  |  |       if (userAgent.match(entry.userAgent)) { | 
					
						
							|  |  |  |         scaleFactor = entry.value; | 
					
						
							|  |  |  |       } | 
					
						
							| 
									
										
										
										
											2015-01-09 18:00:04 -08:00
										 |  |  |     }); | 
					
						
							| 
									
										
										
										
											2015-01-15 15:14:54 -08:00
										 |  |  |     return scaleFactor; | 
					
						
							| 
									
										
										
										
											2015-01-09 18:00:04 -08:00
										 |  |  |   }); | 
					
						
							| 
									
										
										
										
											2015-01-15 15:14:54 -08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function applyScaleFactor(value, scaleFactor, method) { | 
					
						
							|  |  |  |   if (method === 'log2') { | 
					
						
							|  |  |  |     return value + Math.log2(scaleFactor); | 
					
						
							|  |  |  |   } else if (method === 'sqrt') { | 
					
						
							|  |  |  |     return value * Math.sqrt(scaleFactor); | 
					
						
							|  |  |  |   } else if (method === 'linear') { | 
					
						
							|  |  |  |     return value * scaleFactor; | 
					
						
							|  |  |  |   } else { | 
					
						
							|  |  |  |     return value; | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2015-01-09 18:00:04 -08:00
										 |  |  | } |