Synced repos to: 60736
diff --git a/crosperf/results_cache.py b/crosperf/results_cache.py
index 6e222c0..6fdca55 100644
--- a/crosperf/results_cache.py
+++ b/crosperf/results_cache.py
@@ -27,7 +27,8 @@
   what the key of the cache is. For runs with perf, it stores perf.data,
   perf.report, etc. The key generation is handled by the ResultsCache class.
   """
-  def __init__(self, logger):
+  def __init__(self, chromeos_root, logger):
+    self._chromeos_root = chromeos_root
     self._logger = logger
     self._ce = command_executer.GetCommandExecuter(self._logger)
     self._temp_dir = None
@@ -52,24 +53,27 @@
     self._CopyFilesTo(dest_dir, self.perf_report_files)
 
   def _GetKeyvals(self):
-    command = "find %s -regex .*results/keyval$" % self.results_dir
+    generate_test_report = os.path.join(self._chromeos_root,
+                                        "src",
+                                        "platform",
+                                        "crostestutils",
+                                        "utils_py",
+                                        "generate_test_report.py")
+    command = ("python %s --no-color --csv %s" %
+               (generate_test_report,
+                self.results_dir))
     [ret, out, err] = self._ce.RunCommand(command, return_output=True)
     keyvals_dict = {}
-    for f in out.splitlines():
-      keyvals = open(f, "r").read()
-      keyvals_dict.update(self._ParseKeyvals(keyvals))
+    for line in out.splitlines():
+      tokens = line.split(",")
+      key = tokens[-2]
+      if key.startswith(self.results_dir):
+        key = key[len(self.results_dir) + 1:]
+      value = tokens[-1]
+      keyvals_dict[key] = value
 
     return keyvals_dict
 
-  def _ParseKeyvals(self, keyvals):
-    keyval_dict = {}
-    for l in keyvals.splitlines():
-      l = l.strip()
-      if l:
-        key, val = l.split("=")
-        keyval_dict[key] = val
-    return keyval_dict
-
   def _GetResultsDir(self):
     mo = re.search("Results placed in (\S+)", self.out)
     if mo:
@@ -137,8 +141,7 @@
           value = str(misc.UnitToNumber(num_events))
           self.keyvals[key] = value
 
-  def _PopulateFromRun(self, chromeos_root, board, out, err, retval):
-    self._chromeos_root = chromeos_root
+  def _PopulateFromRun(self, board, out, err, retval):
     self._board = board
     self.out = out
     self.err = err
@@ -210,13 +213,13 @@
 
   @classmethod
   def CreateFromRun(cls, logger, chromeos_root, board, out, err, retval):
-    result = cls(logger)
-    result._PopulateFromRun(chromeos_root, board, out, err, retval)
+    result = cls(chromeos_root, logger)
+    result._PopulateFromRun(board, out, err, retval)
     return result
 
   @classmethod
-  def CreateFromCacheHit(cls, logger, cache_dir):
-    result = cls(logger)
+  def CreateFromCacheHit(cls, chromeos_root, logger, cache_dir):
+    result = cls(chromeos_root, logger)
     try:
       result._PopulateFromCacheDir(cache_dir)
     except Exception as e:
@@ -325,7 +328,8 @@
 
     self._logger.LogOutput("Trying to read from cache dir: %s" % cache_dir)
 
-    result = Result.CreateFromCacheHit(self._logger, cache_dir)
+    result = Result.CreateFromCacheHit(self.chromeos_root,
+                                       self._logger, cache_dir)
 
     if not result:
       return None