summaryrefslogtreecommitdiff
path: root/deps/v8/tools
diff options
context:
space:
mode:
authorAli Ijaz Sheikh <ofrobots@google.com>2016-04-07 14:06:55 -0700
committerAli Ijaz Sheikh <ofrobots@google.com>2016-04-14 10:03:39 -0700
commit52af5c4eebf4de8638aef0338bd826656312a02a (patch)
tree628dc9fb0b558c3a73a2160706fef368876fe548 /deps/v8/tools
parent6e3e8acc7cc7ebd3d67db5ade1247b8b558efe09 (diff)
downloadnode-new-52af5c4eebf4de8638aef0338bd826656312a02a.tar.gz
deps: upgrade V8 to 5.0.71.32
* Pick up the branch head for V8 5.0 stable [1] * Edit v8 gitignore to allow trace_event copy * Update V8 DEP trace_event as per deps/v8/DEPS [2] [1] https://chromium.googlesource.com/v8/v8.git/+/3c67831 [2] https://chromium.googlesource.com/chromium/src/base/trace_event/common/+/4b09207e447ae5bd34643b4c6321bee7b76d35f9 Ref: https://github.com/nodejs/node/pull/5945 PR-URL: https://github.com/nodejs/node/pull/6111 Reviewed-By: targos - Michaƫl Zasso <mic.besace@gmail.com> Reviewed-By: bnoordhuis - Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: indutny - Fedor Indutny <fedor.indutny@gmail.com>
Diffstat (limited to 'deps/v8/tools')
-rwxr-xr-xdeps/v8/tools/android-sync.sh2
-rwxr-xr-xdeps/v8/tools/eval_gc_time.sh3
-rwxr-xr-xdeps/v8/tools/fuzz-harness.sh46
-rwxr-xr-xdeps/v8/tools/gcmole/download_gcmole_tools.py22
-rw-r--r--deps/v8/tools/gcmole/gcmole-tools.tar.gz.sha11
-rw-r--r--deps/v8/tools/gcmole/run-gcmole.isolate34
-rwxr-xr-xdeps/v8/tools/gcmole/run-gcmole.py23
-rw-r--r--deps/v8/tools/gcmole/run_gcmole.gyp23
-rw-r--r--deps/v8/tools/gen-postmortem-metadata.py2
-rw-r--r--deps/v8/tools/gyp/v8.gyp130
-rw-r--r--deps/v8/tools/ic-explorer.html338
-rw-r--r--deps/v8/tools/jsfunfuzz/download_jsfunfuzz.py22
-rwxr-xr-xdeps/v8/tools/jsfunfuzz/fuzz-harness.sh84
-rw-r--r--deps/v8/tools/jsfunfuzz/jsfunfuzz.gyp26
-rw-r--r--deps/v8/tools/jsfunfuzz/jsfunfuzz.isolate18
-rw-r--r--deps/v8/tools/jsfunfuzz/jsfunfuzz.tar.gz.sha11
-rwxr-xr-xdeps/v8/tools/ll_prof.py16
-rw-r--r--deps/v8/tools/luci-go/linux64/isolate.sha12
-rw-r--r--deps/v8/tools/luci-go/mac64/isolate.sha12
-rw-r--r--deps/v8/tools/luci-go/win64/isolate.exe.sha12
-rw-r--r--deps/v8/tools/perf/statistics-for-json.R113
-rwxr-xr-xdeps/v8/tools/presubmit.py24
-rwxr-xr-xdeps/v8/tools/release/auto_roll.py1
-rw-r--r--deps/v8/tools/release/common_includes.py3
-rwxr-xr-xdeps/v8/tools/release/create_release.py16
-rw-r--r--deps/v8/tools/release/test_scripts.py31
-rw-r--r--deps/v8/tools/run-deopt-fuzzer.gyp26
-rw-r--r--deps/v8/tools/run-deopt-fuzzer.isolate19
-rwxr-xr-xdeps/v8/tools/run-deopt-fuzzer.py13
-rwxr-xr-xdeps/v8/tools/run-tests.py6
-rw-r--r--deps/v8/tools/run-valgrind.gyp26
-rw-r--r--deps/v8/tools/run-valgrind.isolate29
-rwxr-xr-xdeps/v8/tools/run_perf.py34
-rw-r--r--deps/v8/tools/testrunner/local/execution.py25
-rw-r--r--deps/v8/tools/testrunner/local/pool.py7
-rw-r--r--deps/v8/tools/testrunner/local/testsuite.py6
-rw-r--r--deps/v8/tools/testrunner/objects/testcase.py19
-rwxr-xr-xdeps/v8/tools/try_perf.py5
-rw-r--r--deps/v8/tools/v8heapconst.py235
-rw-r--r--deps/v8/tools/whitespace.txt2
40 files changed, 1210 insertions, 227 deletions
diff --git a/deps/v8/tools/android-sync.sh b/deps/v8/tools/android-sync.sh
index 4acb1cc5a0..6d9500fc52 100755
--- a/deps/v8/tools/android-sync.sh
+++ b/deps/v8/tools/android-sync.sh
@@ -88,6 +88,8 @@ function sync_dir {
echo -n "sync to $ANDROID_V8/$OUTDIR/$ARCH_MODE"
sync_file "$OUTDIR/$ARCH_MODE/cctest"
sync_file "$OUTDIR/$ARCH_MODE/d8"
+sync_file "$OUTDIR/$ARCH_MODE/natives_blob.bin"
+sync_file "$OUTDIR/$ARCH_MODE/snapshot_blob.bin"
sync_file "$OUTDIR/$ARCH_MODE/unittests"
echo ""
echo -n "sync to $ANDROID_V8/tools"
diff --git a/deps/v8/tools/eval_gc_time.sh b/deps/v8/tools/eval_gc_time.sh
index 21cd93d0ac..92246d3866 100755
--- a/deps/v8/tools/eval_gc_time.sh
+++ b/deps/v8/tools/eval_gc_time.sh
@@ -23,7 +23,7 @@ case $1 in
print_usage_and_die
esac
-case $2 in
+case $2 in
max|avg)
RANK_MODE=$2
;;
@@ -104,3 +104,4 @@ case $OP in
*)
;;
esac
+
diff --git a/deps/v8/tools/fuzz-harness.sh b/deps/v8/tools/fuzz-harness.sh
index 31023de3ab..c874d01845 100755
--- a/deps/v8/tools/fuzz-harness.sh
+++ b/deps/v8/tools/fuzz-harness.sh
@@ -36,6 +36,7 @@ JSFUNFUZZ_URL="https://bugzilla.mozilla.org/attachment.cgi?id=310631"
JSFUNFUZZ_MD5="d0e497201c5cd7bffbb1cdc1574f4e32"
v8_root=$(readlink -f $(dirname $BASH_SOURCE)/../)
+jsfunfuzz_dir="$v8_root/tools/jsfunfuzz"
if [ -n "$1" ]; then
d8="${v8_root}/$1"
@@ -48,24 +49,28 @@ if [ ! -f "$d8" ]; then
exit 1
fi
-jsfunfuzz_file="$v8_root/tools/jsfunfuzz.zip"
-if [ ! -f "$jsfunfuzz_file" ]; then
- echo "Downloading $jsfunfuzz_file ..."
- wget -q -O "$jsfunfuzz_file" $JSFUNFUZZ_URL || exit 1
-fi
+# Deprecated download method. A prepatched archive is downloaded as a hook
+# if jsfunfuzz=1 is specified as a gyp flag. Requires google.com authentication
+# for google storage.
+if [ "$3" == "--download" ]; then
-jsfunfuzz_sum=$(md5sum "$jsfunfuzz_file" | awk '{ print $1 }')
-if [ $jsfunfuzz_sum != $JSFUNFUZZ_MD5 ]; then
- echo "Failed to verify checksum!"
- exit 1
-fi
+ jsfunfuzz_file="$v8_root/tools/jsfunfuzz.zip"
+ if [ ! -f "$jsfunfuzz_file" ]; then
+ echo "Downloading $jsfunfuzz_file ..."
+ wget -q -O "$jsfunfuzz_file" $JSFUNFUZZ_URL || exit 1
+ fi
-jsfunfuzz_dir="$v8_root/tools/jsfunfuzz"
-if [ ! -d "$jsfunfuzz_dir" ]; then
- echo "Unpacking into $jsfunfuzz_dir ..."
- unzip "$jsfunfuzz_file" -d "$jsfunfuzz_dir" || exit 1
- echo "Patching runner ..."
- cat << EOF | patch -s -p0 -d "$v8_root"
+ jsfunfuzz_sum=$(md5sum "$jsfunfuzz_file" | awk '{ print $1 }')
+ if [ $jsfunfuzz_sum != $JSFUNFUZZ_MD5 ]; then
+ echo "Failed to verify checksum!"
+ exit 1
+ fi
+
+ if [ ! -d "$jsfunfuzz_dir" ]; then
+ echo "Unpacking into $jsfunfuzz_dir ..."
+ unzip "$jsfunfuzz_file" -d "$jsfunfuzz_dir" || exit 1
+ echo "Patching runner ..."
+ cat << EOF | patch -s -p0 -d "$v8_root"
--- tools/jsfunfuzz/jsfunfuzz/multi_timed_run.py~
+++ tools/jsfunfuzz/jsfunfuzz/multi_timed_run.py
@@ -125,7 +125,7 @@
@@ -78,6 +83,8 @@ if [ ! -d "$jsfunfuzz_dir" ]; then
logfilename = "w%d" % iteration
one_timed_run(logfilename)
EOF
+ fi
+
fi
flags='--debug-code --expose-gc --verify-gc'
@@ -85,7 +92,12 @@ python -u "$jsfunfuzz_dir/jsfunfuzz/multi_timed_run.py" 300 \
"$d8" $flags "$jsfunfuzz_dir/jsfunfuzz/jsfunfuzz.js"
exit_code=$(cat w* | grep " looking good" -c)
exit_code=$((100-exit_code))
-archive=fuzz-results-$(date +%Y%m%d%H%M%S).tar.bz2
+
+if [ -n "$2" ]; then
+ archive="$2"
+else
+ archive=fuzz-results-$(date +%Y%m%d%H%M%S).tar.bz2
+fi
echo "Creating archive $archive"
tar -cjf $archive err-* w*
rm -f err-* w*
diff --git a/deps/v8/tools/gcmole/download_gcmole_tools.py b/deps/v8/tools/gcmole/download_gcmole_tools.py
new file mode 100755
index 0000000000..7183d28f34
--- /dev/null
+++ b/deps/v8/tools/gcmole/download_gcmole_tools.py
@@ -0,0 +1,22 @@
+#!/usr/bin/env python
+# Copyright 2016 the V8 project authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import os
+import re
+import subprocess
+
+GCMOLE_PATH = os.path.dirname(os.path.abspath(__file__))
+SHA1_PATH = os.path.join(GCMOLE_PATH, 'gcmole-tools.tar.gz.sha1')
+
+if re.search(r'\bgcmole=1', os.environ.get('GYP_DEFINES', '')):
+ subprocess.check_call([
+ 'download_from_google_storage',
+ '-b', 'chrome-v8-gcmole',
+ '-u', '--no_resume',
+ '-s', SHA1_PATH,
+ '--platform=linux*'
+ ])
+else:
+ print 'Skipping gcmole download as gcmole is not set in gyp flags.'
diff --git a/deps/v8/tools/gcmole/gcmole-tools.tar.gz.sha1 b/deps/v8/tools/gcmole/gcmole-tools.tar.gz.sha1
new file mode 100644
index 0000000000..67d758f754
--- /dev/null
+++ b/deps/v8/tools/gcmole/gcmole-tools.tar.gz.sha1
@@ -0,0 +1 @@
+b10748117f8f53d05dda0a77424b8794e645e330
diff --git a/deps/v8/tools/gcmole/run-gcmole.isolate b/deps/v8/tools/gcmole/run-gcmole.isolate
new file mode 100644
index 0000000000..df6e9a267f
--- /dev/null
+++ b/deps/v8/tools/gcmole/run-gcmole.isolate
@@ -0,0 +1,34 @@
+# Copyright 2016 the V8 project authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+{
+ 'variables': {
+ 'command': [
+ 'run-gcmole.py',
+ ],
+ 'files': [
+ 'gccause.lua',
+ 'gcmole.lua',
+ 'parallel.py',
+ 'run-gcmole.py',
+ # The following contains all relevant source and gyp files.
+ '../gyp/v8.gyp',
+ '../../base/',
+ '../../include/',
+ '../../src/',
+ '../../test/cctest/',
+ '../../third_party/icu/source/',
+ ],
+ },
+ 'conditions': [
+ ['gcmole==1', {
+ 'variables': {
+ 'files': [
+ # This assumes gcmole tools have been fetched by a hook
+ # into v8/tools/gcmole/gcmole_tools.
+ 'gcmole-tools/',
+ ],
+ },
+ }],
+ ],
+}
diff --git a/deps/v8/tools/gcmole/run-gcmole.py b/deps/v8/tools/gcmole/run-gcmole.py
new file mode 100755
index 0000000000..a1e4f24ab1
--- /dev/null
+++ b/deps/v8/tools/gcmole/run-gcmole.py
@@ -0,0 +1,23 @@
+#!/usr/bin/env python
+# Copyright 2016 the V8 project authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import os
+import subprocess
+import sys
+
+GCMOLE_PATH = os.path.dirname(os.path.abspath(__file__))
+CLANG_BIN = os.path.join(GCMOLE_PATH, 'gcmole-tools', 'bin')
+CLANG_PLUGINS = os.path.join(GCMOLE_PATH, 'gcmole-tools')
+LUA = os.path.join(GCMOLE_PATH, 'gcmole-tools', 'lua52')
+DRIVER = os.path.join(GCMOLE_PATH, 'gcmole.lua')
+BASE_PATH = os.path.dirname(os.path.dirname(GCMOLE_PATH))
+
+assert len(sys.argv) == 2
+
+sys.exit(subprocess.call(
+ [LUA, DRIVER, sys.argv[1]],
+ env={'CLANG_BIN': CLANG_BIN, 'CLANG_PLUGINS': CLANG_PLUGINS},
+ cwd=BASE_PATH,
+))
diff --git a/deps/v8/tools/gcmole/run_gcmole.gyp b/deps/v8/tools/gcmole/run_gcmole.gyp
new file mode 100644
index 0000000000..9d13f7606a
--- /dev/null
+++ b/deps/v8/tools/gcmole/run_gcmole.gyp
@@ -0,0 +1,23 @@
+# Copyright 2016 the V8 project authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+{
+ 'conditions': [
+ ['test_isolation_mode != "noop"', {
+ 'targets': [
+ {
+ 'target_name': 'run_gcmole_run',
+ 'type': 'none',
+ 'includes': [
+ '../../build/features.gypi',
+ '../../build/isolate.gypi',
+ ],
+ 'sources': [
+ 'run-gcmole.isolate',
+ ],
+ },
+ ],
+ }],
+ ],
+}
diff --git a/deps/v8/tools/gen-postmortem-metadata.py b/deps/v8/tools/gen-postmortem-metadata.py
index 516f8e7490..15eafedfce 100644
--- a/deps/v8/tools/gen-postmortem-metadata.py
+++ b/deps/v8/tools/gen-postmortem-metadata.py
@@ -82,7 +82,7 @@ consts_misc = [
{ 'name': 'OddballTrue', 'value': 'Oddball::kTrue' },
{ 'name': 'OddballTheHole', 'value': 'Oddball::kTheHole' },
{ 'name': 'OddballNull', 'value': 'Oddball::kNull' },
- { 'name': 'OddballArgumentMarker', 'value': 'Oddball::kArgumentMarker' },
+ { 'name': 'OddballArgumentsMarker', 'value': 'Oddball::kArgumentsMarker' },
{ 'name': 'OddballUndefined', 'value': 'Oddball::kUndefined' },
{ 'name': 'OddballUninitialized', 'value': 'Oddball::kUninitialized' },
{ 'name': 'OddballOther', 'value': 'Oddball::kOther' },
diff --git a/deps/v8/tools/gyp/v8.gyp b/deps/v8/tools/gyp/v8.gyp
index ca5fb0902b..66f579d33d 100644
--- a/deps/v8/tools/gyp/v8.gyp
+++ b/deps/v8/tools/gyp/v8.gyp
@@ -120,18 +120,30 @@
}],
['v8_use_snapshot=="true" and v8_use_external_startup_data==1 and want_separate_host_toolset==0', {
'dependencies': ['v8_base', 'v8_external_snapshot'],
- 'inputs': [ '<(PRODUCT_DIR)/snapshot_blob.bin', ],
+ 'inputs': ['<(PRODUCT_DIR)/snapshot_blob.bin'],
+ 'conditions': [
+ ['v8_separate_ignition_snapshot==1', {
+ 'inputs': ['<(PRODUCT_DIR)/snapshot_blob_ignition.bin'],
+ }],
+ ]
}],
['v8_use_snapshot=="true" and v8_use_external_startup_data==1 and want_separate_host_toolset==1', {
'dependencies': ['v8_base', 'v8_external_snapshot'],
'target_conditions': [
['_toolset=="host"', {
- 'inputs': [
- '<(PRODUCT_DIR)/snapshot_blob_host.bin',
- ],
+ 'inputs': ['<(PRODUCT_DIR)/snapshot_blob_host.bin'],
}, {
- 'inputs': [
- '<(PRODUCT_DIR)/snapshot_blob.bin',
+ 'inputs': ['<(PRODUCT_DIR)/snapshot_blob.bin'],
+ }],
+ ],
+ 'conditions': [
+ ['v8_separate_ignition_snapshot==1', {
+ 'target_conditions': [
+ ['_toolset=="host"', {
+ 'inputs': ['<(PRODUCT_DIR)/snapshot_blob_ignition_host.bin'],
+ }, {
+ 'inputs': ['<(PRODUCT_DIR)/snapshot_blob_ignition.bin'],
+ }],
],
}],
],
@@ -283,6 +295,65 @@
],
},
}],
+ # Extra snapshot blob for ignition.
+ ['v8_separate_ignition_snapshot==1', {
+ # This is concatenated to the other actions list of
+ # v8_external_snapshot.
+ 'actions': [
+ {
+ 'action_name': 'run_mksnapshot (ignition)',
+ 'inputs': ['<(mksnapshot_exec)'],
+ 'variables': {
+ # TODO: Extract common mksnapshot_flags to a separate
+ # variable.
+ 'mksnapshot_flags_ignition': [
+ '--ignition',
+ '--log-snapshot-positions',
+ '--logfile', '<(INTERMEDIATE_DIR)/snapshot_ignition.log',
+ ],
+ 'conditions': [
+ ['v8_random_seed!=0', {
+ 'mksnapshot_flags_ignition': ['--random-seed', '<(v8_random_seed)'],
+ }],
+ ['v8_vector_stores!=0', {
+ 'mksnapshot_flags_ignition': ['--vector-stores'],
+ }],
+ ],
+ },
+ 'conditions': [
+ ['want_separate_host_toolset==1', {
+ 'target_conditions': [
+ ['_toolset=="host"', {
+ 'outputs': ['<(PRODUCT_DIR)/snapshot_blob_ignition_host.bin'],
+ 'action': [
+ '<(mksnapshot_exec)',
+ '<@(mksnapshot_flags_ignition)',
+ '--startup_blob', '<(PRODUCT_DIR)/snapshot_blob_ignition_host.bin',
+ '<(embed_script)',
+ ],
+ }, {
+ 'outputs': ['<(PRODUCT_DIR)/snapshot_blob_ignition.bin'],
+ 'action': [
+ '<(mksnapshot_exec)',
+ '<@(mksnapshot_flags_ignition)',
+ '--startup_blob', '<(PRODUCT_DIR)/snapshot_blob_ignition.bin',
+ '<(embed_script)',
+ ],
+ }],
+ ],
+ }, {
+ 'outputs': ['<(PRODUCT_DIR)/snapshot_blob_ignition.bin'],
+ 'action': [
+ '<(mksnapshot_exec)',
+ '<@(mksnapshot_flags_ignition)',
+ '--startup_blob', '<(PRODUCT_DIR)/snapshot_blob_ignition.bin',
+ '<(embed_script)',
+ ],
+ }],
+ ],
+ },
+ ],
+ }],
],
'dependencies': [
'v8_base',
@@ -297,9 +368,7 @@
'actions': [
{
'action_name': 'run_mksnapshot (external)',
- 'inputs': [
- '<(mksnapshot_exec)',
- ],
+ 'inputs': ['<(mksnapshot_exec)'],
'variables': {
'mksnapshot_flags': [
'--log-snapshot-positions',
@@ -318,9 +387,7 @@
['want_separate_host_toolset==1', {
'target_conditions': [
['_toolset=="host"', {
- 'outputs': [
- '<(PRODUCT_DIR)/snapshot_blob_host.bin',
- ],
+ 'outputs': ['<(PRODUCT_DIR)/snapshot_blob_host.bin'],
'action': [
'<(mksnapshot_exec)',
'<@(mksnapshot_flags)',
@@ -328,9 +395,7 @@
'<(embed_script)',
],
}, {
- 'outputs': [
- '<(PRODUCT_DIR)/snapshot_blob.bin',
- ],
+ 'outputs': ['<(PRODUCT_DIR)/snapshot_blob.bin'],
'action': [
'<(mksnapshot_exec)',
'<@(mksnapshot_flags)',
@@ -340,9 +405,7 @@
}],
],
}, {
- 'outputs': [
- '<(PRODUCT_DIR)/snapshot_blob.bin',
- ],
+ 'outputs': ['<(PRODUCT_DIR)/snapshot_blob.bin'],
'action': [
'<(mksnapshot_exec)',
'<@(mksnapshot_flags)',
@@ -541,16 +604,16 @@
'../../src/compiler/instruction-scheduler.h',
'../../src/compiler/instruction.cc',
'../../src/compiler/instruction.h',
- '../../src/compiler/interpreter-assembler.cc',
- '../../src/compiler/interpreter-assembler.h',
+ '../../src/compiler/int64-lowering.cc',
+ '../../src/compiler/int64-lowering.h',
'../../src/compiler/js-builtin-reducer.cc',
'../../src/compiler/js-builtin-reducer.h',
'../../src/compiler/js-call-reducer.cc',
'../../src/compiler/js-call-reducer.h',
- '../../src/compiler/js-context-relaxation.cc',
- '../../src/compiler/js-context-relaxation.h',
'../../src/compiler/js-context-specialization.cc',
'../../src/compiler/js-context-specialization.h',
+ '../../src/compiler/js-create-lowering.cc',
+ '../../src/compiler/js-create-lowering.h',
'../../src/compiler/js-frame-specialization.cc',
'../../src/compiler/js-frame-specialization.h',
'../../src/compiler/js-generic-lowering.cc',
@@ -778,6 +841,8 @@
'../../src/fast-dtoa.h',
'../../src/field-index.h',
'../../src/field-index-inl.h',
+ '../../src/field-type.cc',
+ '../../src/field-type.h',
'../../src/fixed-dtoa.cc',
'../../src/fixed-dtoa.h',
'../../src/flag-definitions.h',
@@ -799,6 +864,7 @@
'../../src/handles.cc',
'../../src/handles.h',
'../../src/hashmap.h',
+ '../../src/heap-symbols.h',
'../../src/heap/array-buffer-tracker.cc',
'../../src/heap/array-buffer-tracker.h',
'../../src/heap/memory-reducer.cc',
@@ -823,11 +889,14 @@
'../../src/heap/objects-visiting-inl.h',
'../../src/heap/objects-visiting.cc',
'../../src/heap/objects-visiting.h',
+ '../../src/heap/remembered-set.cc',
+ '../../src/heap/remembered-set.h',
'../../src/heap/scavenge-job.h',
'../../src/heap/scavenge-job.cc',
'../../src/heap/scavenger-inl.h',
'../../src/heap/scavenger.cc',
'../../src/heap/scavenger.h',
+ '../../src/heap/slot-set.h',
'../../src/heap/slots-buffer.cc',
'../../src/heap/slots-buffer.h',
'../../src/heap/spaces-inl.h',
@@ -872,11 +941,20 @@
'../../src/interpreter/constant-array-builder.h',
'../../src/interpreter/control-flow-builders.cc',
'../../src/interpreter/control-flow-builders.h',
+ '../../src/interpreter/handler-table-builder.cc',
+ '../../src/interpreter/handler-table-builder.h',
'../../src/interpreter/interpreter.cc',
'../../src/interpreter/interpreter.h',
+ '../../src/interpreter/interpreter-assembler.cc',
+ '../../src/interpreter/interpreter-assembler.h',
+ '../../src/interpreter/register-translator.cc',
+ '../../src/interpreter/register-translator.h',
+ '../../src/interpreter/source-position-table.cc',
+ '../../src/interpreter/source-position-table.h',
'../../src/isolate-inl.h',
'../../src/isolate.cc',
'../../src/isolate.h',
+ '../../src/json-parser.h',
'../../src/json-stringifier.h',
'../../src/key-accumulator.h',
'../../src/key-accumulator.cc',
@@ -914,7 +992,6 @@
'../../src/parsing/expression-classifier.h',
'../../src/parsing/func-name-inferrer.cc',
'../../src/parsing/func-name-inferrer.h',
- '../../src/parsing/json-parser.h',
'../../src/parsing/parameter-initializer-rewriter.cc',
'../../src/parsing/parameter-initializer-rewriter.h',
'../../src/parsing/parser-base.h',
@@ -953,6 +1030,8 @@
'../../src/profiler/profile-generator.h',
'../../src/profiler/sampler.cc',
'../../src/profiler/sampler.h',
+ '../../src/profiler/sampling-heap-profiler.cc',
+ '../../src/profiler/sampling-heap-profiler.h',
'../../src/profiler/strings-storage.cc',
'../../src/profiler/strings-storage.h',
'../../src/profiler/unbound-queue-inl.h',
@@ -1033,6 +1112,7 @@
'../../src/snapshot/snapshot-common.cc',
'../../src/snapshot/snapshot-source-sink.cc',
'../../src/snapshot/snapshot-source-sink.h',
+ '../../src/source-position.h',
'../../src/splay-tree.h',
'../../src/splay-tree-inl.h',
'../../src/startup-data-util.cc',
@@ -1058,7 +1138,6 @@
'../../src/type-feedback-vector.h',
'../../src/type-info.cc',
'../../src/type-info.h',
- '../../src/types-inl.h',
'../../src/types.cc',
'../../src/types.h',
'../../src/typing-asm.cc',
@@ -1072,6 +1151,7 @@
'../../src/unicode-cache.h',
'../../src/unicode-decoder.cc',
'../../src/unicode-decoder.h',
+ '../../src/utils-inl.h',
'../../src/utils.cc',
'../../src/utils.h',
'../../src/v8.cc',
@@ -1537,6 +1617,7 @@
'../../src/base/atomicops_internals_mips64_gcc.h',
'../../src/base/atomicops_internals_portable.h',
'../../src/base/atomicops_internals_ppc_gcc.h',
+ '../../src/base/atomicops_internals_s390_gcc.h',
'../../src/base/atomicops_internals_tsan.h',
'../../src/base/atomicops_internals_x86_gcc.cc',
'../../src/base/atomicops_internals_x86_gcc.h',
@@ -1929,7 +2010,6 @@
'../../src/js/generator.js',
'../../src/js/harmony-atomics.js',
'../../src/js/harmony-regexp.js',
- '../../src/js/harmony-reflect.js',
'../../src/js/harmony-object-observe.js',
'../../src/js/harmony-sharedarraybuffer.js',
'../../src/js/harmony-simd.js',
diff --git a/deps/v8/tools/ic-explorer.html b/deps/v8/tools/ic-explorer.html
new file mode 100644
index 0000000000..43b486a50c
--- /dev/null
+++ b/deps/v8/tools/ic-explorer.html
@@ -0,0 +1,338 @@
+<html>
+ <head>
+<style>
+ .entry-details {
+ }
+ .entry-details TD {
+ }
+ .details {
+ width: 2em;
+ border: 1px black dotted;
+ }
+ .count {
+ text-align: right;
+ width: 5em;
+ font-family: monospace;
+ }
+ .percentage {
+ text-align: right;
+ width: 5em;
+ font-family: monospace;
+ }
+ .key {
+ padding-left: 1em;
+ }
+ .drilldown-group-title {
+ font-weight: bold;
+ padding: 0.5em 0 0.2em 0;
+ }
+</style>
+ <script>
+"use strict"
+var entries = [];
+
+class Entry {
+ constructor(id, line) {
+ this.id = id;
+ this.line = line;
+ var parts = line.split(" ");
+ if (parts.length < 6) return
+ this.isValid = false;
+ if (parts[0][0] !== "[") return;
+ if (parts[1] === "patching") return;
+ this.type = parts[0].substr(1);
+ this.category = "Other";
+ if (this.type.indexOf("Store") !== -1) {
+ this.category = "Store";
+ } else if (this.type.indexOf("Load") !== -1) {
+ this.category = "Load";
+ }
+ if (this.type.length == 0) return;
+ if (this.type.indexOf('BinaryOpIC(') === 0) {
+ this.type = "BinaryOpIC";
+ var split = parts[0].split('(');
+ this.state = "(" + split[1] + " => " + parts[2];
+ var offset = this.parsePositionAndFile(parts, 6);
+ if (offset == -1) return
+ if (this.file === undefined) return
+ this.file = this.file.slice(0,-1);
+ } else {
+ var offset = this.parsePositionAndFile(parts, 2);
+ if (offset == -1) return
+ this.state = parts[++offset];
+ if (this.type !== "CompareIC") {
+ // if there is no address we have a smi key
+ var address = parts[++offset];
+ if (address !== undefined && address.indexOf("0x") === 0) {
+ this.key = parts.slice(++offset).join(" ");
+ } else {
+ this.key = address;
+ }
+ }
+ }
+ this.filePosition = this.file + " " + this.position;
+ if (this.key) {
+ var isStringKey = false
+ if (this.key.indexOf("<String[") === 0) {
+ isStringKey = true;
+ this.key = "\"" + this.key.slice(this.key.indexOf(']')+3);
+ } else if (this.key.indexOf("<") === 0) {
+ this.key = this.key.slice(1);
+ }
+ if (this.key.endsWith(">]")) {
+ this.key = this.key.slice(0, -2);
+ } else if (this.key.endsWith("]")) {
+ this.key = this.key.slice(0, -1);
+ }
+ if (isStringKey) {
+ this.key = this.key + "\"";
+ }
+ }
+ this.isValid = true;
+ }
+
+ parsePositionAndFile(parts, start) {
+ // find the position of 'at' in the parts array.
+ var offset = start;
+ for (var i = start+1; i<parts.length; i++) {
+ offset++;
+ if (parts[i] == 'at') break;
+ }
+ if (parts[offset] !== 'at') return -1;
+ this.position = parts.slice(start, offset).join(' ');
+ offset += 1;
+ this.isNative = parts[offset] == "native"
+ offset += this.isNative ? 1 : 0;
+ this.file = parts[offset];
+ return offset;
+ }
+}
+
+function loadFile() {
+ var files = document.getElementById("uploadInput").files;
+
+ var file = files[0];
+ var reader = new FileReader();
+
+ reader.onload = function(evt) {
+ entries = [];
+ var end = this.result.length;
+ var current = 0;
+ var next = 0;
+ var line;
+ var i = 0;
+ var entry;
+ while (current < end) {
+ next = this.result.indexOf("\n", current);
+ if (next === -1) break;
+ i++;
+
+ line = this.result.substring(current, next);
+ current = next+1;
+ entry = new Entry(i, line);
+ if (entry.isValid) entries.push(entry);
+ }
+
+ document.getElementById("count").innerHTML = i;
+ updateTable();
+ }
+ reader.readAsText(file);
+ initGroupKeySelect();
+}
+
+
+
+var properties = ['type', 'category', 'file', 'filePosition', 'state' , 'key', 'isNative']
+
+class Group {
+ constructor(property, key, entry) {
+ this.property = property;
+ this.key = key;
+ this.count = 1;
+ this.entries = [entry];
+ this.percentage = undefined;
+ this.groups = undefined;
+ }
+
+ add(entry) {
+ this.count ++;
+ this.entries.push(entry)
+ }
+
+ createSubGroups() {
+ this.groups = {};
+ for (var i=0; i<properties.length; i++) {
+ var subProperty = properties[i];
+ if (this.property == subProperty) continue;
+ this.groups[subProperty] = groupBy(this.entries, subProperty);
+ }
+ }
+}
+
+function groupBy(entries, property) {
+ var accumulator = {};
+ accumulator.__proto__ = null;
+ var length = entries.length;
+ for (var i = 0; i < length; i++) {
+ var entry = entries[i];
+ var key = entry[property];
+ if (accumulator[key] == undefined) {
+ accumulator[key] = new Group(property, key, entry)
+ } else {
+ var group = accumulator[key];
+ if (group.entries == undefined) console.log([group, entry]);
+ group.add(entry)
+ }
+ }
+ var result = []
+ for (var key in accumulator) {
+ var group = accumulator[key];
+ group.percentage = Math.round(group.count / length * 100 * 100) / 100;
+ result.push(group);
+ }
+ result.sort((a,b) => { return b.count - a.count });
+ return result;
+}
+
+
+
+
+function updateTable() {
+ var select = document.getElementById("group-key");
+ var key = select.options[select.selectedIndex].text;
+ console.log(key);
+ var tableBody = document.getElementById("table-body");
+ removeAllChildren(tableBody);
+ var groups = groupBy(entries, key, true);
+ display(groups, tableBody);
+}
+
+function selecedOption(node) {
+ return node.options[node.selectedIndex]
+}
+
+function removeAllChildren(node) {
+ while (node.firstChild) {
+ node.removeChild(node.firstChild);
+ }
+}
+
+function display(entries, parent) {
+ var fragment = document.createDocumentFragment();
+
+ function td(tr, content, className) {
+ var td = document.createElement("td");
+ td.innerHTML = content;
+ td.className = className
+ tr.appendChild(td);
+ return td
+ }
+ var max = Math.min(1000, entries.length)
+ for (var i = 0; i<max; i++) {
+ var entry = entries[i];
+ var tr = document.createElement("tr");
+ tr.entry = entry;
+ td(tr, '<span onclick="toggleDetails(this)">details</a>', 'details');
+ td(tr, entry.percentage +"%", 'percentage');
+ td(tr, entry.count, 'count');
+ td(tr, entry.key, 'key');
+ fragment.appendChild(tr);
+ }
+ var omitted = entries.length - max;
+ if (omitted > 0) {
+ var tr = document.createElement("tr");
+ var td = td(tr, 'Omitted ' + omitted + " entries.");
+ td.colSpan = 4;
+ fragment.appendChild(tr);
+ }
+ parent.appendChild(fragment);
+}
+
+function displayDrilldown(entry, previousSibling) {
+ var tr = document.createElement('tr');
+ tr.className = "entry-details";
+ tr.style.display = "none";
+ // indent by one td.
+ tr.appendChild(document.createElement("td"));
+ var td = document.createElement("td");
+ td.colSpan = 3;
+ for (var key in entry.groups) {
+ td.appendChild(displayDrilldownGroup(entry, key));
+ }
+ tr.appendChild(td);
+ // Append the new TR after previousSibling.
+ previousSibling.parentNode.insertBefore(tr, previousSibling.nextSibling)
+}
+
+function displayDrilldownGroup(entry, key) {
+ var max = 20;
+ var group = entry.groups[key];
+ var div = document.createElement("div")
+ div.className = 'drilldown-group-title'
+ div.innerHTML = key + ' [top ' + max + ']';
+ var table = document.createElement("table");
+ display(group.slice(0, max), table, false)
+ div.appendChild(table);
+ return div;
+}
+
+function toggleDetails(node) {
+ var tr = node.parentNode.parentNode;
+ var entry = tr.entry;
+
+ // Create subgroup in-place if the don't exist yet.
+ if (entry.groups === undefined) {
+ entry.createSubGroups();
+ displayDrilldown(entry, tr);
+ }
+ var details = tr.nextSibling;
+ var display = details.style.display;
+ if (display != "none") {
+ display = "none";
+ }else {
+ display = "table-row"
+ };
+ details.style.display = display;
+}
+
+function initGroupKeySelect() {
+ var select = document.getElementById("group-key");
+ for (var i in properties) {
+ var option = document.createElement("option");
+ option.text = properties[i];
+ select.add(option);
+ }
+}
+
+ </script>
+ </head>
+ <body>
+ <h1>
+ <span style="color: #00FF00">I</span>
+ <span style="color: #FF00FF">C</span>
+ <span style="color: #00FFFF">E</span>
+ </h1>
+ Your IC-Explorer.
+ <h2>Usage</h2>
+ Run your script with <code>--trace_ic</code> and upload on this page:<br/>
+ <code>/path/to/d8 --trace_ic your_script.js > trace.txt</code>
+ <h2>Data</h2>
+ <form name="fileForm">
+ <p>
+ <input id="uploadInput" type="file" name="files" onchange="loadFile();" >
+ trace entries: <span id="count">0</span>
+ </p>
+ </form>
+ <h2>Result</h2>
+ <p>
+ Group-Key:
+ <select id="group-key" onchange="updateTable()"></select>
+ </p>
+ <p>
+ <table id="table" width="100%">
+ <tbody id="table-body">
+ </tbody>
+ </table>
+ </p>
+ </body>
+</html>
diff --git a/deps/v8/tools/jsfunfuzz/download_jsfunfuzz.py b/deps/v8/tools/jsfunfuzz/download_jsfunfuzz.py
new file mode 100644
index 0000000000..19eff02438
--- /dev/null
+++ b/deps/v8/tools/jsfunfuzz/download_jsfunfuzz.py
@@ -0,0 +1,22 @@
+#!/usr/bin/env python
+# Copyright 2016 the V8 project authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import os
+import re
+import subprocess
+
+FUZZ_PATH = os.path.dirname(os.path.abspath(__file__))
+SHA1_PATH = os.path.join(FUZZ_PATH, 'jsfunfuzz.tar.gz.sha1')
+
+if re.search(r'\bjsfunfuzz=1', os.environ.get('GYP_DEFINES', '')):
+ subprocess.check_call([
+ 'download_from_google_storage',
+ '-b', 'chrome-v8-jsfunfuzz',
+ '-u', '--no_resume',
+ '-s', SHA1_PATH,
+ '--platform=linux*'
+ ])
+else:
+ print 'Skipping jsfunfuzz download as jsfunfuzz is not set in gyp flags.'
diff --git a/deps/v8/tools/jsfunfuzz/fuzz-harness.sh b/deps/v8/tools/jsfunfuzz/fuzz-harness.sh
new file mode 100755
index 0000000000..205a61b335
--- /dev/null
+++ b/deps/v8/tools/jsfunfuzz/fuzz-harness.sh
@@ -0,0 +1,84 @@
+#!/bin/bash
+# Copyright 2016 the V8 project authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# A simple harness that downloads and runs 'jsfunfuzz' against d8. This
+# takes a long time because it runs many iterations and is intended for
+# automated usage. The package containing 'jsfunfuzz' can be found as an
+# attachment to this bug:
+# https://bugzilla.mozilla.org/show_bug.cgi?id=jsfunfuzz
+
+JSFUNFUZZ_URL="https://bugzilla.mozilla.org/attachment.cgi?id=310631"
+JSFUNFUZZ_MD5="d0e497201c5cd7bffbb1cdc1574f4e32"
+
+v8_root=$(readlink -f $(dirname $BASH_SOURCE)/../../)
+jsfunfuzz_dir="$v8_root/tools/jsfunfuzz"
+cd "$jsfunfuzz_dir"
+
+if [ -n "$1" ]; then
+ d8="${v8_root}/$1"
+else
+ d8="${v8_root}/d8"
+fi
+
+if [ ! -f "$d8" ]; then
+ echo "Failed to find d8 binary: $d8"
+ exit 1
+fi
+
+# Deprecated download method. A prepatched archive is downloaded as a hook
+# if jsfunfuzz=1 is specified as a gyp flag. Requires google.com authentication
+# for google storage.
+if [ "$3" == "--download" ]; then
+
+ jsfunfuzz_file="$v8_root/tools/jsfunfuzz.zip"
+ if [ ! -f "$jsfunfuzz_file" ]; then
+ echo "Downloading $jsfunfuzz_file ..."
+ wget -q -O "$jsfunfuzz_file" $JSFUNFUZZ_URL || exit 1
+ fi
+
+ jsfunfuzz_sum=$(md5sum "$jsfunfuzz_file" | awk '{ print $1 }')
+ if [ $jsfunfuzz_sum != $JSFUNFUZZ_MD5 ]; then
+ echo "Failed to verify checksum!"
+ exit 1
+ fi
+
+ if [ ! -d "$jsfunfuzz_dir" ]; then
+ echo "Unpacking into $jsfunfuzz_dir ..."
+ unzip "$jsfunfuzz_file" -d "$jsfunfuzz_dir" || exit 1
+ echo "Patching runner ..."
+ cat << EOF | patch -s -p0 -d "$v8_root"
+--- tools/jsfunfuzz/jsfunfuzz/multi_timed_run.py~
++++ tools/jsfunfuzz/jsfunfuzz/multi_timed_run.py
+@@ -125,7 +125,7 @@
+
+ def many_timed_runs():
+ iteration = 0
+- while True:
++ while iteration < 100:
+ iteration += 1
+ logfilename = "w%d" % iteration
+ one_timed_run(logfilename)
+EOF
+ fi
+
+fi
+
+flags='--debug-code --expose-gc --verify-gc'
+python -u "$jsfunfuzz_dir/jsfunfuzz/multi_timed_run.py" 300 \
+ "$d8" $flags "$jsfunfuzz_dir/jsfunfuzz/jsfunfuzz.js"
+exit_code=$(cat w* | grep " looking good" -c)
+exit_code=$((100-exit_code))
+
+if [ -n "$2" ]; then
+ archive="$2"
+else
+ archive=fuzz-results-$(date +%Y%m%d%H%M%S).tar.bz2
+fi
+echo "Creating archive $archive"
+tar -cjf $archive err-* w*
+rm -f err-* w*
+
+echo "Total failures: $exit_code"
+exit $exit_code
diff --git a/deps/v8/tools/jsfunfuzz/jsfunfuzz.gyp b/deps/v8/tools/jsfunfuzz/jsfunfuzz.gyp
new file mode 100644
index 0000000000..fb0e5f4949
--- /dev/null
+++ b/deps/v8/tools/jsfunfuzz/jsfunfuzz.gyp
@@ -0,0 +1,26 @@
+# Copyright 2016 the V8 project authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+{
+ 'conditions': [
+ ['test_isolation_mode != "noop"', {
+ 'targets': [
+ {
+ 'target_name': 'jsfunfuzz_run',
+ 'type': 'none',
+ 'dependencies': [
+ '../../src/d8.gyp:d8_run',
+ ],
+ 'includes': [
+ '../../build/features.gypi',
+ '../../build/isolate.gypi',
+ ],
+ 'sources': [
+ 'jsfunfuzz.isolate',
+ ],
+ },
+ ],
+ }],
+ ],
+}
diff --git a/deps/v8/tools/jsfunfuzz/jsfunfuzz.isolate b/deps/v8/tools/jsfunfuzz/jsfunfuzz.isolate
new file mode 100644
index 0000000000..56cb4a733f
--- /dev/null
+++ b/deps/v8/tools/jsfunfuzz/jsfunfuzz.isolate
@@ -0,0 +1,18 @@
+# Copyright 2016 the V8 project authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+{
+ 'variables': {
+ 'command': [
+ 'fuzz-harness.sh',
+ ],
+ 'files': [
+ # Grab current directory. This avoids adding logic for checking the
+ # existence of the jsfunfuzz subdirectory.
+ './',
+ ],
+ },
+ 'includes': [
+ '../../src/d8.isolate',
+ ],
+}
diff --git a/deps/v8/tools/jsfunfuzz/jsfunfuzz.tar.gz.sha1 b/deps/v8/tools/jsfunfuzz/jsfunfuzz.tar.gz.sha1
new file mode 100644
index 0000000000..449996007d
--- /dev/null
+++ b/deps/v8/tools/jsfunfuzz/jsfunfuzz.tar.gz.sha1
@@ -0,0 +1 @@
+d92e66273ea2a0da89456a977edd0224a8e837e9 \ No newline at end of file
diff --git a/deps/v8/tools/ll_prof.py b/deps/v8/tools/ll_prof.py
index 7dac2e05eb..e65796145e 100755
--- a/deps/v8/tools/ll_prof.py
+++ b/deps/v8/tools/ll_prof.py
@@ -173,11 +173,19 @@ class Code(object):
break
count += cnt
total_count += count
- count = 100.0 * count / self.self_ticks
- if count >= 0.01:
- print "%15.2f %x: %s" % (count, lines[i][0], lines[i][1])
+ percent = 100.0 * count / self.self_ticks
+ offset = lines[i][0]
+ if percent >= 0.01:
+ # 5 spaces for tick count
+ # 1 space following
+ # 1 for '|'
+ # 1 space following
+ # 6 for the percentage number, incl. the '.'
+ # 1 for the '%' sign
+ # => 15
+ print "%5d | %6.2f%% %x(%d): %s" % (count, percent, offset, offset, lines[i][1])
else:
- print "%s %x: %s" % (" " * 15, lines[i][0], lines[i][1])
+ print "%s %x(%d): %s" % (" " * 15, offset, offset, lines[i][1])
print
assert total_count == self.self_ticks, \
"Lost ticks (%d != %d) in %s" % (total_count, self.self_ticks, self)
diff --git a/deps/v8/tools/luci-go/linux64/isolate.sha1 b/deps/v8/tools/luci-go/linux64/isolate.sha1
index c2821fca10..41d0add796 100644
--- a/deps/v8/tools/luci-go/linux64/isolate.sha1
+++ b/deps/v8/tools/luci-go/linux64/isolate.sha1
@@ -1 +1 @@
-32a3d49a4f7279ad022f346f7d960b2d58e2a0fe \ No newline at end of file
+cf7c1fac12790056ac393774827a5720c7590bac
diff --git a/deps/v8/tools/luci-go/mac64/isolate.sha1 b/deps/v8/tools/luci-go/mac64/isolate.sha1
index fcb6c8fa9e..15744d663a 100644
--- a/deps/v8/tools/luci-go/mac64/isolate.sha1
+++ b/deps/v8/tools/luci-go/mac64/isolate.sha1
@@ -1 +1 @@
-83306c575904ec92c1af9ccc67240d26069df337 \ No newline at end of file
+4678a9332ef5a7b90b184763afee1c100981f710
diff --git a/deps/v8/tools/luci-go/win64/isolate.exe.sha1 b/deps/v8/tools/luci-go/win64/isolate.exe.sha1
index 032483cba7..7c5b7ebf6e 100644
--- a/deps/v8/tools/luci-go/win64/isolate.exe.sha1
+++ b/deps/v8/tools/luci-go/win64/isolate.exe.sha1
@@ -1 +1 @@
-da358c2666ef9b89022e0eadf363cc6e123384e2 \ No newline at end of file
+98457ff4fc79d05661fea53d2b3aff70fac90022
diff --git a/deps/v8/tools/perf/statistics-for-json.R b/deps/v8/tools/perf/statistics-for-json.R
new file mode 100644
index 0000000000..fde2cd75db
--- /dev/null
+++ b/deps/v8/tools/perf/statistics-for-json.R
@@ -0,0 +1,113 @@
+# Copyright 2016 the V8 project authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# Do statistical tests on benchmark results
+# This script requires the libraries rjson, R.utils, ggplot2 and data.table
+# Install them prior to running
+
+# To use the script, first get some benchmark results, for example via
+# tools/run_perf.py ../v8-perf/benchmarks/Octane2.1/Octane2.1-TF.json
+# --outdir=out/x64.release-on --outdir-no-patch=out/x64.release-off
+# --json-test-results=results-on.json
+# --json-test-results-no-patch=results-off.json
+# then run this script
+# Rscript statistics-for-json.R results-on.json results-off.json ~/SVG
+# to produce graphs (and get stdio output of statistical tests).
+
+
+suppressMessages(library("rjson")) # for fromJson
+suppressMessages(library("R.utils")) # for printf
+suppressMessages(library("ggplot2")) # for plotting
+suppressMessages(library("data.table")) # less broken than data.frame
+
+# Clear all variables from environment
+rm(list=ls())
+
+args <- commandArgs(TRUE)
+if (length(args) != 3) {
+ printf(paste("usage: Rscript %%this_script patched-results.json",
+ "unpatched-results.json\n"))
+} else {
+ patch <- fromJSON(file=args[1])
+ nopatch <- fromJSON(file=args[2])
+ outputPath <- args[3]
+ df <- data.table(L = numeric(), R = numeric(), E = numeric(),
+ p.value = numeric(), yL = character(),
+ p.value.sig = logical())
+
+ for (i in seq(1, length(patch$traces))) {
+ testName <- patch$traces[[i]]$graphs[[2]]
+ printf("%s\n", testName)
+
+ nopatch_res <- as.integer(nopatch$traces[[i]]$results)
+ patch_res <- as.integer(patch$traces[[i]]$results)
+ if (length(nopatch_res) > 0) {
+ patch_norm <- shapiro.test(patch_res);
+ nopatch_norm <- shapiro.test(nopatch_res);
+
+ # Shaprio-Wilk test indicates whether data is not likely to
+ # come from a normal distribution. The p-value is the probability
+ # to obtain the sample from a normal distribution. This means, the
+ # smaller p, the more likely the sample was not drawn from a normal
+ # distribution. See [wikipedia:Shapiro-Wilk-Test].
+ printf(" Patched scores look %s distributed (W=%.4f, p=%.4f)\n",
+ ifelse(patch_norm$p.value < 0.05, "not normally", "normally"),
+ patch_norm$statistic, patch_norm$p.value);
+ printf(" Unpatched scores look %s distributed (W=%.4f, p=%.4f)\n",
+ ifelse(nopatch_norm$p.value < 0.05, "not normally", "normally"),
+ nopatch_norm$statistic, nopatch_norm$p.value);
+
+ hist <- ggplot(data=data.frame(x=as.integer(patch_res)), aes(x)) +
+ theme_bw() +
+ geom_histogram(bins=50) +
+ ylab("Points") +
+ xlab(patch$traces[[i]]$graphs[[2]])
+ ggsave(filename=sprintf("%s/%s.svg", outputPath, testName),
+ plot=hist, width=7, height=7)
+
+ hist <- ggplot(data=data.frame(x=as.integer(nopatch_res)), aes(x)) +
+ theme_bw() +
+ geom_histogram(bins=50) +
+ ylab("Points") +
+ xlab(patch$traces[[i]]$graphs[[2]])
+ ggsave(filename=sprintf("%s/%s-before.svg", outputPath, testName),
+ plot=hist, width=7, height=7)
+
+ # The Wilcoxon rank-sum test
+ mww <- wilcox.test(patch_res, nopatch_res, conf.int = TRUE, exact=TRUE)
+ printf(paste(" Wilcoxon U-test W=%.4f, p=%.4f,",
+ "confidence interval [%.1f, %.1f],",
+ "est. effect size %.1f \n"),
+ mww$statistic, mww$p.value,
+ mww$conf.int[1], mww$conf.int[2], mww$estimate);
+ df <-rbind(df, list(mww$conf.int[1], mww$conf.int[2],
+ unname(mww$estimate), unname(mww$p.value),
+ testName, ifelse(mww$p.value < 0.05, TRUE, FALSE)))
+ # t-test
+ t <- t.test(patch_res, nopatch_res, paired=FALSE)
+ printf(paste(" Welch t-test t=%.4f, df = %.2f, p=%.4f,",
+ "confidence interval [%.1f, %.1f], mean diff %.1f \n"),
+ t$statistic, t$parameter, t$p.value,
+ t$conf.int[1], t$conf.int[2], t$estimate[1]-t$estimate[2]);
+ }
+ }
+ df2 <- cbind(x=1:nrow(df), df[order(E),])
+ speedup <- ggplot(df2, aes(x = x, y = E, colour=p.value.sig)) +
+ geom_errorbar(aes(ymax = L, ymin = R), colour="black") +
+ geom_point(size = 4) +
+ scale_x_discrete(limits=df2$yL,
+ name=paste("Benchmark, n=", length(patch_res))) +
+ theme_bw() +
+ geom_hline(yintercept = 0) +
+ ylab("Est. Effect Size in Points") +
+ theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust=0.5)) +
+ theme(legend.position = "bottom") +
+ scale_colour_manual(name="Statistical Significance (MWW, p < 0.05)",
+ values=c("red", "green"),
+ labels=c("not significant", "significant")) +
+ theme(legend.justification=c(0,1), legend.position=c(0,1))
+ print(speedup)
+ ggsave(filename=sprintf("%s/speedup-estimates.svg", outputPath),
+ plot=speedup, width=7, height=7)
+}
diff --git a/deps/v8/tools/presubmit.py b/deps/v8/tools/presubmit.py
index 998656908d..23940bb686 100755
--- a/deps/v8/tools/presubmit.py
+++ b/deps/v8/tools/presubmit.py
@@ -354,30 +354,6 @@ class SourceProcessor(SourceFileProcessor):
if not contents.endswith('\n') or contents.endswith('\n\n'):
print "%s does not end with a single new line." % name
result = False
- # Check two empty lines between declarations.
- if name.endswith(".cc"):
- line = 0
- lines = []
- parts = contents.split('\n')
- while line < len(parts) - 2:
- if self.EndOfDeclaration(parts[line]):
- if self.StartOfDeclaration(parts[line + 1]):
- lines.append(str(line + 1))
- line += 1
- elif parts[line + 1] == "" and \
- self.StartOfDeclaration(parts[line + 2]):
- lines.append(str(line + 1))
- line += 2
- line += 1
- if len(lines) >= 1:
- linenumbers = ', '.join(lines)
- if len(lines) > 1:
- print "%s does not have two empty lines between declarations " \
- "in lines %s." % (name, linenumbers)
- else:
- print "%s does not have two empty lines between declarations " \
- "in line %s." % (name, linenumbers)
- result = False
# Sanitize flags for fuzzer.
if "mjsunit" in name:
match = FLAGS_LINE.search(contents)
diff --git a/deps/v8/tools/release/auto_roll.py b/deps/v8/tools/release/auto_roll.py
index 27fd370971..fc9aeee461 100755
--- a/deps/v8/tools/release/auto_roll.py
+++ b/deps/v8/tools/release/auto_roll.py
@@ -123,7 +123,6 @@ class UpdateChromiumCheckout(Step):
cwd = self._options.chromium
self.GitCheckout("master", cwd=cwd)
self.DeleteBranch("work-branch", cwd=cwd)
- self.Command("gclient", "sync --nohooks", cwd=cwd)
self.GitPull(cwd=cwd)
# Update v8 remotes.
diff --git a/deps/v8/tools/release/common_includes.py b/deps/v8/tools/release/common_includes.py
index c2b64c38ec..c3a216c664 100644
--- a/deps/v8/tools/release/common_includes.py
+++ b/deps/v8/tools/release/common_includes.py
@@ -50,6 +50,7 @@ DAY_IN_SECONDS = 24 * 60 * 60
PUSH_MSG_GIT_RE = re.compile(r".* \(based on (?P<git_rev>[a-fA-F0-9]+)\)$")
PUSH_MSG_NEW_RE = re.compile(r"^Version \d+\.\d+\.\d+$")
VERSION_FILE = os.path.join("include", "v8-version.h")
+WATCHLISTS_FILE = "WATCHLISTS"
# V8 base directory.
V8_BASE = os.path.dirname(
@@ -381,7 +382,7 @@ class GitInterface(VCInterface):
# is the case for all automated merge and push commits - also no title is
# the prefix of another title).
commit = None
- for wait_interval in [3, 7, 15, 35, 45, 60]:
+ for wait_interval in [5, 10, 20, 40, 60, 60]:
self.step.Git("fetch")
commit = self.step.GitLog(n=1, format="%H", grep=message, branch=remote)
if commit:
diff --git a/deps/v8/tools/release/create_release.py b/deps/v8/tools/release/create_release.py
index 3bbb50e491..7477ea1461 100755
--- a/deps/v8/tools/release/create_release.py
+++ b/deps/v8/tools/release/create_release.py
@@ -11,7 +11,6 @@ import urllib2
from common_includes import *
-
class Preparation(Step):
MESSAGE = "Preparation."
@@ -164,6 +163,7 @@ class MakeBranch(Step):
self.Git("checkout -b work-branch %s" % self["push_hash"])
self.GitCheckoutFile(CHANGELOG_FILE, self["latest_version"])
self.GitCheckoutFile(VERSION_FILE, self["latest_version"])
+ self.GitCheckoutFile(WATCHLISTS_FILE, self["latest_version"])
class AddChangeLog(Step):
@@ -183,6 +183,19 @@ class SetVersion(Step):
self.SetVersion(os.path.join(self.default_cwd, VERSION_FILE), "new_")
+class EnableMergeWatchlist(Step):
+ MESSAGE = "Enable watchlist entry for merge notifications."
+
+ def RunStep(self):
+ old_watchlist_content = FileToText(os.path.join(self.default_cwd,
+ WATCHLISTS_FILE))
+ new_watchlist_content = re.sub("(# 'v8-merges@googlegroups\.com',)",
+ "'v8-merges@googlegroups.com',",
+ old_watchlist_content)
+ TextToFile(new_watchlist_content, os.path.join(self.default_cwd,
+ WATCHLISTS_FILE))
+
+
class CommitBranch(Step):
MESSAGE = "Commit version and changelog to new branch."
@@ -288,6 +301,7 @@ class CreateRelease(ScriptsBase):
MakeBranch,
AddChangeLog,
SetVersion,
+ EnableMergeWatchlist,
CommitBranch,
PushBranch,
TagRevision,
diff --git a/deps/v8/tools/release/test_scripts.py b/deps/v8/tools/release/test_scripts.py
index 4a3cb5b24a..4f133ac28a 100644
--- a/deps/v8/tools/release/test_scripts.py
+++ b/deps/v8/tools/release/test_scripts.py
@@ -43,8 +43,6 @@ import merge_to_branch
from merge_to_branch import *
import push_to_candidates
from push_to_candidates import *
-import chromium_roll
-from chromium_roll import ChromiumRoll
import releases
from releases import Releases
from auto_tag import AutoTag
@@ -391,6 +389,20 @@ class ScriptTest(unittest.TestCase):
f.write(" // Some line...\n")
f.write("#define V8_IS_CANDIDATE_VERSION 0\n")
+ def WriteFakeWatchlistsFile(self):
+ watchlists_file = os.path.join(TEST_CONFIG["DEFAULT_CWD"], WATCHLISTS_FILE)
+ if not os.path.exists(os.path.dirname(watchlists_file)):
+ os.makedirs(os.path.dirname(watchlists_file))
+ with open(watchlists_file, "w") as f:
+
+ content = """
+ 'merges': [
+ # Only enabled on branches created with tools/release/create_release.py
+ # 'v8-merges@googlegroups.com',
+ ],
+"""
+ f.write(content)
+
def MakeStep(self):
"""Convenience wrapper."""
options = ScriptsBase(TEST_CONFIG, self, self._state).MakeOptions([])
@@ -954,6 +966,8 @@ Performance and stability improvements on all platforms."""
Cmd("git checkout -f 3.22.4 -- ChangeLog", "", cb=ResetChangeLog),
Cmd("git checkout -f 3.22.4 -- include/v8-version.h", "",
cb=self.WriteFakeVersionFile),
+ Cmd("git checkout -f 3.22.4 -- WATCHLISTS", "",
+ cb=self.WriteFakeWatchlistsFile),
Cmd("git commit -aF \"%s\"" % TEST_CONFIG["COMMITMSG_FILE"], "",
cb=CheckVersionCommit),
Cmd("git push origin "
@@ -985,6 +999,18 @@ Performance and stability improvements on all platforms."""
# Note: The version file is on build number 5 again in the end of this test
# since the git command that merges to master is mocked out.
+ # Check for correct content of the WATCHLISTS file
+
+ watchlists_content = FileToText(os.path.join(TEST_CONFIG["DEFAULT_CWD"],
+ WATCHLISTS_FILE))
+ expected_watchlists_content = """
+ 'merges': [
+ # Only enabled on branches created with tools/release/create_release.py
+ 'v8-merges@googlegroups.com',
+ ],
+"""
+ self.assertEqual(watchlists_content, expected_watchlists_content)
+
C_V8_22624_LOG = """V8 CL.
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@22624 123
@@ -1086,7 +1112,6 @@ deps = {
Cmd("git status -s -uno", "", cwd=chrome_dir),
Cmd("git checkout -f master", "", cwd=chrome_dir),
Cmd("git branch", "", cwd=chrome_dir),
- Cmd("gclient sync --nohooks", "syncing...", cwd=chrome_dir),
Cmd("git pull", "", cwd=chrome_dir),
Cmd("git fetch origin", ""),
Cmd("git new-branch work-branch", "", cwd=chrome_dir),
diff --git a/deps/v8/tools/run-deopt-fuzzer.gyp b/deps/v8/tools/run-deopt-fuzzer.gyp
new file mode 100644
index 0000000000..73f0aaf7a5
--- /dev/null
+++ b/deps/v8/tools/run-deopt-fuzzer.gyp
@@ -0,0 +1,26 @@
+# Copyright 2016 the V8 project authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+{
+ 'conditions': [
+ ['test_isolation_mode != "noop"', {
+ 'targets': [
+ {
+ 'target_name': 'run_deopt_fuzzer_run',
+ 'type': 'none',
+ 'dependencies': [
+ '../src/d8.gyp:d8_run',
+ ],
+ 'includes': [
+ '../build/features.gypi',
+ '../build/isolate.gypi',
+ ],
+ 'sources': [
+ 'run-deopt-fuzzer.isolate',
+ ],
+ },
+ ],
+ }],
+ ],
+}
diff --git a/deps/v8/tools/run-deopt-fuzzer.isolate b/deps/v8/tools/run-deopt-fuzzer.isolate
new file mode 100644
index 0000000000..196fb5dbbc
--- /dev/null
+++ b/deps/v8/tools/run-deopt-fuzzer.isolate
@@ -0,0 +1,19 @@
+# Copyright 2016 the V8 project authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+{
+ 'variables': {
+ 'command': [
+ 'run-deopt-fuzzer.py',
+ ],
+ 'files': [
+ 'run-deopt-fuzzer.py',
+ ],
+ },
+ 'includes': [
+ 'testrunner/testrunner.isolate',
+ '../src/d8.isolate',
+ '../test/mjsunit/mjsunit.isolate',
+ '../test/webkit/webkit.isolate',
+ ],
+}
diff --git a/deps/v8/tools/run-deopt-fuzzer.py b/deps/v8/tools/run-deopt-fuzzer.py
index 70e106ec1b..e4d8f16b4f 100755
--- a/deps/v8/tools/run-deopt-fuzzer.py
+++ b/deps/v8/tools/run-deopt-fuzzer.py
@@ -48,6 +48,9 @@ from testrunner.local import verbose
from testrunner.objects import context
+# Base dir of the v8 checkout to be used as cwd.
+BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+
ARCH_GUESS = utils.DefaultArch()
DEFAULT_TESTS = ["mjsunit", "webkit"]
TIMEOUT_DEFAULT = 60
@@ -290,6 +293,9 @@ def ShardTests(tests, shard_count, shard_run):
def Main():
+ # Use the v8 root as cwd as some test cases use "load" with relative paths.
+ os.chdir(BASE_DIR)
+
parser = BuildOptions()
(options, args) = parser.parse_args()
if not ProcessOptions(options):
@@ -297,9 +303,8 @@ def Main():
return 1
exit_code = 0
- workspace = os.path.abspath(join(os.path.dirname(sys.argv[0]), ".."))
- suite_paths = utils.GetSuitePaths(join(workspace, "test"))
+ suite_paths = utils.GetSuitePaths(join(BASE_DIR, "test"))
if len(args) == 0:
suite_paths = [ s for s in suite_paths if s in DEFAULT_TESTS ]
@@ -314,7 +319,7 @@ def Main():
suites = []
for root in suite_paths:
suite = testsuite.TestSuite.LoadTestSuite(
- os.path.join(workspace, "test", root))
+ os.path.join(BASE_DIR, "test", root))
if suite:
suite.SetupWorkingDirectory()
suites.append(suite)
@@ -326,7 +331,7 @@ def Main():
for mode in options.mode:
for arch in options.arch:
try:
- code = Execute(arch, mode, args, options, suites, workspace)
+ code = Execute(arch, mode, args, options, suites, BASE_DIR)
exit_code = exit_code or code
except KeyboardInterrupt:
return 2
diff --git a/deps/v8/tools/run-tests.py b/deps/v8/tools/run-tests.py
index fe8091efb3..c94457fe6d 100755
--- a/deps/v8/tools/run-tests.py
+++ b/deps/v8/tools/run-tests.py
@@ -60,27 +60,33 @@ ARCH_GUESS = utils.DefaultArch()
# expected runtimes (suites with slow test cases first). These groups are
# invoked in seperate steps on the bots.
TEST_MAP = {
+ # This needs to stay in sync with test/bot_default.isolate.
"bot_default": [
"mjsunit",
"cctest",
"webkit",
+ "fuzzer",
"message",
"preparser",
"intl",
"unittests",
],
+ # This needs to stay in sync with test/default.isolate.
"default": [
"mjsunit",
"cctest",
+ "fuzzer",
"message",
"preparser",
"intl",
"unittests",
],
+ # This needs to stay in sync with test/ignition.isolate.
"ignition": [
"mjsunit",
"cctest",
],
+ # This needs to stay in sync with test/optimize_for_size.isolate.
"optimize_for_size": [
"mjsunit",
"cctest",
diff --git a/deps/v8/tools/run-valgrind.gyp b/deps/v8/tools/run-valgrind.gyp
new file mode 100644
index 0000000000..d06be933a9
--- /dev/null
+++ b/deps/v8/tools/run-valgrind.gyp
@@ -0,0 +1,26 @@
+# Copyright 2016 the V8 project authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+{
+ 'conditions': [
+ ['test_isolation_mode != "noop"', {
+ 'targets': [
+ {
+ 'target_name': 'run_valgrind_run',
+ 'type': 'none',
+ 'dependencies': [
+ '../src/d8.gyp:d8_run',
+ ],
+ 'includes': [
+ '../build/features.gypi',
+ '../build/isolate.gypi',
+ ],
+ 'sources': [
+ 'run-valgrind.isolate',
+ ],
+ },
+ ],
+ }],
+ ],
+}
diff --git a/deps/v8/tools/run-valgrind.isolate b/deps/v8/tools/run-valgrind.isolate
new file mode 100644
index 0000000000..5947409e17
--- /dev/null
+++ b/deps/v8/tools/run-valgrind.isolate
@@ -0,0 +1,29 @@
+# Copyright 2016 the V8 project authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+{
+ 'variables': {
+ 'command': [
+ 'run-valgrind.py',
+ ],
+ 'files': [
+ 'run-valgrind.py',
+ ],
+ },
+ 'conditions': [
+ ['has_valgrind==1', {
+ 'variables': {
+ 'files': [
+ # This assumes vagrind binaries have been fetched as a custom deps
+ # into v8/third_party/valgrind. It is not clear on which target
+ # machine this will run, but grabbing both is cheap.
+ '../third_party/valgrind/linux_x86/',
+ '../third_party/valgrind/linux_x64/',
+ ],
+ },
+ }],
+ ],
+ 'includes': [
+ '../src/d8.isolate',
+ ],
+}
diff --git a/deps/v8/tools/run_perf.py b/deps/v8/tools/run_perf.py
index a8cc3fab71..db4245f499 100755
--- a/deps/v8/tools/run_perf.py
+++ b/deps/v8/tools/run_perf.py
@@ -350,9 +350,9 @@ class Node(object):
class DefaultSentinel(Node):
"""Fake parent node with all default values."""
- def __init__(self):
+ def __init__(self, binary = "d8"):
super(DefaultSentinel, self).__init__()
- self.binary = "d8"
+ self.binary = binary
self.run_count = 10
self.timeout = 60
self.path = []
@@ -543,11 +543,10 @@ def MakeGraphConfig(suite, arch, parent):
raise Exception("Invalid suite configuration.")
-def BuildGraphConfigs(suite, arch, parent=None):
+def BuildGraphConfigs(suite, arch, parent):
"""Builds a tree structure of graph objects that corresponds to the suite
configuration.
"""
- parent = parent or DefaultSentinel()
# TODO(machenbach): Implement notion of cpu type?
if arch not in suite.get("archs", SUPPORTED_ARCHS):
@@ -732,6 +731,12 @@ class AndroidPlatform(Platform): # pragma: no cover
target_dir,
skip_if_missing=True,
)
+ self._PushFile(
+ shell_dir,
+ "snapshot_blob_ignition.bin",
+ target_dir,
+ skip_if_missing=True,
+ )
def PreTests(self, node, path):
suite_dir = os.path.abspath(os.path.dirname(path))
@@ -813,6 +818,11 @@ def Main(args):
default="out")
parser.add_option("--outdir-no-patch",
help="Base directory with compile output without patch")
+ parser.add_option("--binary-override-path",
+ help="JavaScript engine binary. By default, d8 under "
+ "architecture-specific build dir. "
+ "Not supported in conjunction with outdir-no-patch.")
+
(options, args) = parser.parse_args(args)
if len(args) == 0: # pragma: no cover
@@ -843,7 +853,18 @@ def Main(args):
else:
build_config = "%s.release" % options.arch
- options.shell_dir = os.path.join(workspace, options.outdir, build_config)
+ if options.binary_override_path == None:
+ options.shell_dir = os.path.join(workspace, options.outdir, build_config)
+ default_binary_name = "d8"
+ else:
+ if not os.path.isfile(options.binary_override_path):
+ print "binary-override-path must be a file name"
+ return 1
+ if options.outdir_no_patch:
+ print "specify either binary-override-path or outdir-no-patch"
+ return 1
+ options.shell_dir = os.path.dirname(options.binary_override_path)
+ default_binary_name = os.path.basename(options.binary_override_path)
if options.outdir_no_patch:
options.shell_dir_no_patch = os.path.join(
@@ -872,7 +893,8 @@ def Main(args):
platform.PreExecution()
# Build the graph/trace tree structure.
- root = BuildGraphConfigs(suite, options.arch)
+ default_parent = DefaultSentinel(default_binary_name)
+ root = BuildGraphConfigs(suite, options.arch, default_parent)
# Callback to be called on each node on traversal.
def NodeCB(node):
diff --git a/deps/v8/tools/testrunner/local/execution.py b/deps/v8/tools/testrunner/local/execution.py
index c9fe54175a..0d90ab8d0d 100644
--- a/deps/v8/tools/testrunner/local/execution.py
+++ b/deps/v8/tools/testrunner/local/execution.py
@@ -28,6 +28,7 @@
import collections
import os
+import re
import shutil
import sys
import time
@@ -38,6 +39,7 @@ from . import perfdata
from . import statusfile
from . import testsuite
from . import utils
+from ..objects import output
# Base dir of the v8 checkout.
@@ -82,7 +84,7 @@ def MakeProcessContext(context):
def GetCommand(test, context):
d8testflag = []
- shell = test.suite.shell()
+ shell = test.shell()
if shell == "d8":
d8testflag = ["--test"]
if utils.IsWindows():
@@ -134,15 +136,28 @@ class Job(object):
raise NotImplementedError()
+def SetupProblem(exception, test):
+ stderr = ">>> EXCEPTION: %s\n" % exception
+ match = re.match(r"^.*No such file or directory: '(.*)'$", str(exception))
+ if match:
+ # Extra debuging information when files are claimed missing.
+ f = match.group(1)
+ stderr += ">>> File %s exists? -> %s\n" % (f, os.path.exists(f))
+ return test.id, output.Output(1, False, "", stderr), 0
+
+
class TestJob(Job):
def __init__(self, test):
self.test = test
def Run(self, process_context):
- # Retrieve a new suite object on the worker-process side. The original
- # suite object isn't pickled.
- self.test.SetSuiteObject(process_context.suites)
- instr = _GetInstructions(self.test, process_context.context)
+ try:
+ # Retrieve a new suite object on the worker-process side. The original
+ # suite object isn't pickled.
+ self.test.SetSuiteObject(process_context.suites)
+ instr = _GetInstructions(self.test, process_context.context)
+ except Exception, e:
+ return SetupProblem(e, self.test)
start_time = time.time()
if instr.dep_command is not None:
diff --git a/deps/v8/tools/testrunner/local/pool.py b/deps/v8/tools/testrunner/local/pool.py
index 6d123fd4e5..99996ee3ce 100644
--- a/deps/v8/tools/testrunner/local/pool.py
+++ b/deps/v8/tools/testrunner/local/pool.py
@@ -109,6 +109,7 @@ class Pool():
process boundary.
"""
try:
+ internal_error = False
gen = iter(gen)
self.advance = self._advance_more
@@ -134,7 +135,9 @@ class Pool():
yield MaybeResult.create_heartbeat()
self.count -= 1
if result.exception:
- # Ignore items with unexpected exceptions.
+ # TODO(machenbach): Handle a few known types of internal errors
+ # gracefully, e.g. missing test files.
+ internal_error = True
continue
elif result.break_now:
# A keyboard interrupt happened in one of the worker processes.
@@ -144,6 +147,8 @@ class Pool():
self.advance(gen)
finally:
self.terminate()
+ if internal_error:
+ raise Exception("Internal error in a worker process.")
def _advance_more(self, gen):
while self.count < self.num_workers * self.BUFFER_FACTOR:
diff --git a/deps/v8/tools/testrunner/local/testsuite.py b/deps/v8/tools/testrunner/local/testsuite.py
index e3d1e232e8..55e0eb21ae 100644
--- a/deps/v8/tools/testrunner/local/testsuite.py
+++ b/deps/v8/tools/testrunner/local/testsuite.py
@@ -41,8 +41,7 @@ ALL_VARIANT_FLAGS = {
"turbofan": [["--turbo"]],
"turbofan_opt": [["--turbo", "--always-opt"]],
"nocrankshaft": [["--nocrankshaft"]],
- "ignition": [["--ignition", "--turbo", "--ignition-fake-try-catch",
- "--ignition-fallback-on-eval-and-catch"]],
+ "ignition": [["--ignition", "--turbo"]],
"preparser": [["--min-preparse-length=0"]],
}
@@ -52,8 +51,7 @@ FAST_VARIANT_FLAGS = {
"stress": [["--stress-opt"]],
"turbofan": [["--turbo"]],
"nocrankshaft": [["--nocrankshaft"]],
- "ignition": [["--ignition", "--turbo", "--ignition-fake-try-catch",
- "--ignition-fallback-on-eval-and-catch"]],
+ "ignition": [["--ignition", "--turbo"]],
"preparser": [["--min-preparse-length=0"]],
}
diff --git a/deps/v8/tools/testrunner/objects/testcase.py b/deps/v8/tools/testrunner/objects/testcase.py
index fa2265c070..b91f8b4b56 100644
--- a/deps/v8/tools/testrunner/objects/testcase.py
+++ b/deps/v8/tools/testrunner/objects/testcase.py
@@ -30,12 +30,13 @@ from . import output
class TestCase(object):
def __init__(self, suite, path, variant='default', flags=None,
- dependency=None):
+ dependency=None, override_shell=None):
self.suite = suite # TestSuite object
self.path = path # string, e.g. 'div-mod', 'test-api/foo'
self.flags = flags or [] # list of strings, flags specific to this test
self.variant = variant # name of the used testing variant
self.dependency = dependency # |path| for testcase that must be run first
+ self.override_shell = override_shell
self.outcomes = set([])
self.output = None
self.id = None # int, used to map result back to TestCase instance
@@ -44,7 +45,7 @@ class TestCase(object):
def CopyAddingFlags(self, variant, flags):
copy = TestCase(self.suite, self.path, variant, self.flags + flags,
- self.dependency)
+ self.dependency, self.override_shell)
copy.outcomes = self.outcomes
return copy
@@ -55,15 +56,16 @@ class TestCase(object):
"""
assert self.id is not None
return [self.suitename(), self.path, self.variant, self.flags,
- self.dependency, list(self.outcomes or []), self.id]
+ self.dependency, self.override_shell, list(self.outcomes or []),
+ self.id]
@staticmethod
def UnpackTask(task):
"""Creates a new TestCase object based on packed task data."""
# For the order of the fields, refer to PackTask() above.
- test = TestCase(str(task[0]), task[1], task[2], task[3], task[4])
- test.outcomes = set(task[5])
- test.id = task[6]
+ test = TestCase(str(task[0]), task[1], task[2], task[3], task[4], task[5])
+ test.outcomes = set(task[6])
+ test.id = task[7]
test.run = 1
return test
@@ -87,6 +89,11 @@ class TestCase(object):
def GetLabel(self):
return self.suitename() + "/" + self.suite.CommonTestName(self)
+ def shell(self):
+ if self.override_shell:
+ return self.override_shell
+ return self.suite.shell()
+
def __getstate__(self):
"""Representation to pickle test cases.
diff --git a/deps/v8/tools/try_perf.py b/deps/v8/tools/try_perf.py
index 2403f7d782..fbd4036dad 100755
--- a/deps/v8/tools/try_perf.py
+++ b/deps/v8/tools/try_perf.py
@@ -53,6 +53,10 @@ def main():
parser.add_argument('benchmarks', nargs='+', help='The benchmarks to run.')
parser.add_argument('--extra-flags', default='',
help='Extra flags to be passed to the executable.')
+ parser.add_argument('-r', '--revision', type=str, default=None,
+ help='Revision (use full hash!) to use for the try job; '
+ 'default: the revision will be determined by the '
+ 'try server; see its waterfall for more info')
for option in sorted(BOTS):
parser.add_argument(
option, dest='bots', action='append_const', const=BOTS[option],
@@ -85,6 +89,7 @@ def main():
cmd = ['git cl try -m internal.client.v8']
cmd += ['-b %s' % bot for bot in options.bots]
+ if options.revision: cmd += ['-r %s' % options.revision]
benchmarks = ['"%s"' % benchmark for benchmark in options.benchmarks]
cmd += ['-p \'testfilter=[%s]\'' % ','.join(benchmarks)]
if options.extra_flags:
diff --git a/deps/v8/tools/v8heapconst.py b/deps/v8/tools/v8heapconst.py
index 0461bcbb66..39cfeb1707 100644
--- a/deps/v8/tools/v8heapconst.py
+++ b/deps/v8/tools/v8heapconst.py
@@ -55,8 +55,8 @@ INSTANCE_TYPES = {
132: "MAP_TYPE",
133: "CODE_TYPE",
131: "ODDBALL_TYPE",
- 173: "CELL_TYPE",
- 176: "PROPERTY_CELL_TYPE",
+ 171: "CELL_TYPE",
+ 174: "PROPERTY_CELL_TYPE",
129: "HEAP_NUMBER_TYPE",
134: "MUTABLE_HEAP_NUMBER_TYPE",
135: "FOREIGN_TYPE",
@@ -73,59 +73,57 @@ INSTANCE_TYPES = {
146: "FIXED_FLOAT64_ARRAY_TYPE",
147: "FIXED_UINT8_CLAMPED_ARRAY_TYPE",
149: "FILLER_TYPE",
- 150: "DECLARED_ACCESSOR_DESCRIPTOR_TYPE",
- 151: "DECLARED_ACCESSOR_INFO_TYPE",
- 152: "EXECUTABLE_ACCESSOR_INFO_TYPE",
- 153: "ACCESSOR_PAIR_TYPE",
- 154: "ACCESS_CHECK_INFO_TYPE",
- 155: "INTERCEPTOR_INFO_TYPE",
- 156: "CALL_HANDLER_INFO_TYPE",
- 157: "FUNCTION_TEMPLATE_INFO_TYPE",
- 158: "OBJECT_TEMPLATE_INFO_TYPE",
- 159: "SIGNATURE_INFO_TYPE",
- 160: "TYPE_SWITCH_INFO_TYPE",
- 162: "ALLOCATION_MEMENTO_TYPE",
- 161: "ALLOCATION_SITE_TYPE",
- 163: "SCRIPT_TYPE",
- 164: "CODE_CACHE_TYPE",
- 165: "POLYMORPHIC_CODE_CACHE_TYPE",
- 166: "TYPE_FEEDBACK_INFO_TYPE",
- 167: "ALIASED_ARGUMENTS_ENTRY_TYPE",
- 168: "BOX_TYPE",
- 177: "PROTOTYPE_INFO_TYPE",
- 178: "SLOPPY_BLOCK_WITH_EVAL_CONTEXT_EXTENSION_TYPE",
- 171: "FIXED_ARRAY_TYPE",
+ 150: "ACCESSOR_INFO_TYPE",
+ 151: "ACCESSOR_PAIR_TYPE",
+ 152: "ACCESS_CHECK_INFO_TYPE",
+ 153: "INTERCEPTOR_INFO_TYPE",
+ 154: "CALL_HANDLER_INFO_TYPE",
+ 155: "FUNCTION_TEMPLATE_INFO_TYPE",
+ 156: "OBJECT_TEMPLATE_INFO_TYPE",
+ 157: "SIGNATURE_INFO_TYPE",
+ 158: "TYPE_SWITCH_INFO_TYPE",
+ 160: "ALLOCATION_MEMENTO_TYPE",
+ 159: "ALLOCATION_SITE_TYPE",
+ 161: "SCRIPT_TYPE",
+ 162: "CODE_CACHE_TYPE",
+ 163: "POLYMORPHIC_CODE_CACHE_TYPE",
+ 164: "TYPE_FEEDBACK_INFO_TYPE",
+ 165: "ALIASED_ARGUMENTS_ENTRY_TYPE",
+ 166: "BOX_TYPE",
+ 175: "PROTOTYPE_INFO_TYPE",
+ 176: "SLOPPY_BLOCK_WITH_EVAL_CONTEXT_EXTENSION_TYPE",
+ 169: "FIXED_ARRAY_TYPE",
148: "FIXED_DOUBLE_ARRAY_TYPE",
- 172: "SHARED_FUNCTION_INFO_TYPE",
- 174: "WEAK_CELL_TYPE",
- 175: "TRANSITION_ARRAY_TYPE",
- 181: "JS_MESSAGE_OBJECT_TYPE",
- 180: "JS_VALUE_TYPE",
- 182: "JS_DATE_TYPE",
- 183: "JS_OBJECT_TYPE",
- 184: "JS_CONTEXT_EXTENSION_OBJECT_TYPE",
- 185: "JS_GENERATOR_OBJECT_TYPE",
- 186: "JS_MODULE_TYPE",
- 187: "JS_GLOBAL_OBJECT_TYPE",
- 188: "JS_GLOBAL_PROXY_TYPE",
- 189: "JS_ARRAY_TYPE",
- 190: "JS_ARRAY_BUFFER_TYPE",
- 191: "JS_TYPED_ARRAY_TYPE",
- 192: "JS_DATA_VIEW_TYPE",
- 179: "JS_PROXY_TYPE",
- 193: "JS_SET_TYPE",
- 194: "JS_MAP_TYPE",
- 195: "JS_SET_ITERATOR_TYPE",
- 196: "JS_MAP_ITERATOR_TYPE",
- 197: "JS_ITERATOR_RESULT_TYPE",
- 198: "JS_WEAK_MAP_TYPE",
- 199: "JS_WEAK_SET_TYPE",
- 200: "JS_PROMISE_TYPE",
- 201: "JS_REGEXP_TYPE",
- 202: "JS_BOUND_FUNCTION_TYPE",
- 203: "JS_FUNCTION_TYPE",
- 169: "DEBUG_INFO_TYPE",
- 170: "BREAK_POINT_INFO_TYPE",
+ 170: "SHARED_FUNCTION_INFO_TYPE",
+ 172: "WEAK_CELL_TYPE",
+ 173: "TRANSITION_ARRAY_TYPE",
+ 179: "JS_MESSAGE_OBJECT_TYPE",
+ 178: "JS_VALUE_TYPE",
+ 180: "JS_DATE_TYPE",
+ 181: "JS_OBJECT_TYPE",
+ 182: "JS_CONTEXT_EXTENSION_OBJECT_TYPE",
+ 183: "JS_GENERATOR_OBJECT_TYPE",
+ 184: "JS_MODULE_TYPE",
+ 185: "JS_GLOBAL_OBJECT_TYPE",
+ 186: "JS_GLOBAL_PROXY_TYPE",
+ 187: "JS_ARRAY_TYPE",
+ 188: "JS_ARRAY_BUFFER_TYPE",
+ 189: "JS_TYPED_ARRAY_TYPE",
+ 190: "JS_DATA_VIEW_TYPE",
+ 177: "JS_PROXY_TYPE",
+ 191: "JS_SET_TYPE",
+ 192: "JS_MAP_TYPE",
+ 193: "JS_SET_ITERATOR_TYPE",
+ 194: "JS_MAP_ITERATOR_TYPE",
+ 195: "JS_ITERATOR_RESULT_TYPE",
+ 196: "JS_WEAK_MAP_TYPE",
+ 197: "JS_WEAK_SET_TYPE",
+ 198: "JS_PROMISE_TYPE",
+ 199: "JS_REGEXP_TYPE",
+ 200: "JS_BOUND_FUNCTION_TYPE",
+ 201: "JS_FUNCTION_TYPE",
+ 167: "DEBUG_INFO_TYPE",
+ 168: "BREAK_POINT_INFO_TYPE",
}
# List of known V8 maps.
@@ -133,7 +131,7 @@ KNOWN_MAPS = {
0x08081: (136, "ByteArrayMap"),
0x080ad: (132, "MetaMap"),
0x080d9: (131, "NullMap"),
- 0x08105: (171, "FixedArrayMap"),
+ 0x08105: (169, "FixedArrayMap"),
0x08131: (4, "OneByteInternalizedStringMap"),
0x0815d: (138, "FreeSpaceMap"),
0x08189: (149, "OnePointerFillerMap"),
@@ -143,9 +141,9 @@ KNOWN_MAPS = {
0x08239: (131, "TheHoleMap"),
0x08265: (131, "BooleanMap"),
0x08291: (131, "UninitializedMap"),
- 0x082bd: (173, "CellMap"),
- 0x082e9: (176, "GlobalPropertyCellMap"),
- 0x08315: (172, "SharedFunctionInfoMap"),
+ 0x082bd: (171, "CellMap"),
+ 0x082e9: (174, "GlobalPropertyCellMap"),
+ 0x08315: (170, "SharedFunctionInfoMap"),
0x08341: (134, "MutableHeapNumberMap"),
0x0836d: (130, "Float32x4Map"),
0x08399: (130, "Int32x4Map"),
@@ -157,21 +155,21 @@ KNOWN_MAPS = {
0x084a1: (130, "Int8x16Map"),
0x084cd: (130, "Uint8x16Map"),
0x084f9: (130, "Bool8x16Map"),
- 0x08525: (171, "NativeContextMap"),
+ 0x08525: (169, "NativeContextMap"),
0x08551: (133, "CodeMap"),
- 0x0857d: (171, "ScopeInfoMap"),
- 0x085a9: (171, "FixedCOWArrayMap"),
+ 0x0857d: (169, "ScopeInfoMap"),
+ 0x085a9: (169, "FixedCOWArrayMap"),
0x085d5: (148, "FixedDoubleArrayMap"),
- 0x08601: (174, "WeakCellMap"),
- 0x0862d: (175, "TransitionArrayMap"),
+ 0x08601: (172, "WeakCellMap"),
+ 0x0862d: (173, "TransitionArrayMap"),
0x08659: (68, "OneByteStringMap"),
- 0x08685: (171, "FunctionContextMap"),
+ 0x08685: (169, "FunctionContextMap"),
0x086b1: (131, "NoInterceptorResultSentinelMap"),
0x086dd: (131, "ArgumentsMarkerMap"),
0x08709: (131, "ExceptionMap"),
0x08735: (131, "TerminationExceptionMap"),
- 0x08761: (171, "HashTableMap"),
- 0x0878d: (171, "OrderedHashTableMap"),
+ 0x08761: (169, "HashTableMap"),
+ 0x0878d: (169, "OrderedHashTableMap"),
0x087b9: (128, "SymbolMap"),
0x087e5: (64, "StringMap"),
0x08811: (69, "ConsOneByteStringMap"),
@@ -201,37 +199,37 @@ KNOWN_MAPS = {
0x08c31: (145, "FixedFloat32ArrayMap"),
0x08c5d: (146, "FixedFloat64ArrayMap"),
0x08c89: (147, "FixedUint8ClampedArrayMap"),
- 0x08cb5: (171, "SloppyArgumentsElementsMap"),
- 0x08ce1: (171, "CatchContextMap"),
- 0x08d0d: (171, "WithContextMap"),
- 0x08d39: (171, "BlockContextMap"),
- 0x08d65: (171, "ModuleContextMap"),
- 0x08d91: (171, "ScriptContextMap"),
- 0x08dbd: (171, "ScriptContextTableMap"),
- 0x08de9: (181, "JSMessageObjectMap"),
+ 0x08cb5: (169, "SloppyArgumentsElementsMap"),
+ 0x08ce1: (169, "CatchContextMap"),
+ 0x08d0d: (169, "WithContextMap"),
+ 0x08d39: (169, "BlockContextMap"),
+ 0x08d65: (169, "ModuleContextMap"),
+ 0x08d91: (169, "ScriptContextMap"),
+ 0x08dbd: (169, "ScriptContextTableMap"),
+ 0x08de9: (179, "JSMessageObjectMap"),
0x08e15: (135, "ForeignMap"),
- 0x08e41: (183, "NeanderMap"),
- 0x08e6d: (183, "ExternalMap"),
- 0x08e99: (162, "AllocationMementoMap"),
- 0x08ec5: (161, "AllocationSiteMap"),
- 0x08ef1: (165, "PolymorphicCodeCacheMap"),
- 0x08f1d: (163, "ScriptMap"),
+ 0x08e41: (181, "NeanderMap"),
+ 0x08e6d: (181, "ExternalMap"),
+ 0x08e99: (160, "AllocationMementoMap"),
+ 0x08ec5: (159, "AllocationSiteMap"),
+ 0x08ef1: (163, "PolymorphicCodeCacheMap"),
+ 0x08f1d: (161, "ScriptMap"),
0x08f75: (137, "BytecodeArrayMap"),
- 0x08fa1: (168, "BoxMap"),
- 0x08fcd: (152, "ExecutableAccessorInfoMap"),
- 0x08ff9: (153, "AccessorPairMap"),
- 0x09025: (154, "AccessCheckInfoMap"),
- 0x09051: (155, "InterceptorInfoMap"),
- 0x0907d: (156, "CallHandlerInfoMap"),
- 0x090a9: (157, "FunctionTemplateInfoMap"),
- 0x090d5: (158, "ObjectTemplateInfoMap"),
- 0x09101: (164, "CodeCacheMap"),
- 0x0912d: (166, "TypeFeedbackInfoMap"),
- 0x09159: (167, "AliasedArgumentsEntryMap"),
- 0x09185: (169, "DebugInfoMap"),
- 0x091b1: (170, "BreakPointInfoMap"),
- 0x091dd: (177, "PrototypeInfoMap"),
- 0x09209: (178, "SloppyBlockWithEvalContextExtensionMap"),
+ 0x08fa1: (166, "BoxMap"),
+ 0x08fcd: (150, "AccessorInfoMap"),
+ 0x08ff9: (151, "AccessorPairMap"),
+ 0x09025: (152, "AccessCheckInfoMap"),
+ 0x09051: (153, "InterceptorInfoMap"),
+ 0x0907d: (154, "CallHandlerInfoMap"),
+ 0x090a9: (155, "FunctionTemplateInfoMap"),
+ 0x090d5: (156, "ObjectTemplateInfoMap"),
+ 0x09101: (162, "CodeCacheMap"),
+ 0x0912d: (164, "TypeFeedbackInfoMap"),
+ 0x09159: (165, "AliasedArgumentsEntryMap"),
+ 0x09185: (167, "DebugInfoMap"),
+ 0x091b1: (168, "BreakPointInfoMap"),
+ 0x091dd: (175, "PrototypeInfoMap"),
+ 0x09209: (176, "SloppyBlockWithEvalContextExtensionMap"),
}
# List of known V8 objects.
@@ -270,28 +268,27 @@ KNOWN_OBJECTS = {
("OLD_SPACE", 0x0980d): "MinusInfinityValue",
("OLD_SPACE", 0x0981d): "MessageListeners",
("OLD_SPACE", 0x09839): "CodeStubs",
- ("OLD_SPACE", 0x10201): "DummyVector",
- ("OLD_SPACE", 0x1403d): "NonMonomorphicCache",
- ("OLD_SPACE", 0x14651): "PolymorphicCodeCache",
- ("OLD_SPACE", 0x14659): "NativesSourceCache",
- ("OLD_SPACE", 0x148f5): "ExperimentalNativesSourceCache",
- ("OLD_SPACE", 0x14929): "ExtraNativesSourceCache",
- ("OLD_SPACE", 0x14949): "ExperimentalExtraNativesSourceCache",
- ("OLD_SPACE", 0x14955): "EmptyScript",
- ("OLD_SPACE", 0x14995): "IntrinsicFunctionNames",
- ("OLD_SPACE", 0x2e73d): "UndefinedCell",
- ("OLD_SPACE", 0x2e745): "ObservationState",
- ("OLD_SPACE", 0x2e751): "ScriptList",
- ("OLD_SPACE", 0x2e8d9): "ClearedOptimizedCodeMap",
- ("OLD_SPACE", 0x2e8e5): "EmptyWeakCell",
- ("OLD_SPACE", 0x54715): "EmptySlowElementDictionary",
- ("OLD_SPACE", 0x54761): "WeakObjectToCodeTable",
- ("OLD_SPACE", 0x54875): "ArrayProtector",
- ("OLD_SPACE", 0x54885): "EmptyPropertyCell",
- ("OLD_SPACE", 0x54895): "NoScriptSharedFunctionInfos",
- ("OLD_SPACE", 0x5711d): "InterpreterTable",
- ("OLD_SPACE", 0x57325): "EmptyBytecodeArray",
- ("OLD_SPACE", 0x5a2d1): "StringTable",
- ("CODE_SPACE", 0x1a2a1): "JsEntryCode",
- ("CODE_SPACE", 0x1f081): "JsConstructEntryCode",
+ ("OLD_SPACE", 0x0feb9): "DummyVector",
+ ("OLD_SPACE", 0x13fed): "NonMonomorphicCache",
+ ("OLD_SPACE", 0x14601): "PolymorphicCodeCache",
+ ("OLD_SPACE", 0x14609): "NativesSourceCache",
+ ("OLD_SPACE", 0x1488d): "ExperimentalNativesSourceCache",
+ ("OLD_SPACE", 0x148c1): "ExtraNativesSourceCache",
+ ("OLD_SPACE", 0x148e1): "ExperimentalExtraNativesSourceCache",
+ ("OLD_SPACE", 0x148ed): "EmptyScript",
+ ("OLD_SPACE", 0x1492d): "IntrinsicFunctionNames",
+ ("OLD_SPACE", 0x2e919): "EmptyPropertiesDictionary",
+ ("OLD_SPACE", 0x2e965): "UndefinedCell",
+ ("OLD_SPACE", 0x2e96d): "ObservationState",
+ ("OLD_SPACE", 0x2e979): "ScriptList",
+ ("OLD_SPACE", 0x2eb01): "ClearedOptimizedCodeMap",
+ ("OLD_SPACE", 0x2eb0d): "EmptyWeakCell",
+ ("OLD_SPACE", 0x534d1): "EmptySlowElementDictionary",
+ ("OLD_SPACE", 0x5351d): "WeakObjectToCodeTable",
+ ("OLD_SPACE", 0x53631): "ArrayProtector",
+ ("OLD_SPACE", 0x53641): "EmptyPropertyCell",
+ ("OLD_SPACE", 0x53651): "NoScriptSharedFunctionInfos",
+ ("OLD_SPACE", 0x59cf1): "StringTable",
+ ("CODE_SPACE", 0x1a001): "JsEntryCode",
+ ("CODE_SPACE", 0x1e721): "JsConstructEntryCode",
}
diff --git a/deps/v8/tools/whitespace.txt b/deps/v8/tools/whitespace.txt
index 687be113dd..d1395f5d91 100644
--- a/deps/v8/tools/whitespace.txt
+++ b/deps/v8/tools/whitespace.txt
@@ -5,4 +5,4 @@ Try to write something funny. And please don't add trailing whitespace.
A Smi balks into a war and says:
"I'm so deoptimized today!"
The doubles heard this and started to unbox.
-The Smi looked at them when a crazy v8-autoroll account showed up.....
+The Smi looked at them when a crazy v8-autoroll account showed up..