| Index: tools/run_perf.py | 
| diff --git a/tools/run_perf.py b/tools/run_perf.py | 
| index a8cc3fab7158207f73d5ae460b0f291360a76219..4a01988c2509c8206c196f774c97f93f55944a63 100755 | 
| --- a/tools/run_perf.py | 
| +++ b/tools/run_perf.py | 
| @@ -350,9 +350,9 @@ class Node(object): | 
|  | 
| class DefaultSentinel(Node): | 
| """Fake parent node with all default values.""" | 
| -  def __init__(self): | 
| +  def __init__(self, binary = "d8"): | 
| super(DefaultSentinel, self).__init__() | 
| -    self.binary = "d8" | 
| +    self.binary = binary | 
| self.run_count = 10 | 
| self.timeout = 60 | 
| self.path = [] | 
| @@ -543,11 +543,10 @@ def MakeGraphConfig(suite, arch, parent): | 
| raise Exception("Invalid suite configuration.") | 
|  | 
|  | 
| -def BuildGraphConfigs(suite, arch, parent=None): | 
| +def BuildGraphConfigs(suite, arch, parent): | 
| """Builds a tree structure of graph objects that corresponds to the suite | 
| configuration. | 
| """ | 
| -  parent = parent or DefaultSentinel() | 
|  | 
| # TODO(machenbach): Implement notion of cpu type? | 
| if arch not in suite.get("archs", SUPPORTED_ARCHS): | 
| @@ -813,6 +812,11 @@ def Main(args): | 
| default="out") | 
| parser.add_option("--outdir-no-patch", | 
| help="Base directory with compile output without patch") | 
| +  parser.add_option("--binary-override-path", | 
| +                    help="JavaScript engine binary. By default, d8 under " | 
| +                    "architecture-specific build dir. " | 
| +                    "Not supported in conjunction with outdir-no-patch.") | 
| + | 
| (options, args) = parser.parse_args(args) | 
|  | 
| if len(args) == 0:  # pragma: no cover | 
| @@ -843,7 +847,18 @@ def Main(args): | 
| else: | 
| build_config = "%s.release" % options.arch | 
|  | 
| -  options.shell_dir = os.path.join(workspace, options.outdir, build_config) | 
| +  if options.binary_override_path == None: | 
| +    options.shell_dir = os.path.join(workspace, options.outdir, build_config) | 
| +    default_binary_name = "d8" | 
| +  else: | 
| +    if not os.path.isfile(options.binary_override_path): | 
| +      print "binary-override-path must be a file name" | 
| +      return 1 | 
| +    if options.outdir_no_patch: | 
| +      print "specify either binary-override-path or outdir-no-patch" | 
| +      return 1 | 
| +    options.shell_dir = os.path.dirname(options.binary_override_path) | 
| +    default_binary_name = os.path.basename(options.binary_override_path) | 
|  | 
| if options.outdir_no_patch: | 
| options.shell_dir_no_patch = os.path.join( | 
| @@ -872,7 +887,8 @@ def Main(args): | 
| platform.PreExecution() | 
|  | 
| # Build the graph/trace tree structure. | 
| -    root = BuildGraphConfigs(suite, options.arch) | 
| +    default_parent = DefaultSentinel(default_binary_name) | 
| +    root = BuildGraphConfigs(suite, options.arch, default_parent) | 
|  | 
| # Callback to be called on each node on traversal. | 
| def NodeCB(node): | 
|  |