From 8d042464d9ddfc61ee090cf3d1df709358555e86 Mon Sep 17 00:00:00 2001 From: Michael Achenbach Date: Tue, 18 Nov 2014 15:39:34 +0100 Subject: [PATCH] Prototype for a client-side performance trybot script. BUG=chromium:374740 LOG=n TEST=tools/try_perf.py sunspider octane R=phajdan.jr@chromium.org Review URL: https://codereview.chromium.org/734403002 Cr-Commit-Position: refs/heads/master@{#25398} --- tools/find_depot_tools.py | 40 +++++++++++++++++++++++++++++++++++ tools/try_perf.py | 44 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+) create mode 100644 tools/find_depot_tools.py create mode 100755 tools/try_perf.py diff --git a/tools/find_depot_tools.py b/tools/find_depot_tools.py new file mode 100644 index 0000000000..95ae9e8a2d --- /dev/null +++ b/tools/find_depot_tools.py @@ -0,0 +1,40 @@ +# Copyright 2014 the V8 project authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +"""Small utility function to find depot_tools and add it to the python path. +""" + +import os +import sys + + +def directory_really_is_depot_tools(directory): + return os.path.isfile(os.path.join(directory, 'gclient.py')) + + +def add_depot_tools_to_path(): + """Search for depot_tools and add it to sys.path.""" + # First look if depot_tools is already in PYTHONPATH. + for i in sys.path: + if i.rstrip(os.sep).endswith('depot_tools'): + if directory_really_is_depot_tools(i): + return i + + # Then look if depot_tools is in PATH, common case. + for i in os.environ['PATH'].split(os.pathsep): + if i.rstrip(os.sep).endswith('depot_tools'): + if directory_really_is_depot_tools(i): + sys.path.insert(0, i.rstrip(os.sep)) + return i + # Rare case, it's not even in PATH, look upward up to root. + root_dir = os.path.dirname(os.path.abspath(__file__)) + previous_dir = os.path.abspath(__file__) + while root_dir and root_dir != previous_dir: + if directory_really_is_depot_tools(os.path.join(root_dir, 'depot_tools')): + i = os.path.join(root_dir, 'depot_tools') + sys.path.insert(0, i) + return i + previous_dir = root_dir + root_dir = os.path.dirname(root_dir) + print >> sys.stderr, 'Failed to find depot_tools' + return None diff --git a/tools/try_perf.py b/tools/try_perf.py new file mode 100755 index 0000000000..fcd1ddcbfb --- /dev/null +++ b/tools/try_perf.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python +# Copyright 2014 the V8 project authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import find_depot_tools +import sys + +find_depot_tools.add_depot_tools_to_path() + +from git_cl import Changelist + +BOTS = [ + 'v8_linux32_perf_try', + 'v8_linux64_perf_try', +] + +def main(tests): + cl = Changelist() + if not cl.GetIssue(): + print 'Need to upload first' + return 1 + + props = cl.GetIssueProperties() + if props.get('closed'): + print 'Cannot send tryjobs for a closed CL' + return 1 + + if props.get('private'): + print 'Cannot use trybots with private issue' + return 1 + + if not tests: + print 'Please specify the benchmarks to run as arguments.' + return 1 + + masters = {'internal.client.v8': dict((b, tests) for b in BOTS)} + cl.RpcServer().trigger_distributed_try_jobs( + cl.GetIssue(), cl.GetMostRecentPatchset(), cl.GetBranch(), + False, None, masters) + return 0 + +if __name__ == "__main__": # pragma: no cover + sys.exit(main(sys.argv[1:]))