1*6777b538SAndroid Build Coastguard Worker// Copyright 2018 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker// Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker// found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker// To benchmark a specific version of Chrome set the CHROME_PATH environment 6*6777b538SAndroid Build Coastguard Worker// variable, e.g.: 7*6777b538SAndroid Build Coastguard Worker// $ CHROME_PATH=~/chromium/src/out/Release/chrome node benchmark-octane.js 8*6777b538SAndroid Build Coastguard Worker 9*6777b538SAndroid Build Coastguard Workerconst puppeteer = require('puppeteer'); 10*6777b538SAndroid Build Coastguard Worker 11*6777b538SAndroid Build Coastguard Workerasync function runOctane(samplingRate) { 12*6777b538SAndroid Build Coastguard Worker const args = ['--enable-devtools-experiments']; 13*6777b538SAndroid Build Coastguard Worker if (samplingRate) 14*6777b538SAndroid Build Coastguard Worker args.push(`--memlog=all`, `--memlog-sampling-rate=${samplingRate}`); 15*6777b538SAndroid Build Coastguard Worker while (true) { 16*6777b538SAndroid Build Coastguard Worker let browser; 17*6777b538SAndroid Build Coastguard Worker try { 18*6777b538SAndroid Build Coastguard Worker browser = await puppeteer.launch({ 19*6777b538SAndroid Build Coastguard Worker executablePath: process.env.CHROME_PATH, args, headless: true}); 20*6777b538SAndroid Build Coastguard Worker const page = await browser.newPage(); 21*6777b538SAndroid Build Coastguard Worker await page.goto('https://chromium.github.io/octane/'); 22*6777b538SAndroid Build Coastguard Worker await page.waitForSelector('#run-octane'); // Just in case. 23*6777b538SAndroid Build Coastguard Worker await page.click('#run-octane'); 24*6777b538SAndroid Build Coastguard Worker 25*6777b538SAndroid Build Coastguard Worker const scoreDiv = await page.waitForSelector('#main-banner:only-child', 26*6777b538SAndroid Build Coastguard Worker {timeout: 120000}); 27*6777b538SAndroid Build Coastguard Worker const scoreText = await page.evaluate(e => e.innerText, scoreDiv); 28*6777b538SAndroid Build Coastguard Worker const match = /Score:\s*(\d+)/.exec(scoreText); 29*6777b538SAndroid Build Coastguard Worker if (match.length < 2) 30*6777b538SAndroid Build Coastguard Worker continue; 31*6777b538SAndroid Build Coastguard Worker return parseInt(match[1]); 32*6777b538SAndroid Build Coastguard Worker } finally { 33*6777b538SAndroid Build Coastguard Worker if (browser) 34*6777b538SAndroid Build Coastguard Worker await browser.close(); 35*6777b538SAndroid Build Coastguard Worker } 36*6777b538SAndroid Build Coastguard Worker } 37*6777b538SAndroid Build Coastguard Worker} 38*6777b538SAndroid Build Coastguard Worker 39*6777b538SAndroid Build Coastguard Workerasync function makeRuns(rates) { 40*6777b538SAndroid Build Coastguard Worker const scores = []; 41*6777b538SAndroid Build Coastguard Worker for (const rate of rates) 42*6777b538SAndroid Build Coastguard Worker scores.push(await runOctane(rate)); 43*6777b538SAndroid Build Coastguard Worker console.log(scores.join('\t')); 44*6777b538SAndroid Build Coastguard Worker} 45*6777b538SAndroid Build Coastguard Worker 46*6777b538SAndroid Build Coastguard Workerasync function main() { 47*6777b538SAndroid Build Coastguard Worker console.log(`Using ${process.env.CHROME_PATH || puppeteer.executablePath()}`); 48*6777b538SAndroid Build Coastguard Worker const rates = [0]; 49*6777b538SAndroid Build Coastguard Worker for (let rate = 8; rate <= 2048; rate *= 2) 50*6777b538SAndroid Build Coastguard Worker rates.push(rate); 51*6777b538SAndroid Build Coastguard Worker console.log('Rates [KB]:'); 52*6777b538SAndroid Build Coastguard Worker console.log(rates.join('\t')); 53*6777b538SAndroid Build Coastguard Worker console.log('='.repeat(rates.length * 8)); 54*6777b538SAndroid Build Coastguard Worker for (let i = 0; i < 100; ++i) 55*6777b538SAndroid Build Coastguard Worker await makeRuns(rates); 56*6777b538SAndroid Build Coastguard Worker} 57*6777b538SAndroid Build Coastguard Worker 58*6777b538SAndroid Build Coastguard Workermain(); 59