| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2012 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 """Archives or replays webpages and creates SKPs in a Google Storage location. | 6 """Archives or replays webpages and creates SKPs in a Google Storage location. |
| 7 | 7 |
| 8 To archive webpages and store SKP files (archives should be rarely updated): | 8 To archive webpages and store SKP files (archives should be rarely updated): |
| 9 | 9 |
| 10 cd skia | 10 cd skia |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 131 return s | 131 return s |
| 132 | 132 |
| 133 | 133 |
| 134 class SkPicturePlayback(object): | 134 class SkPicturePlayback(object): |
| 135 """Class that archives or replays webpages and creates SKPs.""" | 135 """Class that archives or replays webpages and creates SKPs.""" |
| 136 | 136 |
| 137 def __init__(self, parse_options): | 137 def __init__(self, parse_options): |
| 138 """Constructs a SkPicturePlayback BuildStep instance.""" | 138 """Constructs a SkPicturePlayback BuildStep instance.""" |
| 139 assert parse_options.browser_executable, 'Must specify --browser_executable' | 139 assert parse_options.browser_executable, 'Must specify --browser_executable' |
| 140 self._browser_executable = parse_options.browser_executable | 140 self._browser_executable = parse_options.browser_executable |
| 141 self._browser_args = '--disable-setuid-sandbox' |
| 142 if parse_options.browser_extra_args: |
| 143 self._browser_args = '%s %s' % ( |
| 144 self._browser_args, parse_options.browser_extra_args) |
| 141 | 145 |
| 142 self._chrome_page_sets_path = os.path.join(parse_options.chrome_src_path, | 146 self._chrome_page_sets_path = os.path.join(parse_options.chrome_src_path, |
| 143 CHROMIUM_PAGE_SETS_PATH) | 147 CHROMIUM_PAGE_SETS_PATH) |
| 144 self._all_page_sets_specified = parse_options.page_sets == 'all' | 148 self._all_page_sets_specified = parse_options.page_sets == 'all' |
| 145 self._page_sets = self._ParsePageSets(parse_options.page_sets) | 149 self._page_sets = self._ParsePageSets(parse_options.page_sets) |
| 146 | 150 |
| 147 self._record = parse_options.record | 151 self._record = parse_options.record |
| 148 self._skia_tools = parse_options.skia_tools | 152 self._skia_tools = parse_options.skia_tools |
| 149 self._non_interactive = parse_options.non_interactive | 153 self._non_interactive = parse_options.non_interactive |
| 150 self._upload = parse_options.upload | 154 self._upload = parse_options.upload |
| 155 self._skp_prefix = parse_options.skp_prefix |
| 151 data_store_location = parse_options.data_store | 156 data_store_location = parse_options.data_store |
| 152 if data_store_location.startswith(gs_utils.GS_PREFIX): | 157 if data_store_location.startswith(gs_utils.GS_PREFIX): |
| 153 self.gs = GoogleStorageDataStore(data_store_location) | 158 self.gs = GoogleStorageDataStore(data_store_location) |
| 154 else: | 159 else: |
| 155 self.gs = LocalFileSystemDataStore(data_store_location) | 160 self.gs = LocalFileSystemDataStore(data_store_location) |
| 156 self._alternate_upload_dir = parse_options.alternate_upload_dir | 161 self._alternate_upload_dir = parse_options.alternate_upload_dir |
| 157 self._telemetry_binaries_dir = os.path.join(parse_options.chrome_src_path, | 162 self._telemetry_binaries_dir = os.path.join(parse_options.chrome_src_path, |
| 158 'tools', 'perf') | 163 'tools', 'perf') |
| 159 | 164 |
| 160 self._local_skp_dir = os.path.join( | 165 self._local_skp_dir = os.path.join( |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 240 | 245 |
| 241 if self._IsChromiumPageSet(page_set): | 246 if self._IsChromiumPageSet(page_set): |
| 242 print 'Using Chromium\'s captured archives for Chromium\'s page sets.' | 247 print 'Using Chromium\'s captured archives for Chromium\'s page sets.' |
| 243 elif self._record: | 248 elif self._record: |
| 244 # Create an archive of the specified webpages if '--record=True' is | 249 # Create an archive of the specified webpages if '--record=True' is |
| 245 # specified. | 250 # specified. |
| 246 record_wpr_cmd = ( | 251 record_wpr_cmd = ( |
| 247 'PYTHONPATH=%s:$PYTHONPATH' % page_set_dir, | 252 'PYTHONPATH=%s:$PYTHONPATH' % page_set_dir, |
| 248 'DISPLAY=%s' % X11_DISPLAY, | 253 'DISPLAY=%s' % X11_DISPLAY, |
| 249 os.path.join(self._telemetry_binaries_dir, 'record_wpr'), | 254 os.path.join(self._telemetry_binaries_dir, 'record_wpr'), |
| 250 '--extra-browser-args=--disable-setuid-sandbox', | 255 '--extra-browser-args="%s"' % self._browser_args, |
| 251 '--browser=exact', | 256 '--browser=exact', |
| 252 '--browser-executable=%s' % self._browser_executable, | 257 '--browser-executable=%s' % self._browser_executable, |
| 253 '%s_page_set' % page_set_basename, | 258 '%s_page_set' % page_set_basename, |
| 254 '--page-set-base-dir=%s' % page_set_dir | 259 '--page-set-base-dir=%s' % page_set_dir |
| 255 ) | 260 ) |
| 256 for _ in range(RETRY_RECORD_WPR_COUNT): | 261 for _ in range(RETRY_RECORD_WPR_COUNT): |
| 257 try: | 262 try: |
| 258 shell_utils.run(' '.join(record_wpr_cmd), shell=True) | 263 shell_utils.run(' '.join(record_wpr_cmd), shell=True) |
| 259 | 264 |
| 260 # Move over the created archive into the local webpages archive | 265 # Move over the created archive into the local webpages archive |
| (...skipping 18 matching lines...) Expand all Loading... |
| 279 | 284 |
| 280 else: | 285 else: |
| 281 # Get the webpages archive so that it can be replayed. | 286 # Get the webpages archive so that it can be replayed. |
| 282 self._DownloadWebpagesArchive(wpr_data_file, page_set_json_name) | 287 self._DownloadWebpagesArchive(wpr_data_file, page_set_json_name) |
| 283 | 288 |
| 284 run_benchmark_cmd = ( | 289 run_benchmark_cmd = ( |
| 285 'PYTHONPATH=%s:$PYTHONPATH' % page_set_dir, | 290 'PYTHONPATH=%s:$PYTHONPATH' % page_set_dir, |
| 286 'DISPLAY=%s' % X11_DISPLAY, | 291 'DISPLAY=%s' % X11_DISPLAY, |
| 287 'timeout', '300', | 292 'timeout', '300', |
| 288 os.path.join(self._telemetry_binaries_dir, 'run_benchmark'), | 293 os.path.join(self._telemetry_binaries_dir, 'run_benchmark'), |
| 289 '--extra-browser-args=--disable-setuid-sandbox', | 294 '--extra-browser-args="%s"' % self._browser_args, |
| 290 '--browser=exact', | 295 '--browser=exact', |
| 291 '--browser-executable=%s' % self._browser_executable, | 296 '--browser-executable=%s' % self._browser_executable, |
| 292 SKP_BENCHMARK, | 297 SKP_BENCHMARK, |
| 293 '--page-set-name=%s' % page_set_basename, | 298 '--page-set-name=%s' % page_set_basename, |
| 294 '--page-set-base-dir=%s' % page_set_dir, | 299 '--page-set-base-dir=%s' % page_set_dir, |
| 295 '--skp-outdir=%s' % TMP_SKP_DIR, | 300 '--skp-outdir=%s' % TMP_SKP_DIR, |
| 296 '--also-run-disabled-tests' | 301 '--also-run-disabled-tests' |
| 297 ) | 302 ) |
| 298 | 303 |
| 299 for _ in range(RETRY_RUN_MEASUREMENT_COUNT): | 304 for _ in range(RETRY_RUN_MEASUREMENT_COUNT): |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 402 .skp in there to be this page_set's representative .skp. | 407 .skp in there to be this page_set's representative .skp. |
| 403 """ | 408 """ |
| 404 subdirs = glob.glob(os.path.join(TMP_SKP_DIR, '*')) | 409 subdirs = glob.glob(os.path.join(TMP_SKP_DIR, '*')) |
| 405 for site in subdirs: | 410 for site in subdirs: |
| 406 if self._IsChromiumPageSet(page_set): | 411 if self._IsChromiumPageSet(page_set): |
| 407 filename = self._GetChromiumSkpFileName(page_set, site) | 412 filename = self._GetChromiumSkpFileName(page_set, site) |
| 408 else: | 413 else: |
| 409 filename = self._GetSkiaSkpFileName(page_set) | 414 filename = self._GetSkiaSkpFileName(page_set) |
| 410 filename = filename.lower() | 415 filename = filename.lower() |
| 411 | 416 |
| 417 if self._skp_prefix: |
| 418 filename = '%s%s' % (self._skp_prefix, filename) |
| 419 |
| 412 # We choose the largest .skp as the most likely to be interesting. | 420 # We choose the largest .skp as the most likely to be interesting. |
| 413 largest_skp = max(glob.glob(os.path.join(site, '*.skp')), | 421 largest_skp = max(glob.glob(os.path.join(site, '*.skp')), |
| 414 key=lambda path: os.stat(path).st_size) | 422 key=lambda path: os.stat(path).st_size) |
| 415 dest = os.path.join(self._local_skp_dir, filename) | 423 dest = os.path.join(self._local_skp_dir, filename) |
| 416 print 'Moving', largest_skp, 'to', dest | 424 print 'Moving', largest_skp, 'to', dest |
| 417 shutil.move(largest_skp, dest) | 425 shutil.move(largest_skp, dest) |
| 418 self._skp_files.append(filename) | 426 self._skp_files.append(filename) |
| 419 shutil.rmtree(site) | 427 shutil.rmtree(site) |
| 420 | 428 |
| 421 def _CreateLocalStorageDirs(self): | 429 def _CreateLocalStorageDirs(self): |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 539 option_parser.add_option( | 547 option_parser.add_option( |
| 540 '', '--output_dir', | 548 '', '--output_dir', |
| 541 help=('Temporary directory where SKPs and webpage archives will be ' | 549 help=('Temporary directory where SKPs and webpage archives will be ' |
| 542 'outputted to.'), | 550 'outputted to.'), |
| 543 default=tempfile.gettempdir()) | 551 default=tempfile.gettempdir()) |
| 544 option_parser.add_option( | 552 option_parser.add_option( |
| 545 '', '--browser_executable', | 553 '', '--browser_executable', |
| 546 help='The exact browser executable to run.', | 554 help='The exact browser executable to run.', |
| 547 default=None) | 555 default=None) |
| 548 option_parser.add_option( | 556 option_parser.add_option( |
| 557 '', '--browser_extra_args', |
| 558 help='Additional arguments to pass to the browser.', |
| 559 default=None) |
| 560 option_parser.add_option( |
| 549 '', '--chrome_src_path', | 561 '', '--chrome_src_path', |
| 550 help='Path to the chromium src directory.', | 562 help='Path to the chromium src directory.', |
| 551 default=None) | 563 default=None) |
| 552 option_parser.add_option( | 564 option_parser.add_option( |
| 553 '', '--non-interactive', action='store_true', | 565 '', '--non-interactive', action='store_true', |
| 554 help='Runs the script without any prompts. If this flag is specified and ' | 566 help='Runs the script without any prompts. If this flag is specified and ' |
| 555 '--skia_tools is specified then the debugger is not run.', | 567 '--skia_tools is specified then the debugger is not run.', |
| 556 default=False) | 568 default=False) |
| 569 option_parser.add_option( |
| 570 '', '--skp_prefix', |
| 571 help='Prefix to add to the names of generated SKPs.', |
| 572 default=None) |
| 557 options, unused_args = option_parser.parse_args() | 573 options, unused_args = option_parser.parse_args() |
| 558 | 574 |
| 559 playback = SkPicturePlayback(options) | 575 playback = SkPicturePlayback(options) |
| 560 sys.exit(playback.Run()) | 576 sys.exit(playback.Run()) |
| OLD | NEW |