Index: infra/bots/assets/skp/create.py |
diff --git a/infra/bots/assets/skp/create.py b/infra/bots/assets/skp/create.py |
new file mode 100755 |
index 0000000000000000000000000000000000000000..68df7f07c27762d143bd4f50c69d010cdbde7e9d |
--- /dev/null |
+++ b/infra/bots/assets/skp/create.py |
@@ -0,0 +1,83 @@ |
+#!/usr/bin/env python |
+# |
+# Copyright 2016 Google Inc. |
+# |
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+ |
+ |
+"""Create the SKP asset.""" |
+ |
+ |
+import argparse |
+import common |
+import os |
+import shutil |
+import subprocess |
+import utils |
+ |
+ |
+SKIA_TOOLS = os.path.join(common.INFRA_BOTS_DIR, os.pardir, os.pardir, 'tools') |
+ |
+ |
+def create_asset(chrome_src_path, browser_executable, target_dir): |
+ """Create the asset.""" |
+ browser_executable = os.path.realpath(browser_executable) |
+ chrome_src_path = os.path.realpath(chrome_src_path) |
+ target_dir = os.path.realpath(target_dir) |
+ |
+ if not os.path.exists(target_dir): |
+ os.makedirs(target_dir) |
+ |
+ with utils.tmp_dir(): |
+ if os.environ.get('CHROME_HEADLESS'): |
+ # Start Xvfb if running on a bot. |
+ try: |
+ subprocess.Popen(['sudo', 'Xvfb', ':0', '-screen', '0', '1280x1024x24']) |
+ except Exception: |
+ # It is ok if the above command fails, it just means that DISPLAY=:0 |
+ # is already up. |
+ pass |
+ |
+ webpages_playback_cmd = [ |
+ 'python', os.path.join(SKIA_TOOLS, 'skp', 'webpages_playback.py'), |
+ '--page_sets', 'all', |
+ '--browser_executable', browser_executable, |
+ '--non-interactive', |
+ '--output_dir', os.getcwd(), |
+ '--chrome_src_path', chrome_src_path, |
+ ] |
+ try: |
+ subprocess.check_call(webpages_playback_cmd) |
+ finally: |
+ # Clean up any leftover browser instances. This can happen if there are |
+ # telemetry crashes, processes are not always cleaned up appropriately by |
+ # the webpagereplay and telemetry frameworks. |
+ procs = subprocess.check_output(['ps', 'ax']) |
+ for line in procs.splitlines(): |
+ if browser_executable in line: |
+ pid = line.strip().split(' ')[0] |
+ if pid != str(os.getpid()) and not 'python' in line: |
+ try: |
+ subprocess.check_call(['kill', '-9', pid]) |
+ except subprocess.CalledProcessError as e: |
+ print e |
+ else: |
+ print 'Refusing to kill self.' |
+ src = os.path.join(os.getcwd(), 'playback', 'skps') |
+ for f in os.listdir(src): |
+ if f.endswith('.skp'): |
+ shutil.copyfile(os.path.join(src, f), os.path.join(target_dir, f)) |
+ |
+ |
+def main(): |
+ parser = argparse.ArgumentParser() |
+ parser.add_argument('--target_dir', '-t', required=True) |
+ parser.add_argument('--chrome_src_path', '-c', required=True) |
+ parser.add_argument('--browser_executable', '-e', required=True) |
+ args = parser.parse_args() |
+ create_asset(args.chrome_src_path, args.browser_executable, args.target_dir) |
+ |
+ |
+if __name__ == '__main__': |
+ main() |