Navigate benchmarks on perf using arrow left/right
Change-Id: I4b52b0765c6705cdf5c26387fea732b781c88844
diff --git a/tools/perf/chart.js b/tools/perf/chart.js
index 96c7f07..baaa33b 100644
--- a/tools/perf/chart.js
+++ b/tools/perf/chart.js
@@ -69,6 +69,9 @@
} else {
update(false, false);
}
+ document.addEventListener('keydown', e => {
+ state.handleKeyDownEvent(e, () => update(true, false));
+ });
}
function setDataProvider(theDataProvider) {
diff --git a/tools/perf/state.js b/tools/perf/state.js
index 4d0128f..ed07b39 100644
--- a/tools/perf/state.js
+++ b/tools/perf/state.js
@@ -99,6 +99,34 @@
}
}
+function handleKeyDownEvent(e, callback) {
+ if (selectedBenchmarks.size != 1) {
+ return;
+ }
+ const [selectedBenchmark] = selectedBenchmarks;
+ var benchmarkToSelect = null;
+ var previousBenchmark = null;
+ for (const benchmark of benchmarks.values()) {
+ if (previousBenchmark != null) {
+ if (e.key == 'ArrowLeft' && benchmark == selectedBenchmark) {
+ benchmarkToSelect = previousBenchmark;
+ break;
+ } else if (e.key === 'ArrowRight' && previousBenchmark == selectedBenchmark) {
+ benchmarkToSelect = benchmark;
+ break;
+ }
+ }
+ previousBenchmark = benchmark;
+ }
+ if (benchmarkToSelect != null) {
+ selectedBenchmarks.clear();
+ selectedBenchmarks.add(benchmarkToSelect);
+ document.getElementById(selectedBenchmark).checked = false;
+ document.getElementById(benchmarkToSelect).checked = true;
+ callback();
+ }
+}
+
function isLegendSelected(legend) {
return selectedLegends.has(legend);
}
@@ -111,6 +139,7 @@
selectedLegends: selectedLegends,
forEachBenchmark: forEachBenchmark,
forEachSelectedBenchmark: forEachSelectedBenchmark,
+ handleKeyDownEvent: handleKeyDownEvent,
hasLegend: hasLegend,
initializeBenchmarks: initializeBenchmarks,
initializeLegends: initializeLegends,