diff --git a/tools/historic_run.py b/tools/historic_run.py
index 648e31d..996bc6d 100755
--- a/tools/historic_run.py
+++ b/tools/historic_run.py
@@ -44,10 +44,14 @@
 class GitCommit(object):
 
     def __init__(self, git_hash, destination_dir, destination, timestamp):
+        self._branch = None
+        self._branch_is_computed = False
         self.git_hash = git_hash
         self.destination_dir = destination_dir
         self.destination = destination
         self.timestamp = timestamp
+        self._version = None
+        self._version_is_computed = False
 
     def __str__(self):
         return '%s : %s (%s)' % (self.git_hash, self.destination,
@@ -57,15 +61,21 @@
         return self.__str__()
 
     def branch(self):
+        if self._branch_is_computed:
+            return self._branch
         branches = subprocess.check_output(
-            ['git', 'branch', '--contains', 'HEAD',
-             '-r']).decode('utf-8').strip().splitlines()
+            ['git', 'branch', '--contains',
+             self.hash(), '-r']).decode('utf-8').strip().splitlines()
         if len(branches) != 1:
-            return 'main'
-        branch = branches[0].strip()
-        if 'main' in branch:
-            return 'main'
-        return branch[branch.find('/') + 1:]
+            self._branch = 'main'
+        else:
+            branch = branches[0].strip()
+            if 'main' in branch:
+                self._branch = 'main'
+            else:
+                self._branch = branch[branch.find('/') + 1:]
+        self._branch_is_computed = True
+        return self._branch
 
     def hash(self):
         return self.git_hash
@@ -92,12 +102,18 @@
         return self.timestamp
 
     def version(self):
+        if self._version_is_computed:
+            return self._version
         title = self.title()
         if title.startswith(
                 'Version '
-        ) and 'src/main/java/com/android/tools/r8/Version.java' in changes_files:
-            return title[len('Version '):]
-        return None
+        ) and 'src/main/java/com/android/tools/r8/Version.java' in self.changed_files(
+        ):
+            self._version = title[len('Version '):]
+        else:
+            self._version = None
+        self._version_is_computed = True
+        return self._version
 
 
 def git_commit_from_hash(hash):
diff --git a/tools/upload_benchmark_data_to_google_storage.py b/tools/upload_benchmark_data_to_google_storage.py
index 8570e8b..79e594e 100755
--- a/tools/upload_benchmark_data_to_google_storage.py
+++ b/tools/upload_benchmark_data_to_google_storage.py
@@ -89,20 +89,13 @@
     return release_commits
 
 
-def ParseJsonFromCloudStorage(filename, local_bucket):
-    abs_path = os.path.join(local_bucket, filename)
-    if not os.path.exists(abs_path):
+def ParseJsonFromCloudStorage(filename, local_bucket_dict):
+    if not filename in local_bucket_dict:
         return None
-    with open(abs_path, 'r') as f:
-        lines = f.readlines()
-        content = ''.join(lines)
-        try:
-            return json.loads(content)
-        except:
-            return None
+    return json.loads(local_bucket_dict[filename])
 
 
-def RecordBenchmarkResult(commit, benchmark, benchmark_info, local_bucket,
+def RecordBenchmarkResult(commit, benchmark, benchmark_info, local_bucket_dict,
                           target, benchmarks):
     if not target in benchmark_info['targets']:
         return
@@ -111,20 +104,20 @@
     if sub_benchmarks_for_target:
         for sub_benchmark in sub_benchmarks_for_target:
             RecordSingleBenchmarkResult(commit, benchmark + sub_benchmark,
-                                        local_bucket, target, benchmarks)
+                                        local_bucket_dict, target, benchmarks)
     else:
-        RecordSingleBenchmarkResult(commit, benchmark, local_bucket, target,
-                                    benchmarks)
+        RecordSingleBenchmarkResult(commit, benchmark, local_bucket_dict,
+                                    target, benchmarks)
 
 
-def RecordSingleBenchmarkResult(commit, benchmark, local_bucket, target,
+def RecordSingleBenchmarkResult(commit, benchmark, local_bucket_dict, target,
                                 benchmarks):
     filename = perf.GetArtifactLocation(benchmark,
                                         target,
                                         commit.hash(),
                                         'result.json',
                                         branch=commit.branch())
-    benchmark_data = ParseJsonFromCloudStorage(filename, local_bucket)
+    benchmark_data = ParseJsonFromCloudStorage(filename, local_bucket_dict)
     if benchmark_data:
         benchmarks[benchmark] = benchmark_data
 
@@ -208,8 +201,20 @@
 
 
 def run(commits, local_bucket, temp, outdir=None):
+    print('Loading bucket into memory')
+    local_bucket_dict = {}
+    for (root, dirs, files) in os.walk(local_bucket):
+        for file in files:
+            if file != 'result.json':
+                continue
+            abs_path = os.path.join(root, file)
+            rel_path = os.path.relpath(abs_path, local_bucket)
+            with open(abs_path, 'r') as f:
+                local_bucket_dict[rel_path] = f.read()
+
     # Aggregate all the result.json files into a single file that has the
     # same format as tools/perf/benchmark_data.json.
+    print('Processing commits')
     d8_benchmark_data = []
     r8_benchmark_data = []
     retrace_benchmark_data = []
@@ -219,23 +224,26 @@
         retrace_benchmarks = {}
         for benchmark, benchmark_info in perf.ALL_BENCHMARKS.items():
             RecordBenchmarkResult(commit, benchmark, benchmark_info,
-                                  local_bucket, 'd8', d8_benchmarks)
+                                  local_bucket_dict, 'd8', d8_benchmarks)
             RecordBenchmarkResult(commit, benchmark, benchmark_info,
-                                  local_bucket, 'r8-full', r8_benchmarks)
+                                  local_bucket_dict, 'r8-full', r8_benchmarks)
             RecordBenchmarkResult(commit, benchmark, benchmark_info,
-                                  local_bucket, 'retrace', retrace_benchmarks)
+                                  local_bucket_dict, 'retrace',
+                                  retrace_benchmarks)
         RecordBenchmarkResults(commit, d8_benchmarks, d8_benchmark_data)
         RecordBenchmarkResults(commit, r8_benchmarks, r8_benchmark_data)
         RecordBenchmarkResults(commit, retrace_benchmarks,
                                retrace_benchmark_data)
 
     # Trim data.
+    print('Trimming data')
     d8_benchmark_data = TrimBenchmarkResults(d8_benchmark_data)
     r8_benchmark_data = TrimBenchmarkResults(r8_benchmark_data)
     retrace_benchmark_data = TrimBenchmarkResults(retrace_benchmark_data)
 
     # Write output JSON files to public bucket, or to tools/perf/ if running
     # with --local-bucket.
+    print('Writing JSON')
     ArchiveBenchmarkResults(d8_benchmark_data, 'd8_benchmark_data.json', outdir,
                             temp)
     ArchiveBenchmarkResults(r8_benchmark_data, 'r8_benchmark_data.json', outdir,
@@ -244,6 +252,7 @@
                             'retrace_benchmark_data.json', outdir, temp)
 
     # Write remaining files to public bucket.
+    print('Writing static files')
     if outdir is None:
         for file in FILES:
             dest = os.path.join(utils.TOOLS_DIR, 'perf', file)
