OLD | NEW |
1 # Copyright 2017 The Chromium Authors. All rights reserved. | 1 # Copyright 2017 The Chromium Authors. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 | 4 |
5 import json | 5 import json |
6 | 6 |
7 from dashboard.pinpoint.models import quest as quest_module | 7 from dashboard.pinpoint.models import quest as quest_module |
8 | 8 |
9 | 9 |
10 _DEFAULT_REPEAT_COUNT = 20 | 10 _DEFAULT_REPEAT_COUNT = 20 |
(...skipping 11 matching lines...) Expand all Loading... |
22 GenerateQuests uses the request parameters to infer what types of Quests the | 22 GenerateQuests uses the request parameters to infer what types of Quests the |
23 user wants to run, and creates a list of Quests with the given configuration. | 23 user wants to run, and creates a list of Quests with the given configuration. |
24 | 24 |
25 Arguments: | 25 Arguments: |
26 request: A WebOb/webapp2 Request object. | 26 request: A WebOb/webapp2 Request object. |
27 | 27 |
28 Returns: | 28 Returns: |
29 A tuple of (arguments, quests), where arguments is a dict containing the | 29 A tuple of (arguments, quests), where arguments is a dict containing the |
30 request arguments that were used, and quests is a list of Quests. | 30 request arguments that were used, and quests is a list of Quests. |
31 """ | 31 """ |
| 32 target = request.get('target') |
| 33 if target in ('telemetry_perf_tests', 'telemetry_perf_webview_tests'): |
| 34 quest_functions = (_FindIsolate, _TelemetryRunTest, _ReadChartJsonValue) |
| 35 else: |
| 36 quest_functions = (_FindIsolate, _GTestRunTest, _ReadGraphJsonValue) |
| 37 |
32 arguments = {} | 38 arguments = {} |
33 quests = [] | 39 quests = [] |
34 | 40 for quest_function in quest_functions: |
35 quest_arguments, quest = _FindIsolateQuest(request) | 41 quest_arguments, quest = quest_function(request) |
36 arguments.update(quest_arguments) | 42 if not quest: |
37 quests.append(quest) | 43 return arguments, quests |
38 | |
39 dimensions = request.get('dimensions') | |
40 if not dimensions: | |
41 return arguments, quests | |
42 dimensions = json.loads(dimensions) | |
43 arguments['dimensions'] = json.dumps(dimensions) | |
44 | |
45 if arguments['target'] in ('telemetry_perf_tests', | |
46 'telemetry_perf_webview_tests'): | |
47 quest_arguments, quest = _TelemetryRunTestQuest(request, dimensions) | |
48 arguments.update(quest_arguments) | 44 arguments.update(quest_arguments) |
49 quests.append(quest) | 45 quests.append(quest) |
50 | 46 |
51 metric = request.get('metric') | |
52 if not metric: | |
53 return arguments, quests | |
54 arguments['metric'] = metric | |
55 | |
56 quests.append(quest_module.ReadChartJsonValue(metric, request.get('story'))) | |
57 else: | |
58 raise NotImplementedError() | |
59 | |
60 return arguments, quests | 47 return arguments, quests |
61 | 48 |
62 | 49 |
63 def _FindIsolateQuest(request): | 50 def _FindIsolate(request): |
64 arguments = {} | 51 arguments = {} |
65 | 52 |
66 configuration = request.get('configuration') | 53 configuration = request.get('configuration') |
67 if not configuration: | 54 if not configuration: |
68 raise TypeError('Missing "configuration" argument.') | 55 raise TypeError('Missing "configuration" argument.') |
69 arguments['configuration'] = configuration | 56 arguments['configuration'] = configuration |
70 | 57 |
71 target = request.get('target') | 58 target = request.get('target') |
72 if not target: | 59 if not target: |
73 raise TypeError('Missing "target" argument.') | 60 raise TypeError('Missing "target" argument.') |
74 arguments['target'] = target | 61 arguments['target'] = target |
75 | 62 |
76 return arguments, quest_module.FindIsolate(configuration, target) | 63 return arguments, quest_module.FindIsolate(configuration, target) |
77 | 64 |
78 | 65 |
79 def _TelemetryRunTestQuest(request, dimensions): | 66 def _TelemetryRunTest(request): |
80 arguments = {} | 67 arguments = {} |
81 swarming_extra_args = [] | 68 swarming_extra_args = [] |
82 | 69 |
| 70 dimensions = request.get('dimensions') |
| 71 if not dimensions: |
| 72 return {}, None |
| 73 dimensions = json.loads(dimensions) |
| 74 arguments['dimensions'] = json.dumps(dimensions) |
| 75 |
83 benchmark = request.get('benchmark') | 76 benchmark = request.get('benchmark') |
84 if not benchmark: | 77 if not benchmark: |
85 raise TypeError('Missing "benchmark" argument.') | 78 raise TypeError('Missing "benchmark" argument.') |
86 arguments['benchmark'] = benchmark | 79 arguments['benchmark'] = benchmark |
87 swarming_extra_args.append(benchmark) | 80 swarming_extra_args.append(benchmark) |
88 | 81 |
89 story = request.get('story') | 82 story = request.get('story') |
90 if story: | 83 if story: |
91 arguments['story'] = story | 84 arguments['story'] = story |
92 swarming_extra_args += ('--story-filter', story) | 85 swarming_extra_args += ('--story-filter', story) |
93 | 86 |
94 repeat_count = request.get('repeat_count') | 87 repeat_count = request.get('repeat_count') |
95 if repeat_count: | 88 if repeat_count: |
96 arguments['repeat_count'] = repeat_count | 89 arguments['repeat_count'] = repeat_count |
97 else: | 90 else: |
98 repeat_count = '20' | 91 repeat_count = str(_DEFAULT_REPEAT_COUNT) |
99 swarming_extra_args += ('--pageset-repeat', repeat_count) | 92 swarming_extra_args += ('--pageset-repeat', repeat_count) |
100 | 93 |
101 browser = request.get('browser') | 94 browser = request.get('browser') |
102 if not browser: | 95 if not browser: |
103 raise TypeError('Missing "browser" argument.') | 96 raise TypeError('Missing "browser" argument.') |
104 arguments['browser'] = browser | 97 arguments['browser'] = browser |
105 swarming_extra_args += ('--browser', browser) | 98 swarming_extra_args += ('--browser', browser) |
106 | 99 |
107 swarming_extra_args += ('-v', '--upload-results', | 100 swarming_extra_args += ('-v', '--upload-results', |
108 '--output-format', 'chartjson') | 101 '--output-format', 'chartjson') |
109 swarming_extra_args += _SWARMING_EXTRA_ARGS | 102 swarming_extra_args += _SWARMING_EXTRA_ARGS |
110 | 103 |
111 return arguments, quest_module.RunTest(dimensions, swarming_extra_args) | 104 return arguments, quest_module.RunTest(dimensions, swarming_extra_args) |
| 105 |
| 106 |
| 107 def _GTestRunTest(request): |
| 108 arguments = {} |
| 109 swarming_extra_args = [] |
| 110 |
| 111 dimensions = request.get('dimensions') |
| 112 if not dimensions: |
| 113 return {}, None |
| 114 dimensions = json.loads(dimensions) |
| 115 arguments['dimensions'] = json.dumps(dimensions) |
| 116 |
| 117 test = request.get('test') |
| 118 if test: |
| 119 arguments['test'] = test |
| 120 swarming_extra_args += ('--gtest_filter', test) |
| 121 |
| 122 repeat_count = request.get('repeat_count') |
| 123 if repeat_count: |
| 124 arguments['repeat_count'] = repeat_count |
| 125 else: |
| 126 repeat_count = str(_DEFAULT_REPEAT_COUNT) |
| 127 swarming_extra_args += ('--gtest_repeat', repeat_count) |
| 128 |
| 129 swarming_extra_args += _SWARMING_EXTRA_ARGS |
| 130 |
| 131 return arguments, quest_module.RunTest(dimensions, swarming_extra_args) |
| 132 |
| 133 |
| 134 def _ReadChartJsonValue(request): |
| 135 arguments = {} |
| 136 |
| 137 metric = request.get('metric') |
| 138 if not metric: |
| 139 return {}, None |
| 140 arguments['metric'] = metric |
| 141 |
| 142 story = request.get('story') |
| 143 if story: |
| 144 arguments['story'] = story |
| 145 |
| 146 return arguments, quest_module.ReadChartJsonValue(metric, story) |
| 147 |
| 148 |
| 149 def _ReadGraphJsonValue(request): |
| 150 arguments = {} |
| 151 |
| 152 chart = request.get('chart') |
| 153 trace = request.get('trace') |
| 154 if not (chart or trace): |
| 155 return {}, None |
| 156 if chart and not trace: |
| 157 raise TypeError('"chart" specified but no "trace" given.') |
| 158 if trace and not chart: |
| 159 raise TypeError('"trace" specified but no "chart" given.') |
| 160 arguments['chart'] = chart |
| 161 arguments['trace'] = trace |
| 162 |
| 163 return arguments, quest_module.ReadGraphJsonValue(chart, trace) |
OLD | NEW |