OLD | NEW |
| (Empty) |
1 #!/usr/bin/env python | |
2 # Copyright 2016 The Chromium Authors. All rights reserved. | |
3 # Use of this source code is governed by a BSD-style license that can be | |
4 # found in the LICENSE file. | |
5 | |
6 import logging | |
7 import json | |
8 import optparse | |
9 import os | |
10 import re | |
11 import sys | |
12 | |
13 from slave import results_dashboard | |
14 from slave import slave_utils | |
15 | |
16 | |
17 def _GetMainRevision(commit_pos, build_dir, revision=None): | |
18 """Return revision to use as the numerical x-value in the perf dashboard. | |
19 | |
20 This will be used as the value of "rev" in the data passed to | |
21 results_dashboard.SendResults. | |
22 | |
23 In order or priority, this function could return: | |
24 1. The value of "got_revision_cp" in build properties. | |
25 3. An SVN number, git commit position, or git commit hash. | |
26 """ | |
27 if commit_pos is not None: | |
28 return int(re.search(r'{#(\d+)}', commit_pos).group(1)) | |
29 # TODO(sullivan,qyearsley): Don't fall back to _GetRevision if it returns | |
30 # a git commit, since this should be a numerical revision. Instead, abort | |
31 # and fail. | |
32 return slave_utils.GetRevision(os.path.dirname(os.path.abspath(build_dir))) | |
33 | |
34 | |
35 def main(args): | |
36 # Parse options | |
37 parser = optparse.OptionParser() | |
38 parser.add_option('--name') | |
39 parser.add_option('--chartjson-results') | |
40 parser.add_option('--got-revision-cp') | |
41 parser.add_option('--build-dir') | |
42 parser.add_option('--perf-id') | |
43 parser.add_option('--results-url') | |
44 parser.add_option('--buildername') | |
45 parser.add_option('--buildnumber') | |
46 parser.add_option('--got-webrtc-revision') | |
47 parser.add_option('--got-v8-revision') | |
48 parser.add_option('--version') | |
49 parser.add_option('--git-revision') | |
50 options, extra_args = parser.parse_args(args) | |
51 | |
52 # Validate options. | |
53 if extra_args: | |
54 parser.error('Unexpected command line arguments') | |
55 if not options.perf_id or not options.results_url: | |
56 parser.error('--perf-id and --results-url are required') | |
57 | |
58 main_revision = _GetMainRevision(options.got_revision_cp, options.build_dir) | |
59 blink_revision = slave_utils.GetBlinkRevision(options.build_dir) | |
60 revisions = slave_utils.GetPerfDashboardRevisionsWithProperties( | |
61 options.got_webrtc_revision, options.got_v8_revision, options.version, | |
62 options.git_revision, main_revision, blink_revision) | |
63 reference_build = 'reference' in options.name | |
64 stripped_test_name = options.name.replace('.reference', '') | |
65 dashboard_json = results_dashboard.MakeDashboardJsonV1( | |
66 json.loads(options.chartjson_results), | |
67 revisions, stripped_test_name, options.perf_id, | |
68 options.buildername, options.buildnumber, | |
69 None, reference_build) | |
70 if dashboard_json: | |
71 logging.debug(json.dumps(dashboard_json , indent=2)) | |
72 results_dashboard.SendResults( | |
73 dashboard_json, | |
74 options.results_url, | |
75 options.build_dir) | |
76 else: | |
77 print 'Error: No perf dashboard JSON was produced.' | |
78 print '@@@STEP_FAILURE@@@' | |
79 return 0 | |
80 | |
81 | |
82 if __name__ == '__main__': | |
83 sys.exit(main((sys.argv))) | |
OLD | NEW |