// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// To benchmark a specific version of Chrome set the CHROME_PATH environment
// variable, e.g.:
// $ CHROME_PATH=~/chromium/src/out/Release/chrome node benchmark-octane.js

const puppeteer = require('puppeteer');

async function runOctane(samplingRate) {
  const args = ['--enable-devtools-experiments'];
  if (samplingRate)
    args.push(`--sampling-heap-profiler=${samplingRate}`);
  while (true) {
    let brower;
    try {
      browser = await puppeteer.launch({
          executablePath: process.env.CHROME_PATH, args, headless: true});
      const page = await browser.newPage();
      await page.goto('https://chromium.github.io/octane/');
      await page.waitForSelector('#run-octane');  // Just in case.
      await page.click('#run-octane');

      const scoreDiv = await page.waitForSelector('#main-banner:only-child',
          {timeout: 120000});
      const scoreText = await page.evaluate(e => e.innerText, scoreDiv);
      const match = /Score:\s*(\d+)/.exec(scoreText);
      if (match.length < 2)
        continue;
      return parseInt(match[1]);
    } finally {
      if (browser)
        await browser.close();
    }
  }
}

async function makeRuns(rates) {
  const scores = [];
  for (const rate of rates)
    scores.push(await runOctane(rate));
  console.log(scores.join('\t'));
}

async function main() {
  console.log(`Using ${process.env.CHROME_PATH || puppeteer.executablePath()}`);
  const rates = [0];
  for (let rate = 8; rate <= 2048; rate *= 2)
    rates.push(rate);
  console.log('Rates [KB]:');
  console.log(rates.join('\t'));
  console.log('='.repeat(rates.length * 8));
  for (let i = 0; i < 100; ++i)
    await makeRuns(rates);
}

main();
