/* eslint-env browser, jquery */ let benchmarks = require("./benchmarks.js"), Runner = require("./runner.js"); $("#run").click(() => { "use strict"; /* Results Table Manipulation */ let resultsTable = $("#results-table"); function appendHeading(heading) { resultsTable.append( "" + heading + "" ); } function appendResult(klass, title, url, inputSize, parseTime) { const KB = 1024, 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. */ let runCount = parseInt($("#run-count").val(), 10), 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: function(file) { return $.ajax({ type: "GET", url: file, dataType: "text", async: false }).responseText; }, testStart: function() { /* Nothing to do. */ }, testFinish: function(benchmark, test, inputSize, parseTime) { appendResult( "individual", test.title, benchmark.id + "/" + test.file, inputSize, parseTime ); }, benchmarkStart: function(benchmark) { appendHeading(benchmark.title); }, benchmarkFinish: function(benchmark, inputSize, parseTime) { appendResult( "benchmark-total", benchmark.title + " total", null, inputSize, parseTime ); }, start: function() { $("#run-count, #cache, #run").attr("disabled", "disabled"); resultsTable.show(); $("#results-table tr").slice(1).remove(); }, finish: function(inputSize, parseTime) { appendResult( "total", "Total", null, inputSize, parseTime ); $.scrollTo("max", { axis: "y", duration: 500 }); $("#run-count, #cache, #run").removeAttr("disabled"); } }); }); $(document).ready(() => { "use strict"; $("#run").focus(); });