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