diff --git a/tools/perf/utils.js b/tools/perf/utils.js
new file mode 100644
index 0000000..46890d0
--- /dev/null
+++ b/tools/perf/utils.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2024, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+function getSingleResult(benchmark, commit, resultName, resultIteration = 0) {
+  if (!(benchmark in commit.benchmarks)) {
+    return NaN;
+  }
+  const allResults = commit.benchmarks[benchmark].results;
+  const resultsForIteration = allResults[resultIteration];
+  // If a given iteration does not declare a result, then the result
+  // was the same as the first run.
+  if (resultIteration > 0 && !(resultName in resultsForIteration)) {
+    return allResults.first()[resultName];
+  }
+  return resultsForIteration[resultName];
+}
+
+function getAllResults(benchmark, commit, resultName) {
+  const result = [];
+  const allResults = commit.benchmarks[benchmark].results;
+  for (var iteration = 0; iteration < allResults.length; iteration++) {
+    result.push(getSingleResult(benchmark, commit, resultName, iteration));
+  }
+  return result;
+}
