Index: tools/run_perf.py |
diff --git a/tools/run_perf.py b/tools/run_perf.py |
index 655f68199ed7dd3f1d36446527bafa2ea91ef801..957e2370d7b1623b072f52f34736f7008cb8c664 100755 |
--- a/tools/run_perf.py |
+++ b/tools/run_perf.py |
@@ -432,9 +432,56 @@ def FlattenRunnables(node): |
raise Exception("Invalid suite configuration.") |
+class Platform(object): |
+ @staticmethod |
+ def GetPlatform(options): |
+ if options.arch.startswith("android"): |
+ return AndroidPlatform(options) |
+ else: |
+ return DesktopPlatform(options) |
+ |
+ |
+class DesktopPlatform(Platform): |
+ def __init__(self, options): |
+ workspace = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) |
+ |
+ if options.buildbot: |
+ self.shell_dir = os.path.join(workspace, options.outdir, "Release") |
+ else: |
+ self.shell_dir = os.path.join(workspace, options.outdir, |
+ "%s.release" % options.arch) |
+ |
+ def PrepareExecution(self): |
+ pass |
+ |
+ def PrepareTests(self, runnable, path): |
+ runnable.ChangeCWD(path) |
+ |
+ def Run(self, runnable, count): |
+ output = commands.Execute(runnable.GetCommand(self.shell_dir), |
+ timeout=runnable.timeout) |
+ print ">>> Stdout (#%d):" % (count + 1) |
+ print output.stdout |
+ if output.stderr: # pragma: no cover |
+ # Print stderr for debugging. |
+ print ">>> Stderr (#%d):" % (count + 1) |
+ print output.stderr |
+ if output.timed_out: |
+ print ">>> Test timed out after %ss." % runnable.timeout |
+ return output.stdout |
+ |
+ |
+# TODO(machenbach): Implement android platform. |
+class AndroidPlatform(Platform): |
+ def __init__(self, options): |
+ pass |
+ |
+ |
# TODO: Implement results_processor. |
def Main(args): |
parser = optparse.OptionParser() |
+ parser.add_option("--android-build-tools", |
+ help="Path to chromium's build/android.") |
parser.add_option("--arch", |
help=("The architecture to run tests for, " |
"'auto' or 'native' for auto-detect"), |
@@ -442,6 +489,9 @@ def Main(args): |
parser.add_option("--buildbot", |
help="Adapt to path structure used on buildbots", |
default=False, action="store_true") |
+ parser.add_option("--device", |
+ help="The device ID to run Android tests on. If not given " |
+ "it will be autodetected.") |
parser.add_option("--json-test-results", |
help="Path to a file for storing json results.") |
parser.add_option("--outdir", help="Base directory with compile output", |
@@ -459,13 +509,19 @@ def Main(args): |
print "Unknown architecture %s" % options.arch |
return 1 |
- workspace = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) |
+ if (bool(options.arch.startswith("android")) != |
+ bool(options.android_build_tools)): # pragma: no cover |
+ print ("Android architectures imply setting --android-build-tools and the " |
+ "other way around.") |
+ return 1 |
+ |
+ if (options.device and not |
+ options.arch.startswith("android")): # pragma: no cover |
+ print "Specifying a device requires an Android architecture to be used." |
+ return 1 |
- if options.buildbot: |
- shell_dir = os.path.join(workspace, options.outdir, "Release") |
- else: |
- shell_dir = os.path.join(workspace, options.outdir, |
- "%s.release" % options.arch) |
+ platform = Platform.GetPlatform(options) |
+ platform.PrepareExecution() |
results = Results() |
for path in args: |
@@ -483,24 +539,14 @@ def Main(args): |
for runnable in FlattenRunnables(BuildGraphs(suite, options.arch)): |
print ">>> Running suite: %s" % "/".join(runnable.graphs) |
- runnable.ChangeCWD(path) |
+ platform.PrepareTests(runnable, path) |
def Runner(): |
"""Output generator that reruns several times.""" |
for i in xrange(0, max(1, runnable.run_count)): |
# TODO(machenbach): Allow timeout per arch like with run_count per |
# arch. |
- output = commands.Execute(runnable.GetCommand(shell_dir), |
- timeout=runnable.timeout) |
- print ">>> Stdout (#%d):" % (i + 1) |
- print output.stdout |
- if output.stderr: # pragma: no cover |
- # Print stderr for debugging. |
- print ">>> Stderr (#%d):" % (i + 1) |
- print output.stderr |
- if output.timed_out: |
- print ">>> Test timed out after %ss." % runnable.timeout |
- yield output.stdout |
+ yield platform.Run(runnable, i) |
# Let runnable iterate over all runs and handle output. |
results += runnable.Run(Runner) |