Move retrace runtime scale to the left

Change-Id: I7c9f4bca0f04d74be27ab34c14c201aa3da3ff1f
diff --git a/tools/perf/d8.html b/tools/perf/d8.html
index 810f645..bd9c867 100644
--- a/tools/perf/d8.html
+++ b/tools/perf/d8.html
@@ -30,6 +30,18 @@
     import scales from "./scales.js";
     import state from "./state.js";
 
+    const commits = await state.importCommits("./d8_benchmark_data.json");
+    state.initializeBenchmarks();
+    state.initializeLegends({
+      'Dex size': { default: true },
+      'Nondeterminism': { default: true },
+      'Runtime': { default: true },
+      'Runtime variance': { default: false }
+    });
+    state.initializeZoom();
+    dom.initializeBenchmarkSelectors();
+    dom.initializeChartNavigation();
+
     // Chart data provider.
     function getData(filteredCommits) {
       const labels = filteredCommits.map((c, i) => c.index);
@@ -239,17 +251,6 @@
       scales: scales.get()
     };
 
-    const commits = await state.importCommits("./d8_benchmark_data.json");
-    state.initializeBenchmarks();
-    state.initializeLegends({
-      'Dex size': { default: true },
-      'Nondeterminism': { default: true },
-      'Runtime': { default: true },
-      'Runtime variance': { default: false }
-    });
-    state.initializeZoom();
-    dom.initializeBenchmarkSelectors();
-    dom.initializeChartNavigation();
     chart.setDataProvider(getData);
     chart.initializeChart(options);
   </script>
diff --git a/tools/perf/r8.html b/tools/perf/r8.html
index 857e607..a7da848 100644
--- a/tools/perf/r8.html
+++ b/tools/perf/r8.html
@@ -30,6 +30,21 @@
     import scales from "./scales.js";
     import state from "./state.js";
 
+    const commits = await state.importCommits("./r8_benchmark_data.json");
+    state.initializeBenchmarks();
+    state.initializeLegends({
+      'Dex size': { default: true },
+      'Instruction size': { default: true },
+      'Composable size': { default: true },
+      'Oat size': { default: true },
+      'Nondeterminism': { default: true },
+      'Runtime': { default: true },
+      'Runtime variance': { default: false }
+    });
+    state.initializeZoom();
+    dom.initializeBenchmarkSelectors();
+    dom.initializeChartNavigation();
+
     // Chart data provider.
     function getData(filteredCommits) {
       const labels = filteredCommits.map((c, i) => c.index);
@@ -314,20 +329,6 @@
       scales: scales.get()
     };
 
-    const commits = await state.importCommits("./r8_benchmark_data.json");
-    state.initializeBenchmarks();
-    state.initializeLegends({
-      'Dex size': { default: true },
-      'Instruction size': { default: true },
-      'Composable size': { default: true },
-      'Oat size': { default: true },
-      'Nondeterminism': { default: true },
-      'Runtime': { default: true },
-      'Runtime variance': { default: false }
-    });
-    state.initializeZoom();
-    dom.initializeBenchmarkSelectors();
-    dom.initializeChartNavigation();
     chart.setDataProvider(getData);
     chart.initializeChart(options);
   </script>
diff --git a/tools/perf/retrace.html b/tools/perf/retrace.html
index 00d5f48..98a6661 100644
--- a/tools/perf/retrace.html
+++ b/tools/perf/retrace.html
@@ -30,6 +30,16 @@
     import scales from "./scales.js";
     import state from "./state.js";
 
+    const commits = await state.importCommits("./retrace_benchmark_data.json");
+    state.initializeBenchmarks();
+    state.initializeLegends({
+      'Runtime': { default: true },
+      'Runtime variance': { default: true }
+    });
+    state.initializeZoom();
+    dom.initializeBenchmarkSelectors();
+    dom.initializeChartNavigation();
+
     // Chart data provider.
     function getData(filteredCommits) {
       const labels = filteredCommits.map((c, i) => c.index);
@@ -186,15 +196,6 @@
       scales: scales.get()
     };
 
-    const commits = await state.importCommits("./retrace_benchmark_data.json");
-    state.initializeBenchmarks();
-    state.initializeLegends({
-      'Runtime': { default: true },
-      'Runtime variance': { default: true }
-    });
-    state.initializeZoom();
-    dom.initializeBenchmarkSelectors();
-    dom.initializeChartNavigation();
     chart.setDataProvider(getData);
     chart.initializeChart(options);
   </script>
diff --git a/tools/perf/scales.js b/tools/perf/scales.js
index 7678fa3..8378e2f 100644
--- a/tools/perf/scales.js
+++ b/tools/perf/scales.js
@@ -4,46 +4,66 @@
 import state from "./state.js";
 
 function get() {
-  return {
-    x: {},
-    y: {
+  const scales = {};
+  scales.x = {};
+  if (state.hasLegend('Dex size')) {
+    scales.y = {
       position: 'left',
       title: {
         display: true,
         text: 'Dex size (bytes)'
       }
-    },
-    y_runtime: {
-      position: 'right',
-      title: {
-        display: true,
-        text: 'Runtime (seconds)'
-      }
-    },
-    y_ins_code_size: {
+    };
+  } else {
+    console.assert(!state.hasLegend('Instruction size'));
+    console.assert(!state.hasLegend('Composable size'));
+    console.assert(!state.hasLegend('Oat size'));
+  }
+  console.assert(state.hasLegend('Runtime'));
+  console.assert(state.hasLegend('Runtime variance'));
+  scales.y_runtime = {
+    position: state.hasLegend('Dex size') ? 'right' : 'left',
+    title: {
+      display: true,
+      text: 'Runtime (seconds)'
+    }
+  };
+  if (state.hasLegend('Instruction size') || state.hasLegend('Composable size')) {
+    scales.y_ins_code_size = {
       position: 'left',
       title: {
         display: true,
         text: 'Instruction size (bytes)'
       }
-    },
-    y_oat_code_size: {
+    };
+  }
+  if (state.hasLegend('Oat size')) {
+    scales.y_oat_code_size = {
       position: 'left',
       title: {
         display: true,
         text: 'Oat size (bytes)'
       }
-    }
-  };;
+    };
+  }
+  return scales;
 }
 
 function update(scales) {
-  scales.y.display = state.isLegendSelected('Dex size');
-  scales.y_ins_code_size.display =
-      state.isLegendSelected('Instruction size') || state.isLegendSelected('Composable size');
-  scales.y_oat_code_size.display = state.isLegendSelected('Oat size');
-  scales.y_runtime.display =
-      state.isLegendSelected('Runtime') || state.isLegendSelected('Runtime variance');
+  if (scales.y) {
+    scales.y.display = state.isLegendSelected('Dex size');
+  }
+  if (scales.y_ins_code_size) {
+    scales.y_ins_code_size.display =
+        state.isLegendSelected('Instruction size') || state.isLegendSelected('Composable size');
+  }
+  if (scales.y_oat_code_size) {
+    scales.y_oat_code_size.display = state.isLegendSelected('Oat size');
+  }
+  if (scales.y_runtime) {
+    scales.y_runtime.display =
+        state.isLegendSelected('Runtime') || state.isLegendSelected('Runtime variance');
+  }
 }
 
 export default {
diff --git a/tools/perf/state.js b/tools/perf/state.js
index cbf6bfb..4d0128f 100644
--- a/tools/perf/state.js
+++ b/tools/perf/state.js
@@ -27,6 +27,10 @@
   });
 }
 
+function hasLegend(legend) {
+  return legends.has(legend);
+}
+
 function importCommits(url) {
   return import(url, { with: { type: "json" }})
       .then(module => {
@@ -107,6 +111,7 @@
   selectedLegends: selectedLegends,
   forEachBenchmark: forEachBenchmark,
   forEachSelectedBenchmark: forEachSelectedBenchmark,
+  hasLegend: hasLegend,
   initializeBenchmarks: initializeBenchmarks,
   initializeLegends: initializeLegends,
   initializeZoom: initializeZoom,