"use strict";
/* eslint-env browser, jquery */
const Runner = require( "./runner.js" );
const benchmarks = require( "./benchmarks.js" );
$( "#run" ).click( () => {
// Results Table Manipulation
const resultsTable = $( "#results-table" );
function appendResult( klass, title, url, inputSize, parseTime ) {
const KB = 1024;
const MS_IN_S = 1000;
resultsTable.append(
"
"
+ ""
+ ( url !== null ? "" : "" )
+ title
+ ( url !== null ? "" : "" )
+ " | "
+ ""
+ ""
+ ( inputSize / KB ).toFixed( 2 )
+ ""
+ " kB"
+ " | "
+ ""
+ ""
+ parseTime.toFixed( 2 )
+ ""
+ " ms"
+ " | "
+ ""
+ ""
+ ( ( inputSize / KB ) / ( parseTime / MS_IN_S ) ).toFixed( 2 )
+ ""
+ " kB/s"
+ " | "
+ "
"
);
}
// Main
// Each input is parsed multiple times and the results are averaged. We
// do this for two reasons:
//
// 1. To warm up the interpreter (PEG.js-generated parsers will be
// most likely used repeatedly, so it makes sense to measure
// performance after warming up).
//
// 2. To minimize random errors.
const runCount = parseInt( $( "#run-count" ).val(), 10 );
const options = {
cache: $( "#cache" ).is( ":checked" ),
optimize: $( "#optimize" ).val()
};
if ( isNaN( runCount ) || runCount <= 0 ) {
alert( "Number of runs must be a positive integer." );
return;
}
Runner.run( benchmarks, runCount, options, {
readFile( file ) {
return $.ajax( {
type: "GET",
url: "benchmark/" + file,
dataType: "text",
async: false
} ).responseText;
},
testStart() {
// Nothing to do.
},
testFinish( benchmark, test, inputSize, parseTime ) {
appendResult(
"individual",
test.title,
"benchmark/" + benchmark.id + "/" + test.file,
inputSize,
parseTime
);
},
benchmarkStart( benchmark ) {
resultsTable.append(
""
+ ""
+ benchmark.title
+ ""
+ " |
"
);
},
benchmarkFinish( benchmark, inputSize, parseTime ) {
appendResult(
"benchmark-total",
benchmark.title + " total",
null,
inputSize,
parseTime
);
},
start() {
$( "#run-count, #cache, #run" ).attr( "disabled", "disabled" );
resultsTable.show();
$( "#results-table tr" ).slice( 1 ).remove();
},
finish( inputSize, parseTime ) {
appendResult(
"total",
"Total",
null,
inputSize,
parseTime
);
$.scrollTo( "max", { axis: "y", duration: 500 } );
$( "#run-count, #cache, #run" ).removeAttr( "disabled" );
}
} );
} );
$( document ).ready( () => $( "#run" ).focus() );