67 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| var testUtil = require('./test_util');
 | |
| var benchpress = require('benchpress/benchpress');
 | |
| 
 | |
| module.exports = {
 | |
|   runClickBenchmark: runClickBenchmark,
 | |
|   runBenchmark: runBenchmark,
 | |
|   verifyNoBrowserErrors: testUtil.verifyNoBrowserErrors
 | |
| };
 | |
| 
 | |
| function runClickBenchmark(config) {
 | |
|   var buttons = config.buttons.map(function(selector) {
 | |
|     return $(selector);
 | |
|   });
 | |
|   config.work = function() {
 | |
|     buttons.forEach(function(button) {
 | |
|       button.click();
 | |
|     });
 | |
|   }
 | |
|   return runBenchmark(config);
 | |
| }
 | |
| 
 | |
| function runBenchmark(config) {
 | |
|   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;
 | |
|     });
 | |
|     var url = encodeURI(config.url + '?' + urlParams.join('&'));
 | |
|     browser.get(url);
 | |
|     return benchpressRunner.sample({
 | |
|       id: config.id,
 | |
|       execute: config.work,
 | |
|       prepare: config.prepare,
 | |
|       bindings: [
 | |
|         benchpress.bind(benchpress.Options.SAMPLE_DESCRIPTION).toValue(description)
 | |
|       ]
 | |
|     });
 | |
|   });
 | |
| }
 | |
| 
 | |
| 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;
 | |
|       }
 | |
|     });
 | |
|     return scaleFactor;
 | |
|   });
 | |
| }
 | |
| 
 | |
| 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;
 | |
|   }
 | |
| } |