A benchmark has a name (string) and a function that will be run to do the performance measurement. The optional setup and tearDown arguments are functions that will be invoked before and after running the benchmark, but the running time of these functions will not be accounted for in the benchmark score.
function Benchmark(name, run, setup, tearDown) {
  this.name = name;
  this.run = run;
  this.Setup = setup ? setup : function() { };
  this.TearDown = tearDown ? tearDown : function() { };
}