diff options
author | Ali Ijaz Sheikh <ofrobots@google.com> | 2016-04-07 14:06:55 -0700 |
---|---|---|
committer | Ali Ijaz Sheikh <ofrobots@google.com> | 2016-04-14 10:03:39 -0700 |
commit | 52af5c4eebf4de8638aef0338bd826656312a02a (patch) | |
tree | 628dc9fb0b558c3a73a2160706fef368876fe548 /deps/v8/tools | |
parent | 6e3e8acc7cc7ebd3d67db5ade1247b8b558efe09 (diff) | |
download | node-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')
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.. |