// compare with "google-chrome deps/v8/benchmarks/run.html"
'use strict';
const fs = require('fs');
const path = require('path');
const vm = require('vm');
const common = require('../common.js');

const dir = path.join(__dirname, '..', '..', 'deps', 'v8', 'benchmarks');

function load(filename, inGlobal) {
  var source = fs.readFileSync(path.join(dir, filename), 'utf8');
  if (!inGlobal) source = `(function () {${source}\n})()`;
  vm.runInThisContext(source, { filename: `v8/bechmark/${filename}` });
}

load('base.js', true);
load('richards.js');
load('deltablue.js');
load('crypto.js');
load('raytrace.js');
load('earley-boyer.js');
load('regexp.js');
load('splay.js');
load('navier-stokes.js');

const benchmark_name = path.join('misc', 'v8-bench.js');
const times = {};
global.BenchmarkSuite.RunSuites({
  NotifyStart: function(name) {
    times[name] = process.hrtime();
  },
  NotifyResult: function(name, result) {
    const elapsed = process.hrtime(times[name]);
    common.sendResult({
      name: benchmark_name,
      conf: {
        benchmark: name
      },
      rate: result,
      time: elapsed[0] + elapsed[1] / 1e9
    });
  },
  NotifyError: function(name, error) {
    console.error(`${name}: ${error}`);
  },
  NotifyScore: function(score) {
    common.sendResult({
      name: benchmark_name,
      conf: {
        benchmark: `Score (version ${global.BenchmarkSuite.version})`
      },
      rate: score,
      time: 0
    });
  }
});
