Update benchmarks to handle cog workflows

Test: run ./build/make/tools/benchmarks in a cog workspace
Change-Id: I421d1d08b4e90a79b8416486025229d4f3263fbe
diff --git a/tools/perf/benchmarks b/tools/perf/benchmarks
index 61bf888..06e0009 100755
--- a/tools/perf/benchmarks
+++ b/tools/perf/benchmarks
@@ -131,8 +131,14 @@
     """Remove the out directory."""
     def remove_out():
         out_dir = utils.get_out_dir()
+        #only remove actual contents, in case out is a symlink (as is the case for cog)
         if os.path.exists(out_dir):
-            shutil.rmtree(out_dir)
+          for filename in os.listdir(out_dir):
+              p = os.path.join(out_dir, filename)
+              if os.path.isfile(p) or os.path.islink(p):
+                  os.remove(p)
+              elif os.path.isdir(p):
+                  shutil.rmtree(p)
     return Change(label="Remove out", change=remove_out, undo=lambda: None)
 
 
diff --git a/tools/perf/utils.py b/tools/perf/utils.py
index 934130d..0e66d4c 100644
--- a/tools/perf/utils.py
+++ b/tools/perf/utils.py
@@ -19,9 +19,11 @@
 
 def get_root():
     top_dir = os.environ.get("ANDROID_BUILD_TOP")
-    if top_dir:
-        return pathlib.Path(top_dir).resolve()
     d = pathlib.Path.cwd()
+    # with cog, someone may have a new workspace and new source tree top, but
+    # not run lunch yet, resulting in a misleading ANDROID_BUILD_TOP value
+    if top_dir and d.is_relative_to(top_dir):
+        return pathlib.Path(top_dir).resolve()
     while True:
         if d.joinpath("build", "soong", "soong_ui.bash").exists():
             return d.resolve().absolute()