OLD | NEW |
| (Empty) |
1 #!/usr/bin/env python | |
2 # Copyright (c) 2014 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 | |
7 """Run the webpages_playback automation script.""" | |
8 | |
9 | |
10 import os | |
11 import subprocess | |
12 import sys | |
13 | |
14 sys.path.insert(0, os.getcwd()) | |
15 | |
16 from common.py.utils import gs_utils | |
17 from common.py.utils import shell_utils | |
18 | |
19 | |
20 SKP_VERSION_FILE = 'SKP_VERSION' | |
21 | |
22 | |
23 def _get_skp_version(): | |
24 """Find an unused SKP version.""" | |
25 current_skp_version = None | |
26 with open(SKP_VERSION_FILE) as f: | |
27 current_skp_version = int(f.read().rstrip()) | |
28 | |
29 # Find the first SKP version which has no uploaded SKPs. | |
30 new_version = current_skp_version + 1 | |
31 while True: | |
32 gs_path = 'playback_%d/skps' % new_version | |
33 if not gs_utils.GSUtils().does_storage_object_exist('chromium-skia-gm', | |
34 gs_path): | |
35 return new_version | |
36 new_version += 1 | |
37 | |
38 | |
39 def main(chrome_src_path, browser_executable, dry_run): | |
40 browser_executable = os.path.realpath(browser_executable) | |
41 dry_run = (dry_run == 'True') | |
42 skp_version = _get_skp_version() | |
43 print 'SKP_VERSION=%d' % skp_version | |
44 | |
45 if os.environ.get('CHROME_HEADLESS'): | |
46 # Start Xvfb if running on a bot. | |
47 try: | |
48 shell_utils.run('sudo Xvfb :0 -screen 0 1280x1024x24 &', shell=True) | |
49 except Exception: | |
50 # It is ok if the above command fails, it just means that DISPLAY=:0 | |
51 # is already up. | |
52 pass | |
53 | |
54 upload_dir = 'playback_%d' % skp_version | |
55 webpages_playback_cmd = [ | |
56 'python', os.path.join(os.path.dirname(os.path.realpath(__file__)), | |
57 'webpages_playback.py'), | |
58 '--page_sets', 'all', | |
59 '--browser_executable', browser_executable, | |
60 '--non-interactive', | |
61 '--upload', | |
62 '--alternate_upload_dir', upload_dir, | |
63 '--chrome_src_path', chrome_src_path, | |
64 ] | |
65 if not dry_run: | |
66 webpages_playback_cmd.append('--upload_to_partner_bucket') | |
67 | |
68 try: | |
69 shell_utils.run(webpages_playback_cmd) | |
70 finally: | |
71 # Clean up any leftover browser instances. This can happen if there are | |
72 # telemetry crashes, processes are not always cleaned up appropriately by | |
73 # the webpagereplay and telemetry frameworks. | |
74 procs = subprocess.check_output(['ps', 'ax']) | |
75 for line in procs.splitlines(): | |
76 if browser_executable in line: | |
77 pid = line.strip().split(' ')[0] | |
78 if pid != str(os.getpid()) and not 'python' in line: | |
79 try: | |
80 shell_utils.run(['kill', '-9', pid]) | |
81 except shell_utils.CommandFailedException as e: | |
82 print e | |
83 else: | |
84 print 'Refusing to kill self.' | |
85 | |
86 print 'writing %s: %s' % (SKP_VERSION_FILE, skp_version) | |
87 with open(SKP_VERSION_FILE, 'w') as f: | |
88 f.write(str(skp_version)) | |
89 | |
90 | |
91 if '__main__' == __name__: | |
92 if len(sys.argv) != 4: | |
93 print >> sys.stderr, ('USAGE: %s <chrome src path> <browser executable> ' | |
94 '<dry run>') | |
95 sys.exit(1) | |
96 main(*sys.argv[1:]) | |
OLD | NEW |