Merge V8 5.4.500.40

Test: Manual - built & ran d8
Change-Id: I4edfa2853d3e565b729723645395688ece3193f4
diff --git a/tools/swarming_client/example/common.py b/tools/swarming_client/example/common.py
new file mode 100644
index 0000000..07c0bfc
--- /dev/null
+++ b/tools/swarming_client/example/common.py
@@ -0,0 +1,126 @@
+# Copyright 2012 The LUCI Authors. All rights reserved.
+# Use of this source code is governed under the Apache License, Version 2.0
+# that can be found in the LICENSE file.
+
+import datetime
+import getpass
+import hashlib
+import optparse
+import os
+import subprocess
+import sys
+
+
+ROOT_DIR = os.path.dirname(os.path.abspath(
+    __file__.decode(sys.getfilesystemencoding())))
+sys.path.append(os.path.join(ROOT_DIR, '..', 'third_party'))
+
+import colorama
+
+
+CHROMIUM_SWARMING_OSES = {
+    'darwin': 'Mac',
+    'cygwin': 'Windows',
+    'linux2': 'Ubuntu',
+    'win32': 'Windows',
+}
+
+
+def parse_args(use_isolate_server, use_swarming):
+  """Process arguments for the example scripts."""
+  os.chdir(ROOT_DIR)
+  colorama.init()
+
+  parser = optparse.OptionParser(description=sys.modules['__main__'].__doc__)
+  if use_isolate_server:
+    parser.add_option(
+        '-I', '--isolate-server',
+        metavar='URL', default=os.environ.get('ISOLATE_SERVER', ''),
+        help='Isolate server to use')
+  if use_swarming:
+    task_name = '%s-%s-hello_world' % (
+      getpass.getuser(),
+      datetime.datetime.now().strftime('%Y-%m-%d-%H-%M-%S'))
+    parser.add_option(
+        '--idempotent', action='store_true',
+        help='Tells Swarming to reused previous task result if possible')
+    parser.add_option(
+        '-S', '--swarming',
+        metavar='URL', default=os.environ.get('SWARMING_SERVER', ''),
+        help='Swarming server to use')
+    parser.add_option(
+        '-o', '--os', default=sys.platform,
+        help='Swarming slave OS to request. Should be one of the valid '
+             'sys.platform values like darwin, linux2 or win32 default: '
+             '%default.')
+    parser.add_option(
+        '-t', '--task-name', default=task_name,
+        help='Swarming task name, default is based on time: %default')
+  parser.add_option('-v', '--verbose', action='count', default=0)
+  parser.add_option(
+      '--priority', metavar='INT', type='int', help='Priority to use')
+  options, args = parser.parse_args()
+
+  if args:
+    parser.error('Unsupported argument %s' % args)
+  if use_isolate_server and not options.isolate_server:
+    parser.error('--isolate-server is required.')
+  if use_swarming:
+    if not options.swarming:
+      parser.error('--swarming is required.')
+    options.swarming_os = CHROMIUM_SWARMING_OSES[options.os]
+    del options.os
+
+  return options
+
+
+def note(text):
+  """Prints a formatted note."""
+  print(
+      colorama.Fore.YELLOW + colorama.Style.BRIGHT + '\n-> ' + text +
+      colorama.Fore.RESET)
+
+
+def run(cmd, verbose):
+  """Prints the command it runs then run it."""
+  cmd = cmd[:]
+  cmd.extend(['--verbose'] * verbose)
+  print(
+      'Running: %s%s%s' %
+      (colorama.Fore.GREEN, ' '.join(cmd), colorama.Fore.RESET))
+  cmd = [sys.executable, os.path.join('..', cmd[0])] + cmd[1:]
+  if sys.platform != 'win32':
+    cmd = ['time', '-p'] + cmd
+  subprocess.check_call(cmd)
+
+
+def capture(cmd):
+  """Prints the command it runs then return stdout."""
+  print(
+      'Running: %s%s%s' %
+      (colorama.Fore.GREEN, ' '.join(cmd), colorama.Fore.RESET))
+  cmd = [sys.executable, os.path.join('..', cmd[0])] + cmd[1:]
+  return subprocess.check_output(cmd)
+
+
+def isolate(tempdir, isolate_server, swarming_os, verbose):
+  """Archives the payload."""
+  # All the files are put in a temporary directory. This is optional and
+  # simply done so the current directory doesn't have the following files
+  # created:
+  # - hello_world.isolated
+  # - hello_world.isolated.state
+  isolated = os.path.join(tempdir, 'hello_world.isolated')
+  note('Archiving to %s' % isolate_server)
+  run(
+      [
+        'isolate.py',
+        'archive',
+        '--isolate', os.path.join('payload', 'hello_world.isolate'),
+        '--isolated', isolated,
+        '--isolate-server', isolate_server,
+        '--config-variable', 'OS', swarming_os,
+      ], verbose)
+  with open(isolated, 'rb') as f:
+    hashval = hashlib.sha1(f.read()).hexdigest()
+  return isolated, hashval