OLD | NEW |
---|---|
1 #!/usr/bin/python | 1 #!/usr/bin/python |
2 # | 2 # |
3 # Copyright 2015 The Chromium Authors. All rights reserved. | 3 # Copyright 2015 The Chromium Authors. All rights reserved. |
4 # Use of this source code is governed by a BSD-style license that can be | 4 # Use of this source code is governed by a BSD-style license that can be |
5 # found in the LICENSE file. | 5 # found in the LICENSE file. |
6 | 6 |
7 """Loops Custom Tabs tests and outputs the results into a CSV file.""" | 7 """Loops Custom Tabs tests and outputs the results into a CSV file.""" |
8 | 8 |
9 import collections | 9 import collections |
10 import contextlib | 10 import contextlib |
(...skipping 23 matching lines...) Expand all Loading... | |
34 | 34 |
35 | 35 |
36 # Local build of Chrome (not Chromium). | 36 # Local build of Chrome (not Chromium). |
37 _CHROME_PACKAGE = 'com.google.android.apps.chrome' | 37 _CHROME_PACKAGE = 'com.google.android.apps.chrome' |
38 _COMMAND_LINE_PATH = '/data/local/tmp/chrome-command-line' | 38 _COMMAND_LINE_PATH = '/data/local/tmp/chrome-command-line' |
39 _TEST_APP_PACKAGE_NAME = 'org.chromium.customtabsclient.test' | 39 _TEST_APP_PACKAGE_NAME = 'org.chromium.customtabsclient.test' |
40 _INVALID_VALUE = -1 | 40 _INVALID_VALUE = -1 |
41 | 41 |
42 | 42 |
43 # Command line arguments for Chrome. | 43 # Command line arguments for Chrome. |
44 _CHROME_ARGS = [ | 44 CHROME_ARGS = [ |
45 # Disable backgound network requests that may pollute WPR archive, pollute | 45 # Disable backgound network requests that may pollute WPR archive, pollute |
46 # HTTP cache generation, and introduce noise in loading performance. | 46 # HTTP cache generation, and introduce noise in loading performance. |
47 '--disable-background-networking', | 47 '--disable-background-networking', |
48 '--disable-default-apps', | 48 '--disable-default-apps', |
49 '--no-proxy-server', | 49 '--no-proxy-server', |
50 # TODO(droger): Remove once crbug.com/354743 is fixed. | 50 # TODO(droger): Remove once crbug.com/354743 is fixed. |
51 '--safebrowsing-disable-auto-update', | 51 '--safebrowsing-disable-auto-update', |
52 | 52 |
53 # Disables actions that chrome performs only on first run or each launches, | 53 # Disables actions that chrome performs only on first run or each launches, |
54 # which can interfere with page load performance, or even block its | 54 # which can interfere with page load performance, or even block its |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
126 match = None | 126 match = None |
127 try: | 127 try: |
128 match = logcat_monitor.WaitFor(result_line_re, timeout=logcat_timeout) | 128 match = logcat_monitor.WaitFor(result_line_re, timeout=logcat_timeout) |
129 except device_errors.CommandTimeoutError as _: | 129 except device_errors.CommandTimeoutError as _: |
130 logging.warning('Timeout waiting for the result line') | 130 logging.warning('Timeout waiting for the result line') |
131 logcat_monitor.Stop() | 131 logcat_monitor.Stop() |
132 logcat_monitor.Close() | 132 logcat_monitor.Close() |
133 return match.group(1) if match is not None else None | 133 return match.group(1) if match is not None else None |
134 | 134 |
135 | 135 |
136 Result = collections.namedtuple('Result', ['warmup', 'speculation_mode', | 136 RESULT_FIELDS = ('warmup', 'speculation_mode', 'delay_to_may_launch_url', |
137 'delay_to_may_launch_url', | 137 'delay_to_launch_url', 'commit', 'plt', |
138 'delay_to_launch_url', | 138 'first_contentful_paint') |
139 'commit', 'plt', | 139 Result = collections.namedtuple('Result', RESULT_FIELDS) |
140 'first_contentful_paint']) | |
141 | 140 |
142 | 141 |
143 def ParseResult(result_line): | 142 def ParseResult(result_line): |
144 """Parses a result line, and returns it. | 143 """Parses a result line, and returns it. |
145 | 144 |
146 Args: | 145 Args: |
147 result_line: (str) A result line, as returned by RunOnce(). | 146 result_line: (str) A result line, as returned by RunOnce(). |
148 | 147 |
149 Returns: | 148 Returns: |
150 An instance of Result. | 149 An instance of Result. |
(...skipping 23 matching lines...) Expand all Loading... | |
174 once: (bool) Run only once. | 173 once: (bool) Run only once. |
175 should_stop: (threading.Event or None) When the event is set, stop looping. | 174 should_stop: (threading.Event or None) When the event is set, stop looping. |
176 """ | 175 """ |
177 with SetupWpr(device, wpr_archive_path, wpr_record, network_condition, | 176 with SetupWpr(device, wpr_archive_path, wpr_record, network_condition, |
178 wpr_log_path) as wpr_attributes: | 177 wpr_log_path) as wpr_attributes: |
179 to_stdout = output_filename == '-' | 178 to_stdout = output_filename == '-' |
180 out = sys.stdout if to_stdout else open(output_filename, 'a') | 179 out = sys.stdout if to_stdout else open(output_filename, 'a') |
181 try: | 180 try: |
182 while should_stop is None or not should_stop.is_set(): | 181 while should_stop is None or not should_stop.is_set(): |
183 config = configs[random.randint(0, len(configs) - 1)] | 182 config = configs[random.randint(0, len(configs) - 1)] |
184 chrome_args = _CHROME_ARGS + wpr_attributes.chrome_args | 183 chrome_args = CHROME_ARGS + wpr_attributes.chrome_args |
185 if config['speculation_mode'] == 'no_state_prefetch': | 184 if config['speculation_mode'] == 'no_state_prefetch': |
186 # NoStatePrefetch is enabled through an experiment. | 185 # NoStatePrefetch is enabled through an experiment. |
187 chrome_args.extend([ | 186 chrome_args.extend([ |
188 '--force-fieldtrials=trial/group', | 187 '--force-fieldtrials=trial/group', |
189 '--force-fieldtrial-params=trial.group:mode/no_state_prefetch', | 188 '--force-fieldtrial-params=trial.group:mode/no_state_prefetch', |
190 '--enable-features="NoStatePrefetch<trial"']) | 189 '--enable-features="NoStatePrefetch<trial"']) |
191 | 190 |
192 result = RunOnce(device, config['url'], config['warmup'], | 191 result = RunOnce(device, config['url'], config['warmup'], |
193 config['speculation_mode'], | 192 config['speculation_mode'], |
194 config['delay_to_may_launch_url'], | 193 config['delay_to_may_launch_url'], |
(...skipping 16 matching lines...) Expand all Loading... | |
211 def ProcessOutput(filename): | 210 def ProcessOutput(filename): |
212 """Reads an output file, and returns a processed numpy array. | 211 """Reads an output file, and returns a processed numpy array. |
213 | 212 |
214 Args: | 213 Args: |
215 filename: (str) file to process. | 214 filename: (str) file to process. |
216 | 215 |
217 Returns: | 216 Returns: |
218 A numpy structured array. | 217 A numpy structured array. |
219 """ | 218 """ |
220 import numpy as np | 219 import numpy as np |
221 data = np.genfromtxt(filename, delimiter=',') | 220 data = np.genfromtxt(filename, delimiter=',', skip_header=1) |
pasko
2016/12/14 19:38:33
is this function going to be used somewhere?
The
Benoit L
2016/12/16 14:27:00
It is used for the analysis.
Acknowledged.
| |
222 result = np.array(np.zeros(len(data)), | 221 result = np.array(np.zeros(len(data)), |
223 dtype=[('warmup', bool), ('speculation_mode', np.int32), | 222 dtype=[('warmup', bool), ('speculation_mode', np.int32), |
224 ('delay_to_may_launch_url', np.int32), | 223 ('delay_to_may_launch_url', np.int32), |
225 ('delay_to_launch_url', np.int32), | 224 ('delay_to_launch_url', np.int32), |
226 ('commit', np.int32), ('plt', np.int32), | 225 ('commit', np.int32), ('plt', np.int32), |
227 ('first_contentful_paint', np.int32)]) | 226 ('first_contentful_paint', np.int32)]) |
228 result['warmup'] = data[:, 0] | 227 result['warmup'] = data[:, 0] |
229 result['speculation_mode'] = data[:, 1] | 228 result['speculation_mode'] = data[:, 1] |
230 result['delay_to_may_launch_url'] = data[:, 2] | 229 result['delay_to_may_launch_url'] = data[:, 2] |
231 result['delay_to_launch_url'] = data[:, 3] | 230 result['delay_to_launch_url'] = data[:, 3] |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
318 'delay_to_launch_url': options.delay_to_launch_url, | 317 'delay_to_launch_url': options.delay_to_launch_url, |
319 'cold': options.cold, | 318 'cold': options.cold, |
320 } | 319 } |
321 LoopOnDevice(device, [config], options.output_file, options.wpr_archive, | 320 LoopOnDevice(device, [config], options.output_file, options.wpr_archive, |
322 options.record, options.network_condition, options.wpr_log, | 321 options.record, options.network_condition, options.wpr_log, |
323 once=options.once) | 322 once=options.once) |
324 | 323 |
325 | 324 |
326 if __name__ == '__main__': | 325 if __name__ == '__main__': |
327 main() | 326 main() |
OLD | NEW |