summaryrefslogtreecommitdiffstats
path: root/third_party/webkit/PerformanceTests/Speedometer/InteractiveRunner.html
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/webkit/PerformanceTests/Speedometer/InteractiveRunner.html')
-rw-r--r--third_party/webkit/PerformanceTests/Speedometer/InteractiveRunner.html173
1 files changed, 173 insertions, 0 deletions
diff --git a/third_party/webkit/PerformanceTests/Speedometer/InteractiveRunner.html b/third_party/webkit/PerformanceTests/Speedometer/InteractiveRunner.html
new file mode 100644
index 0000000000..9cbfaa2889
--- /dev/null
+++ b/third_party/webkit/PerformanceTests/Speedometer/InteractiveRunner.html
@@ -0,0 +1,173 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Speedometer 2.1 Interactive Runner</title>
+<script src="resources/benchmark-runner.js" defer></script>
+<script src="resources/tests.js" defer></script>
+<style>
+iframe { border: 1px solid black; }
+ol { list-style: none; margin: 0; padding: 0; }
+ol ol { margin-left: 2em; list-position: outside; }
+.running { text-decoration: underline; }
+.ran { color: grey; }
+nav { position: absolute; right: 10px; height: 600px; }
+nav > ol { height: 100%; overflow-y: scroll; }
+</style>
+</head>
+<body>
+<script>
+
+function formatTestName(suiteName, testName) {
+ return suiteName + (testName ? '/' + testName : '');
+}
+
+function createUIForSuites(suites, onstep, onrun) {
+ var control = document.createElement('nav');
+ var ol = document.createElement('ol');
+ var checkboxes = [];
+ for (var suiteIndex = 0; suiteIndex < suites.length; suiteIndex++) {
+ var suite = suites[suiteIndex];
+ var li = document.createElement('li');
+ var checkbox = document.createElement('input');
+ checkbox.id = suite.name;
+ checkbox.type = 'checkbox';
+ checkbox.checked = !suite.disabled;
+ checkbox.onchange = (function (suite, checkbox) { return function () { suite.disabled = !checkbox.checked; } })(suite, checkbox);
+ checkbox.onchange();
+ checkboxes.push(checkbox);
+
+ li.appendChild(checkbox);
+ var label = document.createElement('label');
+ label.appendChild(document.createTextNode(formatTestName(suite.name)));
+ li.appendChild(label);
+ label.htmlFor = checkbox.id;
+
+ var testList = document.createElement('ol');
+ for (var testIndex = 0; testIndex < suite.tests.length; testIndex++) {
+ var testItem = document.createElement('li');
+ var test = suite.tests[testIndex];
+ var anchor = document.createElement('a');
+ anchor.id = suite.name + '-' + test.name;
+ test.anchor = anchor;
+ anchor.appendChild(document.createTextNode(formatTestName(suite.name, test.name)));
+ testItem.appendChild(anchor);
+ testList.appendChild(testItem);
+ }
+ li.appendChild(testList);
+
+ ol.appendChild(li);
+ }
+
+ control.appendChild(ol);
+
+ var button = document.createElement('button');
+ button.textContent = 'Step';
+ button.onclick = onstep;
+ control.appendChild(button);
+
+ var button = document.createElement('button');
+ button.textContent = 'Run';
+ button.id = 'runSuites';
+ button.onclick = onrun;
+ control.appendChild(button);
+
+ var button = document.createElement('button');
+ button.textContent = 'Select all';
+ button.onclick = function () {
+ for (var suiteIndex = 0; suiteIndex < suites.length; suiteIndex++) {
+ suites[suiteIndex].disabled = false;
+ checkboxes[suiteIndex].checked = true;
+ }
+ };
+ control.appendChild(button);
+
+ var button = document.createElement('button');
+ button.textContent = 'Unselect all';
+ button.onclick = function () {
+ for (var suiteIndex = 0; suiteIndex < suites.length; suiteIndex++) {
+ suites[suiteIndex].disabled = true;
+ checkboxes[suiteIndex].checked = false;
+ }
+
+ };
+ control.appendChild(button);
+
+ return control;
+}
+
+var parseQueryString = (function (pairList) {
+ var pairs = {};
+ for (var i = 0; i < pairList.length; ++i) {
+ var keyValue = pairList[i].split('=', 2);
+ if (keyValue.length == 1)
+ pairs[keyValue[0]] = '';
+ else
+ pairs[keyValue[0]] = decodeURIComponent(keyValue[1].replace(/\+/g, ' '));
+ }
+ return pairs;
+})(window.location.search.substr(1).split('&'));
+
+function disableAllSuitesExcept(suiteName) {
+ Suites.forEach(function(element) {
+ if (element.name !== suiteName)
+ element.disabled = true;
+ });
+}
+
+function startTest() {
+ var queryParam = parseQueryString['suite'];
+ if (queryParam !== undefined)
+ disableAllSuitesExcept(queryParam);
+
+ var runner = new BenchmarkRunner(Suites, {
+ willRunTest: function (suite, test) {
+ test.anchor.classList.add('running');
+ },
+ didRunTest: function (suite, test) {
+ var classList = test.anchor.classList;
+ classList.remove('running');
+ classList.add('ran');
+ },
+ didRunSuites: function (measuredValues) {
+ var results = '';
+ for (var suiteName in measuredValues.tests) {
+ var suiteResults = measuredValues.tests[suiteName];
+ for (var testName in suiteResults.tests) {
+ var testResults = suiteResults.tests[testName];
+ for (var subtestName in testResults.tests) {
+ results += suiteName + ' : ' + testName + ' : ' + subtestName
+ + ': ' + testResults.tests[subtestName] + ' ms\n';
+ }
+ }
+ results += suiteName + ' : ' + suiteResults.total + ' ms\n';
+ }
+ results += 'Arithmetic Mean : ' + measuredValues.mean + ' ms\n';
+ results += 'Geometric Mean : ' + measuredValues.geomean + ' ms\n';
+ results += 'Total : ' + measuredValues.total + ' ms\n';
+ results += 'Score : ' + measuredValues.score + ' rpm\n';
+
+ if (!results)
+ return;
+
+ var pre = document.createElement('pre');
+ document.body.appendChild(pre);
+ pre.textContent = results;
+ }
+ });
+
+ var currentState = null;
+
+ // Don't call step while step is already executing.
+ document.body.appendChild(createUIForSuites(Suites,
+ function () { runner.step(currentState).then(function (state) { currentState = state; }); },
+ function () { runner.runAllSteps(currentState); currentState = null; }));
+
+ if (parseQueryString['startAutomatically'] !== undefined)
+ document.getElementById('runSuites').click();
+}
+
+window.addEventListener('load', startTest);
+
+</script>
+</body>
+</html>