OLD | NEW |
1 #! /usr/bin/env python | 1 #! /usr/bin/env python |
2 # Copyright 2016 The Chromium Authors. All rights reserved. | 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 | 3 # Use of this source code is governed by a BSD-style license that can be |
4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
5 | 5 |
6 """Instructs Chrome to load series of web pages and reports results. | 6 """Instructs Chrome to load series of web pages and reports results. |
7 | 7 |
8 When running Chrome is sandwiched between preprocessed disk caches and | 8 When running Chrome is sandwiched between preprocessed disk caches and |
9 WepPageReplay serving all connections. | 9 WepPageReplay serving all connections. |
10 | 10 |
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
289 help='How many times to run the job') | 289 help='How many times to run the job') |
290 parser.add_argument('--cache-op', | 290 parser.add_argument('--cache-op', |
291 choices=['clear', 'save', 'push'], | 291 choices=['clear', 'save', 'push'], |
292 default='clear', | 292 default='clear', |
293 help='Configures cache operation to do before launching ' | 293 help='Configures cache operation to do before launching ' |
294 +'Chrome. (Default is clear).') | 294 +'Chrome. (Default is clear).') |
295 parser.add_argument('--wpr-archive', default=None, type=str, | 295 parser.add_argument('--wpr-archive', default=None, type=str, |
296 help='Web page replay archive to load job\'s urls from.') | 296 help='Web page replay archive to load job\'s urls from.') |
297 parser.add_argument('--wpr-record', default=False, action='store_true', | 297 parser.add_argument('--wpr-record', default=False, action='store_true', |
298 help='Record web page replay archive.') | 298 help='Record web page replay archive.') |
| 299 parser.add_argument('--disable-wpr-script-injection', default=False, |
| 300 action='store_true', |
| 301 help='Disable WPR default script injection such as ' + |
| 302 'overriding javascript\'s Math.random() and Date() ' + |
| 303 'with deterministic implementations.') |
299 args = parser.parse_args() | 304 args = parser.parse_args() |
300 | 305 |
301 if not os.path.isdir(args.output): | 306 if not os.path.isdir(args.output): |
302 try: | 307 try: |
303 os.makedirs(args.output) | 308 os.makedirs(args.output) |
304 except OSError: | 309 except OSError: |
305 logging.error('Cannot create directory for results: %s' % args.output) | 310 logging.error('Cannot create directory for results: %s' % args.output) |
306 raise | 311 raise |
307 else: | 312 else: |
308 _CleanPreviousTraces(args.output) | 313 _CleanPreviousTraces(args.output) |
309 | 314 |
310 job_urls = _ReadUrlsFromJobDescription(args.job) | 315 job_urls = _ReadUrlsFromJobDescription(args.job) |
311 device = device_utils.DeviceUtils.HealthyDevices()[0] | 316 device = device_utils.DeviceUtils.HealthyDevices()[0] |
312 local_cache_archive_path = os.path.join(args.output, 'cache.zip') | 317 local_cache_archive_path = os.path.join(args.output, 'cache.zip') |
313 local_cache_directory_path = None | 318 local_cache_directory_path = None |
314 | 319 |
315 if args.cache_op == 'push': | 320 if args.cache_op == 'push': |
316 assert os.path.isfile(local_cache_archive_path) | 321 assert os.path.isfile(local_cache_archive_path) |
317 local_cache_directory_path = tempfile.mkdtemp(suffix='.cache') | 322 local_cache_directory_path = tempfile.mkdtemp(suffix='.cache') |
318 _UnzipDirectoryContent(local_cache_archive_path, local_cache_directory_path) | 323 _UnzipDirectoryContent(local_cache_archive_path, local_cache_directory_path) |
319 | 324 |
320 with device_setup.WprHost(device, | 325 with device_setup.WprHost(device, args.wpr_archive, args.wpr_record, |
321 args.wpr_archive, | 326 args.disable_wpr_script_injection) as additional_flags: |
322 args.wpr_record) as additional_flags: | |
323 pages_loaded = 0 | 327 pages_loaded = 0 |
324 for _ in xrange(args.repeat): | 328 for _ in xrange(args.repeat): |
325 for url in job_urls: | 329 for url in job_urls: |
326 if args.cache_op == 'push': | 330 if args.cache_op == 'push': |
327 device.KillAll(_CHROME_PACKAGE, quiet=True) | 331 device.KillAll(_CHROME_PACKAGE, quiet=True) |
328 _PushBrowserCache(device, local_cache_directory_path) | 332 _PushBrowserCache(device, local_cache_directory_path) |
329 with device_setup.DeviceConnection( | 333 with device_setup.DeviceConnection( |
330 device=device, | 334 device=device, |
331 additional_flags=additional_flags) as connection: | 335 additional_flags=additional_flags) as connection: |
332 if (pages_loaded == 0 and args.cache_op == 'save' or | 336 if (pages_loaded == 0 and args.cache_op == 'save' or |
(...skipping 19 matching lines...) Expand all Loading... |
352 device.KillAll(_CHROME_PACKAGE, quiet=True) | 356 device.KillAll(_CHROME_PACKAGE, quiet=True) |
353 time.sleep(_TIME_TO_DEVICE_IDLE_SECONDS) | 357 time.sleep(_TIME_TO_DEVICE_IDLE_SECONDS) |
354 | 358 |
355 cache_directory_path = _PullBrowserCache(device) | 359 cache_directory_path = _PullBrowserCache(device) |
356 _ZipDirectoryContent(cache_directory_path, local_cache_archive_path) | 360 _ZipDirectoryContent(cache_directory_path, local_cache_archive_path) |
357 shutil.rmtree(cache_directory_path) | 361 shutil.rmtree(cache_directory_path) |
358 | 362 |
359 | 363 |
360 if __name__ == '__main__': | 364 if __name__ == '__main__': |
361 sys.exit(main()) | 365 sys.exit(main()) |
OLD | NEW |