summaryrefslogtreecommitdiff
path: root/deps/v8/tools
diff options
context:
space:
mode:
authorMichaël Zasso <targos@protonmail.com>2018-09-21 09:14:51 +0200
committerMichaël Zasso <targos@protonmail.com>2018-09-22 18:29:25 +0200
commit0e7ddbd3d7e9439c67573b854c49cf82c398ae82 (patch)
tree2afe372acde921cb57ddb3444ff00c5adef8848c /deps/v8/tools
parent13245dc50da4cb7443c39ef6c68d419d5e6336d4 (diff)
downloadandroid-node-v8-0e7ddbd3d7e9439c67573b854c49cf82c398ae82.tar.gz
android-node-v8-0e7ddbd3d7e9439c67573b854c49cf82c398ae82.tar.bz2
android-node-v8-0e7ddbd3d7e9439c67573b854c49cf82c398ae82.zip
deps: update V8 to 7.0.276.20
PR-URL: https://github.com/nodejs/node/pull/22754 Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Refael Ackermann <refack@gmail.com> Reviewed-By: Ali Ijaz Sheikh <ofrobots@google.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Diffstat (limited to 'deps/v8/tools')
-rw-r--r--deps/v8/tools/BUILD.gn17
-rw-r--r--deps/v8/tools/callstats.py.vpython43
-rw-r--r--deps/v8/tools/clusterfuzz/testdata/failure_output.txt4
-rwxr-xr-xdeps/v8/tools/clusterfuzz/v8_foozzie.py29
-rwxr-xr-xdeps/v8/tools/clusterfuzz/v8_foozzie_test.py2
-rw-r--r--deps/v8/tools/clusterfuzz/v8_fuzz_config.py10
-rw-r--r--deps/v8/tools/csvparser.js3
-rwxr-xr-xdeps/v8/tools/eval_gc_time.sh1
-rw-r--r--deps/v8/tools/gcmole/BUILD.gn1
-rw-r--r--deps/v8/tools/gdbinit20
-rwxr-xr-xdeps/v8/tools/generate-header-include-checks.py156
-rwxr-xr-xdeps/v8/tools/grokdump.py5
-rw-r--r--deps/v8/tools/heap-stats/categories.js21
-rw-r--r--deps/v8/tools/heap-stats/trace-file-reader.js13
-rw-r--r--deps/v8/tools/ic-processor.js5
-rw-r--r--deps/v8/tools/map-processor.js10
-rwxr-xr-xdeps/v8/tools/node/node_common.py5
-rw-r--r--deps/v8/tools/predictable_wrapper.py4
-rw-r--r--deps/v8/tools/profile.js27
-rw-r--r--deps/v8/tools/profview/index.html2
-rw-r--r--deps/v8/tools/profview/profview.css23
-rw-r--r--deps/v8/tools/profview/profview.js300
-rwxr-xr-xdeps/v8/tools/release/create_release.py3
-rwxr-xr-xdeps/v8/tools/release/filter_build_files.py2
-rw-r--r--deps/v8/tools/release/git_recipes.py6
-rwxr-xr-xdeps/v8/tools/release/test_scripts.py2
-rwxr-xr-xdeps/v8/tools/run_perf.py264
-rw-r--r--deps/v8/tools/testrunner/base_runner.py23
-rw-r--r--deps/v8/tools/testrunner/local/android.py207
-rw-r--r--deps/v8/tools/testrunner/local/command.py113
-rw-r--r--deps/v8/tools/testrunner/local/statusfile.py2
-rw-r--r--deps/v8/tools/testrunner/objects/testcase.py11
-rw-r--r--deps/v8/tools/testrunner/outproc/base.py6
-rw-r--r--deps/v8/tools/testrunner/testproc/filter.py20
-rw-r--r--deps/v8/tools/tickprocessor.js2
-rw-r--r--deps/v8/tools/torque/vim-torque/README.md33
-rw-r--r--deps/v8/tools/torque/vim-torque/ftdetect/torque.vim1
-rw-r--r--deps/v8/tools/torque/vim-torque/syntax/torque.vim84
-rwxr-xr-xdeps/v8/tools/try_perf.py3
-rwxr-xr-xdeps/v8/tools/unittests/run_perf_test.py12
-rw-r--r--deps/v8/tools/unittests/testdata/test1.json1
-rw-r--r--deps/v8/tools/unittests/testdata/test2.json1
-rw-r--r--deps/v8/tools/unittests/testdata/test3.json1
-rw-r--r--deps/v8/tools/unittests/testdata/testroot1/v8_build_config.json1
-rw-r--r--deps/v8/tools/unittests/testdata/testroot2/v8_build_config.json1
-rw-r--r--deps/v8/tools/v8heapconst.py372
-rw-r--r--deps/v8/tools/whitespace.txt5
47 files changed, 1235 insertions, 642 deletions
diff --git a/deps/v8/tools/BUILD.gn b/deps/v8/tools/BUILD.gn
index 29d7b273f0..05c382e2f6 100644
--- a/deps/v8/tools/BUILD.gn
+++ b/deps/v8/tools/BUILD.gn
@@ -25,9 +25,26 @@ group("v8_check_static_initializers") {
]
}
+group("v8_android_test_runner_deps") {
+ testonly = true
+
+ if (is_android && !build_with_chromium) {
+ data_deps = [
+ "../build/android:test_runner_py",
+ ]
+ data = [
+ # This is used by android.py, but not included by test_runner_py above.
+ "../third_party/catapult/devil/devil/android/perf/",
+ ]
+ }
+}
+
group("v8_testrunner") {
+ testonly = true
+
data_deps = [
"..:v8_dump_build_config",
+ ":v8_android_test_runner_deps",
]
data = [
diff --git a/deps/v8/tools/callstats.py.vpython b/deps/v8/tools/callstats.py.vpython
new file mode 100644
index 0000000000..11e3f34ef6
--- /dev/null
+++ b/deps/v8/tools/callstats.py.vpython
@@ -0,0 +1,43 @@
+# This is a vpython "spec" file.
+#
+# It describes patterns for python wheel dependencies of the python scripts in
+# the callstats.py, particularly for dependencies that have compiled components
+# (since pure-python dependencies can be easily vendored into third_party).
+#
+# When vpython is invoked, it finds this file and builds a python VirtualEnv,
+# containing all of the dependencies described in this file, fetching them from
+# CIPD (the "Chrome Infrastructure Package Deployer" service). Unlike `pip`,
+# this never requires the end-user machine to have a working python extension
+# compilation environment. All of these packages are built using:
+# https://chromium.googlesource.com/infra/infra/+/master/infra/tools/dockerbuild/
+#
+# All python scripts in the repo share this same spec, to avoid dependency
+# fragmentation.
+#
+# If you have depot_tools installed in your $PATH, you can invoke python scripts
+# in this repo by running them as you normally would run them, except
+# substituting `vpython` instead of `python` on the command line, e.g.:
+# vpython path/to/script.py some --arguments
+#
+# Read more about `vpython` and how to modify this file here:
+# https://chromium.googlesource.com/infra/infra/+/master/doc/users/vpython.md
+
+python_version: "2.7"
+
+wheel: <
+ name: "infra/python/wheels/numpy/${vpython_platform}"
+ version: "version:1.11.3"
+>
+
+wheel: <
+ name: "infra/python/wheels/scipy/${vpython_platform}"
+ version: "version:0.19.0"
+ match_tag: <
+ abi: "cp27mu"
+ platform: "manylinux1_i686"
+ >
+ match_tag: <
+ abi: "cp27mu"
+ platform: "manylinux1_x86_64"
+ >
+>
diff --git a/deps/v8/tools/clusterfuzz/testdata/failure_output.txt b/deps/v8/tools/clusterfuzz/testdata/failure_output.txt
index 5eacc59f32..49431aec30 100644
--- a/deps/v8/tools/clusterfuzz/testdata/failure_output.txt
+++ b/deps/v8/tools/clusterfuzz/testdata/failure_output.txt
@@ -9,9 +9,9 @@
# Compared x64,ignition with x64,ignition_turbo
#
# Flags of x64,ignition:
---abort_on_stack_or_string_length_overflow --expose-gc --allow-natives-syntax --invoke-weak-callbacks --omit-quit --es-staging --wasm-num-compilation-tasks=0 --random-seed 12345 --turbo-filter=~ --noopt --suppress-asm-messages
+--abort_on_stack_or_string_length_overflow --expose-gc --allow-natives-syntax --invoke-weak-callbacks --omit-quit --es-staging --wasm-num-compilation-tasks=0 --suppress-asm-messages --random-seed 12345 --turbo-filter=~ --noopt --liftoff --no-wasm-tier-up
# Flags of x64,ignition_turbo:
---abort_on_stack_or_string_length_overflow --expose-gc --allow-natives-syntax --invoke-weak-callbacks --omit-quit --es-staging --wasm-num-compilation-tasks=0 --random-seed 12345 --suppress-asm-messages --stress-scavenge=100
+--abort_on_stack_or_string_length_overflow --expose-gc --allow-natives-syntax --invoke-weak-callbacks --omit-quit --es-staging --wasm-num-compilation-tasks=0 --suppress-asm-messages --random-seed 12345 --stress-scavenge=100
#
# Difference:
- unknown
diff --git a/deps/v8/tools/clusterfuzz/v8_foozzie.py b/deps/v8/tools/clusterfuzz/v8_foozzie.py
index 28685845bb..6fcd49f209 100755
--- a/deps/v8/tools/clusterfuzz/v8_foozzie.py
+++ b/deps/v8/tools/clusterfuzz/v8_foozzie.py
@@ -21,63 +21,49 @@ import v8_commands
import v8_suppressions
CONFIGS = dict(
- default=[
- '--suppress-asm-messages',
- ],
+ default=[],
ignition=[
'--turbo-filter=~',
'--noopt',
- '--suppress-asm-messages',
+ '--liftoff',
+ '--no-wasm-tier-up',
],
ignition_asm=[
'--turbo-filter=~',
'--noopt',
'--validate-asm',
'--stress-validate-asm',
- '--suppress-asm-messages',
],
ignition_eager=[
'--turbo-filter=~',
'--noopt',
'--no-lazy',
'--no-lazy-inner-functions',
- '--suppress-asm-messages',
- ],
- ignition_turbo=[
- '--suppress-asm-messages',
],
+ ignition_turbo=[],
ignition_turbo_opt=[
'--always-opt',
- '--suppress-asm-messages',
+ '--no-liftoff',
+ '--no-wasm-tier-up',
],
ignition_turbo_opt_eager=[
'--always-opt',
'--no-lazy',
'--no-lazy-inner-functions',
- '--suppress-asm-messages',
- ],
- liftoff=[
- '--liftoff',
- '--no-wasm-tier-up',
- '--suppress-asm-messages',
],
slow_path=[
'--force-slow-path',
- '--suppress-asm-messages',
],
slow_path_opt=[
'--always-opt',
'--force-slow-path',
- '--suppress-asm-messages',
],
trusted=[
'--no-untrusted-code-mitigations',
- '--suppress-asm-messages',
],
trusted_opt=[
'--always-opt',
'--no-untrusted-code-mitigations',
- '--suppress-asm-messages',
],
)
@@ -107,7 +93,8 @@ ARCH_MOCKS = os.path.join(BASE_PATH, 'v8_mock_archs.js')
FLAGS = ['--abort_on_stack_or_string_length_overflow', '--expose-gc',
'--allow-natives-syntax', '--invoke-weak-callbacks', '--omit-quit',
- '--es-staging', '--wasm-num-compilation-tasks=0']
+ '--es-staging', '--wasm-num-compilation-tasks=0',
+ '--suppress-asm-messages']
SUPPORTED_ARCHS = ['ia32', 'x64', 'arm', 'arm64']
diff --git a/deps/v8/tools/clusterfuzz/v8_foozzie_test.py b/deps/v8/tools/clusterfuzz/v8_foozzie_test.py
index 9f6dd33c54..3b95111271 100755
--- a/deps/v8/tools/clusterfuzz/v8_foozzie_test.py
+++ b/deps/v8/tools/clusterfuzz/v8_foozzie_test.py
@@ -39,7 +39,7 @@ class ConfigTest(unittest.TestCase):
self.assertEqual(
[
'--first-config=ignition',
- '--second-config=ignition_turbo_opt',
+ '--second-config=ignition_turbo',
'--second-d8=d8',
],
v8_fuzz_config.Config('foo', Rng()).choose_foozzie_flags(),
diff --git a/deps/v8/tools/clusterfuzz/v8_fuzz_config.py b/deps/v8/tools/clusterfuzz/v8_fuzz_config.py
index 24bbf8f43d..8cc1939e38 100644
--- a/deps/v8/tools/clusterfuzz/v8_fuzz_config.py
+++ b/deps/v8/tools/clusterfuzz/v8_fuzz_config.py
@@ -13,15 +13,13 @@ FOOZZIE_EXPERIMENTS = [
[5, 'ignition', 'trusted_opt', 'd8'],
[10, 'ignition', 'slow_path', 'd8'],
[5, 'ignition', 'slow_path_opt', 'd8'],
- [20, 'ignition', 'ignition_turbo', 'd8'],
+ [25, 'ignition', 'ignition_turbo', 'd8'],
[20, 'ignition', 'ignition_turbo_opt', 'd8'],
- [4, 'ignition_turbo_opt', 'ignition_turbo_opt', 'clang_x86/d8'],
- [4, 'ignition_turbo', 'ignition_turbo', 'clang_x86/d8'],
- [4, 'ignition', 'ignition', 'clang_x86/d8'],
+ [5, 'ignition_turbo_opt', 'ignition_turbo_opt', 'clang_x86/d8'],
+ [5, 'ignition_turbo', 'ignition_turbo', 'clang_x86/d8'],
+ [5, 'ignition', 'ignition', 'clang_x86/d8'],
[5, 'ignition', 'ignition', 'clang_x64_v8_arm64/d8'],
[5, 'ignition', 'ignition', 'clang_x86_v8_arm/d8'],
- [5, 'ignition', 'liftoff', 'd8'],
- [3, 'liftoff', 'liftoff', 'clang_x86/d8'],
]
class Config(object):
diff --git a/deps/v8/tools/csvparser.js b/deps/v8/tools/csvparser.js
index f0f8680cf8..bd106a7a41 100644
--- a/deps/v8/tools/csvparser.js
+++ b/deps/v8/tools/csvparser.js
@@ -49,6 +49,9 @@ class CsvParser {
if (escapeIdentifier == 'n') {
result += '\n';
nextPos = pos;
+ } else if (escapeIdentifier == '\\') {
+ result += '\\';
+ nextPos = pos;
} else {
if (escapeIdentifier == 'x') {
// \x00 ascii range escapes consume 2 chars.
diff --git a/deps/v8/tools/eval_gc_time.sh b/deps/v8/tools/eval_gc_time.sh
index 9abc93a95f..f809c3579f 100755
--- a/deps/v8/tools/eval_gc_time.sh
+++ b/deps/v8/tools/eval_gc_time.sh
@@ -94,7 +94,6 @@ INTERESTING_OLD_GEN_KEYS="\
clear.slots_buffer \
clear.store_buffer \
clear.string_table \
- clear.weak_cells \
clear.weak_collections \
clear.weak_lists \
evacuate.candidates \
diff --git a/deps/v8/tools/gcmole/BUILD.gn b/deps/v8/tools/gcmole/BUILD.gn
index 99b5c0aea7..f10667e6c2 100644
--- a/deps/v8/tools/gcmole/BUILD.gn
+++ b/deps/v8/tools/gcmole/BUILD.gn
@@ -20,6 +20,7 @@ group("v8_run_gcmole") {
"../../include/",
"../../src/",
"../../test/cctest/",
+ "../../test/common/",
"../../testing/gtest/include/gtest/gtest_prod.h",
"../../third_party/googletest/src/googletest/include/gtest/gtest_prod.h",
"../../third_party/icu/source/",
diff --git a/deps/v8/tools/gdbinit b/deps/v8/tools/gdbinit
index ced0a82096..cea0f07b1e 100644
--- a/deps/v8/tools/gdbinit
+++ b/deps/v8/tools/gdbinit
@@ -122,3 +122,23 @@ end
set disassembly-flavor intel
set disable-randomization off
+
+# Install a handler whenever the debugger stops due to a signal. It walks up the
+# stack looking for V8_Dcheck and moves the frame to the one above it so it's
+# immediately at the line of code that triggered the DCHECK.
+python
+def dcheck_stop_handler(event):
+ orig_frame = gdb.selected_frame()
+ frame = orig_frame
+ select_frame = None
+ while frame is not None:
+ if frame.name() in ('V8_Dcheck', 'V8_Fatal'):
+ select_frame = frame.older()
+ frame = frame.older()
+
+ if select_frame is not None:
+ select_frame.select()
+ gdb.execute('frame')
+
+gdb.events.stop.connect(dcheck_stop_handler)
+end
diff --git a/deps/v8/tools/generate-header-include-checks.py b/deps/v8/tools/generate-header-include-checks.py
new file mode 100755
index 0000000000..ca3b0079ca
--- /dev/null
+++ b/deps/v8/tools/generate-header-include-checks.py
@@ -0,0 +1,156 @@
+#!/usr/bin/env python
+# vim:fenc=utf-8:shiftwidth=2
+
+# Copyright 2018 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.
+
+"""Check that each header can be included in isolation.
+
+For each header we generate one .cc file which only includes this one header.
+All these .cc files are then added to a sources.gni file which is included in
+BUILD.gn. Just compile to check whether there are any violations to the rule
+that each header must be includable in isolation.
+"""
+
+import argparse
+import os
+import os.path
+import re
+import sys
+
+# TODO(clemensh): Extend to tests.
+DEFAULT_INPUT = ['base', 'src']
+DEFAULT_GN_FILE = 'BUILD.gn'
+MY_DIR = os.path.dirname(os.path.realpath(__file__))
+V8_DIR = os.path.dirname(MY_DIR)
+OUT_DIR = os.path.join(V8_DIR, 'check-header-includes')
+AUTO_EXCLUDE = [
+ # flag-definitions.h needs a mode set for being included.
+ 'src/flag-definitions.h',
+ # blacklist of headers we need to fix (https://crbug.com/v8/7965).
+ 'src/allocation-site-scopes.h',
+ 'src/compiler/allocation-builder.h',
+ 'src/compiler/js-context-specialization.h',
+ 'src/compiler/raw-machine-assembler.h',
+ 'src/dateparser-inl.h',
+ 'src/heap/incremental-marking.h',
+ 'src/ic/ic.h',
+ 'src/lookup.h',
+ 'src/parsing/parser.h',
+ 'src/parsing/preparser.h',
+ 'src/regexp/jsregexp.h',
+ 'src/snapshot/object-deserializer.h',
+ 'src/transitions.h',
+]
+AUTO_EXCLUDE_PATTERNS = [
+ 'src/base/atomicops_internals_.*',
+] + [
+ # platform-specific headers
+ '\\b{}\\b'.format(p) for p in
+ ('win32', 'ia32', 'x64', 'arm', 'arm64', 'mips', 'mips64', 's390', 'ppc')]
+
+args = None
+def parse_args():
+ global args
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-i', '--input', type=str, action='append',
+ help='Headers or directories to check (directories '
+ 'are scanned for headers recursively); default: ' +
+ ','.join(DEFAULT_INPUT))
+ parser.add_argument('-x', '--exclude', type=str, action='append',
+ help='Add an exclude pattern (regex)')
+ parser.add_argument('-v', '--verbose', action='store_true',
+ help='Be verbose')
+ args = parser.parse_args()
+ args.exclude = (args.exclude or []) + AUTO_EXCLUDE_PATTERNS
+ args.exclude += ['^' + re.escape(x) + '$' for x in AUTO_EXCLUDE]
+ if not args.input:
+ args.input=DEFAULT_INPUT
+
+
+def printv(line):
+ if args.verbose:
+ print line
+
+
+def find_all_headers():
+ printv('Searching for headers...')
+ header_files = []
+ exclude_patterns = [re.compile(x) for x in args.exclude]
+ def add_recursively(filename):
+ full_name = os.path.join(V8_DIR, filename)
+ if not os.path.exists(full_name):
+ sys.exit('File does not exist: {}'.format(full_name))
+ if os.path.isdir(full_name):
+ for subfile in os.listdir(full_name):
+ full_name = os.path.join(filename, subfile)
+ printv('Scanning {}'.format(full_name))
+ add_recursively(full_name)
+ elif filename.endswith('.h'):
+ printv('--> Found header file {}'.format(filename))
+ for p in exclude_patterns:
+ if p.search(filename):
+ printv('--> EXCLUDED (matches {})'.format(p.pattern))
+ return
+ header_files.append(filename)
+
+ for filename in args.input:
+ add_recursively(filename)
+
+ return header_files
+
+
+def get_cc_file_name(header):
+ split = os.path.split(header)
+ header_dir = os.path.relpath(split[0], V8_DIR)
+ # Prefix with the directory name, to avoid collisions in the object files.
+ prefix = header_dir.replace(os.path.sep, '-')
+ cc_file_name = 'test-include-' + prefix + '-' + split[1][:-1] + 'cc'
+ return os.path.join(OUT_DIR, cc_file_name)
+
+
+def create_including_cc_files(header_files):
+ comment = 'check including this header in isolation'
+ for header in header_files:
+ cc_file_name = get_cc_file_name(header)
+ rel_cc_file_name = os.path.relpath(cc_file_name, V8_DIR)
+ content = '#include "{}" // {}\n'.format(header, comment)
+ if os.path.exists(cc_file_name):
+ with open(cc_file_name) as cc_file:
+ if cc_file.read() == content:
+ printv('File {} is up to date'.format(rel_cc_file_name))
+ continue
+ printv('Creating file {}'.format(rel_cc_file_name))
+ with open(cc_file_name, 'w') as cc_file:
+ cc_file.write(content)
+
+
+def generate_gni(header_files):
+ gni_file = os.path.join(OUT_DIR, 'sources.gni')
+ printv('Generating file "{}"'.format(os.path.relpath(gni_file, V8_DIR)))
+ with open(gni_file, 'w') as gn:
+ gn.write("""\
+# Copyright 2018 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# This list is filled automatically by tools/check_header_includes.py.
+check_header_includes_sources = [
+""");
+ for header in header_files:
+ cc_file_name = get_cc_file_name(header)
+ gn.write(' "{}",\n'.format(os.path.relpath(cc_file_name, V8_DIR)))
+ gn.write(']\n')
+
+
+def main():
+ parse_args()
+ header_files = find_all_headers()
+ if not os.path.exists(OUT_DIR):
+ os.mkdir(OUT_DIR)
+ create_including_cc_files(header_files)
+ generate_gni(header_files)
+
+if __name__ == '__main__':
+ main()
diff --git a/deps/v8/tools/grokdump.py b/deps/v8/tools/grokdump.py
index 75e80fef90..60215857c0 100755
--- a/deps/v8/tools/grokdump.py
+++ b/deps/v8/tools/grokdump.py
@@ -761,7 +761,7 @@ class MinidumpReader(object):
def IsValidExceptionStackAddress(self, address):
if not self.IsValidAddress(address): return False
- return self.isExceptionStackAddress(address)
+ return self.IsExceptionStackAddress(address)
def IsModuleAddress(self, address):
return self.GetModuleForAddress(address) != None
@@ -1231,9 +1231,6 @@ class Map(HeapObject):
def DependentCodeOffset(self):
return self.CodeCacheOffset() + self.heap.PointerSize()
- def WeakCellCacheOffset(self):
- return self.DependentCodeOffset() + self.heap.PointerSize()
-
def ReadByte(self, offset):
return self.heap.reader.ReadU8(self.address + offset)
diff --git a/deps/v8/tools/heap-stats/categories.js b/deps/v8/tools/heap-stats/categories.js
index fd3e5f1497..4ede5e9a45 100644
--- a/deps/v8/tools/heap-stats/categories.js
+++ b/deps/v8/tools/heap-stats/categories.js
@@ -76,6 +76,8 @@ const CATEGORIES = new Map([
'SHORT_EXTERNAL_STRING_TYPE',
'SLICED_ONE_BYTE_STRING_TYPE',
'SLICED_STRING_TYPE',
+ 'STRING_EXTERNAL_RESOURCE_ONE_BYTE_TYPE',
+ 'STRING_EXTERNAL_RESOURCE_TWO_BYTE_TYPE',
'STRING_TYPE',
'SYMBOL_TYPE',
'THIN_ONE_BYTE_STRING_TYPE',
@@ -134,20 +136,16 @@ const CATEGORIES = new Map([
'STRING_SPLIT_CACHE_TYPE',
'STRING_TABLE_TYPE',
'TRANSITION_ARRAY_TYPE',
- 'WEAK_CELL_TYPE',
'WEAK_NEW_SPACE_OBJECT_TO_CODE_TYPE',
])
],
[
'code', new Set([
'BUILTIN',
- 'BYTECODE_HANDLER',
- 'OPTIMIZED_FUNCTION',
- 'REGEXP',
- 'STUB',
'BYTECODE_ARRAY_CONSTANT_POOL_TYPE',
'BYTECODE_ARRAY_HANDLER_TABLE_TYPE',
'BYTECODE_ARRAY_TYPE',
+ 'BYTECODE_HANDLER',
'CODE_DATA_CONTAINER_TYPE',
'DEOPTIMIZATION_DATA_TYPE',
'EMBEDDED_OBJECT_TYPE',
@@ -167,15 +165,24 @@ const CATEGORIES = new Map([
'LOAD_HANDLER_TYPE',
'NOSCRIPT_SHARED_FUNCTION_INFOS_TYPE',
'OPTIMIZED_CODE_LITERALS_TYPE',
+ 'OPTIMIZED_FUNCTION',
+ 'PRE_PARSED_SCOPE_DATA_TYPE',
+ 'REGEXP',
'RELOC_INFO_TYPE',
+ 'SCRIPT_SOURCE_EXTERNAL_ONE_BYTE_TYPE',
+ 'SCRIPT_SOURCE_EXTERNAL_TWO_BYTE_TYPE',
'SCRIPT_SOURCE_EXTERNAL_TYPE',
- 'SCRIPT_SOURCE_NON_EXTERNAL_TYPE',
+ 'SCRIPT_SOURCE_NON_EXTERNAL_ONE_BYTE_TYPE',
+ 'SCRIPT_SOURCE_NON_EXTERNAL_TWO_BYTE_TYPE',
'SCRIPT_TYPE',
'SHARED_FUNCTION_INFO_TYPE',
'SOURCE_POSITION_TABLE_TYPE',
'STORE_HANDLER_TYPE',
+ 'STUB',
+ 'UNCOMPILED_DATA_WITHOUT_PRE_PARSED_SCOPE_TYPE',
+ 'UNCOMPILED_DATA_WITH_PRE_PARSED_SCOPE_TYPE',
'UNCOMPILED_JS_FUNCTION_TYPE',
- 'UNCOMPILED_SHARED_FUNCTION_INFO_TYPE',
+ 'UNCOMPILED_SHARED_FUNCTION_INFO_TYPE'
])
],
['unclassified', new Set()],
diff --git a/deps/v8/tools/heap-stats/trace-file-reader.js b/deps/v8/tools/heap-stats/trace-file-reader.js
index 03684978de..5c244a5e92 100644
--- a/deps/v8/tools/heap-stats/trace-file-reader.js
+++ b/deps/v8/tools/heap-stats/trace-file-reader.js
@@ -80,7 +80,16 @@ class TraceFileReader extends HTMLElement {
// Delay the loading a bit to allow for CSS animations to happen.
setTimeout(() => reader.readAsArrayBuffer(file), 10);
} else {
- reader.onload = (e) => this.processRawText(file, e.target.result);
+ reader.onload = (e) => {
+ try {
+ this.processRawText(file, e.target.result);
+ this.section.className = 'success';
+ this.$('#fileReader').classList.add('done');
+ } catch (err) {
+ console.error(err);
+ this.section.className = 'failure';
+ }
+ };
setTimeout(() => reader.readAsText(file), 10);
}
}
@@ -240,7 +249,7 @@ class TraceFileReader extends HTMLElement {
line = line.replace(/^I\/v8\s*\(\d+\):\s+/g, '');
return JSON.parse(line);
} catch (e) {
- console.log('Unable to parse line: \'' + line + '\'\' (' + e + ')');
+ console.log('Unable to parse line: \'' + line + '\' (' + e + ')');
}
return null;
});
diff --git a/deps/v8/tools/ic-processor.js b/deps/v8/tools/ic-processor.js
index 14f875bfdc..db1eef4295 100644
--- a/deps/v8/tools/ic-processor.js
+++ b/deps/v8/tools/ic-processor.js
@@ -61,7 +61,6 @@ function IcProcessor() {
parsers : propertyICParser,
processor: this.processPropertyIC.bind(this, "StoreInArrayLiteralIC") },
});
- this.deserializedEntriesNames_ = [];
this.profile_ = new Profile();
this.LoadIC = 0;
@@ -118,10 +117,6 @@ IcProcessor.prototype.addEntry = function(entry) {
IcProcessor.prototype.processCodeCreation = function(
type, kind, timestamp, start, size, name, maybe_func) {
- name = this.deserializedEntriesNames_[start] || name;
- if (name.startsWith("onComplete")) {
- console.log(name);
- }
if (maybe_func.length) {
var funcAddr = parseInt(maybe_func[0]);
var state = parseState(maybe_func[1]);
diff --git a/deps/v8/tools/map-processor.js b/deps/v8/tools/map-processor.js
index d7385cb6e9..c0731e8555 100644
--- a/deps/v8/tools/map-processor.js
+++ b/deps/v8/tools/map-processor.js
@@ -39,7 +39,6 @@ class MapProcessor extends LogReader {
processor: this.processMapDetails
}
};
- this.deserializedEntriesNames_ = [];
this.profile_ = new Profile();
this.timeline_ = new Timeline();
}
@@ -66,7 +65,7 @@ class MapProcessor extends LogReader {
this.processLogLine(line);
}
} catch(e) {
- console.log("Error occurred during parsing, trying to continue: " + e);
+ console.error("Error occurred during parsing, trying to continue: " + e);
}
return this.finalize();
}
@@ -108,10 +107,6 @@ class MapProcessor extends LogReader {
processCodeCreation(
type, kind, timestamp, start, size, name, maybe_func) {
- name = this.deserializedEntriesNames_[start] || name;
- if (name.startsWith("onComplete")) {
- console.log(name);
- }
if (maybe_func.length) {
let funcAddr = parseInt(maybe_func[0]);
let state = this.parseState(maybe_func[1]);
@@ -180,9 +175,6 @@ class MapProcessor extends LogReader {
}
createMap(id, time) {
- if (id == 0x1821257d1761) {
- console.log(id);
- }
let map = new V8Map(id, time);
this.timeline_.push(map);
return map;
diff --git a/deps/v8/tools/node/node_common.py b/deps/v8/tools/node/node_common.py
index de2e98d909..172e9df812 100755
--- a/deps/v8/tools/node/node_common.py
+++ b/deps/v8/tools/node/node_common.py
@@ -8,6 +8,7 @@ import pipes
import shutil
import stat
import subprocess
+import sys
DEPOT_TOOLS_URL = \
"https://chromium.googlesource.com/chromium/tools/depot_tools.git"
@@ -27,6 +28,10 @@ def EnsureDepotTools(v8_path, fetch_if_not_exist):
subprocess.check_call("git clone {} {}".format(
pipes.quote(DEPOT_TOOLS_URL),
pipes.quote(depot_tools)), shell=True)
+ # Using check_output to hide warning messages.
+ subprocess.check_output(
+ [sys.executable, gclient_path, "metrics", "--opt-out"],
+ cwd=depot_tools)
return depot_tools
return None
depot_tools = _Get(v8_path)
diff --git a/deps/v8/tools/predictable_wrapper.py b/deps/v8/tools/predictable_wrapper.py
index c357c13b41..2299a5195e 100644
--- a/deps/v8/tools/predictable_wrapper.py
+++ b/deps/v8/tools/predictable_wrapper.py
@@ -17,10 +17,14 @@ compared. Differences are reported as errors.
import sys
from testrunner.local import command
+from testrunner.local import utils
MAX_TRIES = 3
TIMEOUT = 120
+# Predictable mode works only when run on the host os.
+command.setup(utils.GuessOS())
+
def main(args):
def allocation_str(stdout):
for line in reversed((stdout or '').splitlines()):
diff --git a/deps/v8/tools/profile.js b/deps/v8/tools/profile.js
index cddadaaf53..74b4b3bf66 100644
--- a/deps/v8/tools/profile.js
+++ b/deps/v8/tools/profile.js
@@ -1002,33 +1002,10 @@ JsonProfile.prototype.addSourcePositions = function(
};
};
-function unescapeString(s) {
- s = s.split("\\");
- for (var i = 1; i < s.length; i++) {
- if (s[i] === "") {
- // Double backslash.
- s[i] = "\\";
- } else if (i > 0 && s[i].startsWith("x")) {
- // Escaped Ascii character.
- s[i] = String.fromCharCode(parseInt(s[i].substring(1, 3), 16)) +
- s[i].substring(3);
- } else if (i > 0 && s[i].startsWith("u")) {
- // Escaped unicode character.
- s[i] = String.fromCharCode(parseInt(s[i].substring(1, 5), 16)) +
- s[i].substring(5);
- } else {
- if (i > 0 && s[i - 1] !== "\\") {
- printErr("Malformed source string");
- }
- }
- }
- return s.join("");
-}
-
JsonProfile.prototype.addScriptSource = function(script, url, source) {
this.scripts_[script] = {
- name : unescapeString(url),
- source : unescapeString(source)
+ name : url,
+ source : source
};
};
diff --git a/deps/v8/tools/profview/index.html b/deps/v8/tools/profview/index.html
index 32f7c7b70f..957b6d04d6 100644
--- a/deps/v8/tools/profview/index.html
+++ b/deps/v8/tools/profview/index.html
@@ -108,7 +108,7 @@ found in the LICENSE file. -->
<br>
<br>
<br>
-Copyright the V8 Authors - Last change to this page: 2017/02/15
+Copyright the V8 Authors - Last change to this page: 2018/08/13
</p>
</body>
diff --git a/deps/v8/tools/profview/profview.css b/deps/v8/tools/profview/profview.css
index 106bfe2885..eb77ef14d8 100644
--- a/deps/v8/tools/profview/profview.css
+++ b/deps/v8/tools/profview/profview.css
@@ -2,6 +2,11 @@ table.calltree {
width : 100%;
}
+td {
+ padding-top: 0.1em;
+ padding-bottom: 0.1em;
+}
+
.numeric {
width : 12ex;
}
@@ -14,27 +19,25 @@ body {
font-family: 'Roboto', sans-serif;
}
-div.code-type-chip {
- display : inline-block;
- padding : 0.0em;
+.tree-row-arrow {
+ margin-right: 0.2em;
+ text-align: right;
}
-span.code-type-chip {
+.code-type-chip {
border-radius : 1em;
- display : inline-block;
- padding : 0.1em;
+ padding : 0.2em;
background-color : #4040c0;
color: #ffffff;
font-size : small;
box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12);
}
-span.code-type-chip-space {
- width : 0.5ex;
- display : inline-block;
+.tree-row-name {
+ margin-left: 0.2em;
}
-span.codeid-link {
+.codeid-link {
text-decoration: underline;
cursor: pointer;
}
diff --git a/deps/v8/tools/profview/profview.js b/deps/v8/tools/profview/profview.js
index d480cd4a77..e976b00be3 100644
--- a/deps/v8/tools/profview/profview.js
+++ b/deps/v8/tools/profview/profview.js
@@ -8,28 +8,27 @@ function $(id) {
return document.getElementById(id);
}
-let components = [];
-
+let components;
function createViews() {
- components.push(new CallTreeView());
- components.push(new TimelineView());
- components.push(new HelpView());
- components.push(new SummaryView());
- components.push(new ModeBarView());
-
- main.setMode("summary");
+ components = [
+ new CallTreeView(),
+ new TimelineView(),
+ new HelpView(),
+ new SummaryView(),
+ new ModeBarView(),
+ ];
}
function emptyState() {
return {
file : null,
- mode : "none",
+ mode : null,
currentCodeId : null,
start : 0,
end : Infinity,
- timeLine : {
- width : 100,
- height : 100
+ timelineSize : {
+ width : 0,
+ height : 0
},
callTree : {
attribution : "js-exclude-bc",
@@ -120,22 +119,12 @@ let main = {
}
},
- setTimeLineDimensions(width, height) {
- if (width !== main.currentState.timeLine.width ||
- height !== main.currentState.timeLine.height) {
- let timeLine = Object.assign({}, main.currentState.timeLine);
- timeLine.width = width;
- timeLine.height = height;
- main.currentState = Object.assign({}, main.currentState);
- main.currentState.timeLine = timeLine;
- main.delayRender();
- }
- },
-
setFile(file) {
if (file !== main.currentState.file) {
- main.currentState = Object.assign({}, main.currentState);
+ let lastMode = main.currentState.mode || "summary";
+ main.currentState = emptyState();
main.currentState.file = file;
+ main.setMode(lastMode);
main.delayRender();
}
},
@@ -149,9 +138,7 @@ let main = {
},
onResize() {
- main.setTimeLineDimensions(
- Math.round(window.innerWidth - 20),
- Math.round(window.innerHeight / 5));
+ main.delayRender();
},
onLoad() {
@@ -160,9 +147,7 @@ let main = {
if (f) {
let reader = new FileReader();
reader.onload = function(event) {
- let profData = JSON.parse(event.target.result);
- main.setViewInterval(0, Infinity);
- main.setFile(profData);
+ main.setFile(JSON.parse(event.target.result));
};
reader.onerror = function(event) {
console.error(
@@ -176,7 +161,6 @@ let main = {
$("fileinput").addEventListener(
"change", loadHandler, false);
createViews();
- main.onResize();
},
delayRender() {
@@ -188,50 +172,51 @@ let main = {
}
};
-let bucketDescriptors =
+const CATEGORY_COLOR = "#f5f5f5";
+const bucketDescriptors =
[ { kinds : [ "JSOPT" ],
- color : "#00ff00",
- backgroundColor : "#c0ffc0",
+ color : "#64dd17",
+ backgroundColor : "#80e27e",
text : "JS Optimized" },
{ kinds : [ "JSUNOPT", "BC" ],
- color : "#ffb000",
- backgroundColor : "#ffe0c0",
+ color : "#dd2c00",
+ backgroundColor : "#ff9e80",
text : "JS Unoptimized" },
{ kinds : [ "IC" ],
- color : "#ffff00",
- backgroundColor : "#ffffc0",
+ color : "#ff6d00",
+ backgroundColor : "#ffab40",
text : "IC" },
{ kinds : [ "STUB", "BUILTIN", "REGEXP" ],
- color : "#ffb0b0",
- backgroundColor : "#fff0f0",
+ color : "#ffd600",
+ backgroundColor : "#ffea00",
text : "Other generated" },
{ kinds : [ "CPP", "LIB" ],
- color : "#0000ff",
- backgroundColor : "#c0c0ff",
+ color : "#304ffe",
+ backgroundColor : "#6ab7ff",
text : "C++" },
{ kinds : [ "CPPEXT" ],
- color : "#8080ff",
- backgroundColor : "#e0e0ff",
+ color : "#003c8f",
+ backgroundColor : "#c0cfff",
text : "C++/external" },
{ kinds : [ "CPPPARSE" ],
- color : "#b890f7",
- backgroundColor : "#ebdeff",
+ color : "#aa00ff",
+ backgroundColor : "#ffb2ff",
text : "C++/Parser" },
{ kinds : [ "CPPCOMPBC" ],
- color : "#52b0ce",
- backgroundColor : "#a5c8d4",
+ color : "#43a047",
+ backgroundColor : "#88c399",
text : "C++/Bytecode compiler" },
{ kinds : [ "CPPCOMP" ],
- color : "#00ffff",
- backgroundColor : "#c0ffff",
+ color : "#00e5ff",
+ backgroundColor : "#6effff",
text : "C++/Compiler" },
{ kinds : [ "CPPGC" ],
- color : "#ff00ff",
- backgroundColor : "#ffc0ff",
+ color : "#6200ea",
+ backgroundColor : "#e1bee7",
text : "C++/GC" },
{ kinds : [ "UNKNOWN" ],
- color : "#f0f0f0",
- backgroundColor : "#e0e0e0",
+ color : "#bdbdbd",
+ backgroundColor : "#efefef",
text : "Unknown" }
];
@@ -260,13 +245,13 @@ function codeTypeToText(type) {
case "UNKNOWN":
return "Unknown";
case "CPPPARSE":
- return "C++ (parser)";
+ return "C++ Parser";
case "CPPCOMPBC":
- return "C++ (bytecode compiler)";
+ return "C++ Bytecode Compiler)";
case "CPPCOMP":
- return "C++ (compiler)";
+ return "C++ Compiler";
case "CPPGC":
- return "C++";
+ return "C++ GC";
case "CPPEXT":
return "C++ External";
case "CPP":
@@ -291,27 +276,15 @@ function codeTypeToText(type) {
console.error("Unknown type: " + type);
}
-function createTypeDiv(type) {
+function createTypeNode(type) {
if (type === "CAT") {
return document.createTextNode("");
}
- let div = document.createElement("div");
- div.classList.add("code-type-chip");
-
let span = document.createElement("span");
span.classList.add("code-type-chip");
span.textContent = codeTypeToText(type);
- div.appendChild(span);
-
- span = document.createElement("span");
- span.classList.add("code-type-chip-space");
- div.appendChild(span);
-
- return div;
-}
-function isBytecodeHandler(kind) {
- return kind === "BytecodeHandler";
+ return span;
}
function filterFromFilterId(id) {
@@ -322,31 +295,42 @@ function filterFromFilterId(id) {
return (type, kind) => type !== 'CODE';
case "js-exclude-bc":
return (type, kind) =>
- type !== 'CODE' || !isBytecodeHandler(kind);
+ type !== 'CODE' || kind !== "BytecodeHandler";
}
}
-function createTableExpander(indent) {
+function createIndentNode(indent) {
let div = document.createElement("div");
- div.style.width = (indent + 0.5) + "em";
div.style.display = "inline-block";
- div.style.textAlign = "right";
+ div.style.width = (indent + 0.5) + "em";
return div;
}
+function createArrowNode() {
+ let span = document.createElement("span");
+ span.classList.add("tree-row-arrow");
+ return span;
+}
+
function createFunctionNode(name, codeId) {
- if (codeId === -1) {
- return document.createTextNode(name);
- }
let nameElement = document.createElement("span");
- nameElement.classList.add("codeid-link");
- nameElement.onclick = function() {
- main.setCurrentCode(codeId);
- };
nameElement.appendChild(document.createTextNode(name));
+ nameElement.classList.add("tree-row-name");
+ if (codeId !== -1) {
+ nameElement.classList.add("codeid-link");
+ nameElement.onclick = (event) => {
+ main.setCurrentCode(codeId);
+ // Prevent the click from bubbling to the row and causing it to
+ // collapse/expand.
+ event.stopPropagation();
+ };
+ }
return nameElement;
}
+const COLLAPSED_ARROW = "\u25B6";
+const EXPANDED_ARROW = "\u25BC";
+
class CallTreeView {
constructor() {
this.element = $("calltree");
@@ -400,22 +384,19 @@ class CallTreeView {
}
expandTree(tree, indent) {
- let that = this;
let index = 0;
let id = "R/";
let row = tree.row;
- let expander = tree.expander;
if (row) {
index = row.rowIndex;
id = row.id;
- // Make sure we collapse the children when the row is clicked
- // again.
- expander.textContent = "\u25BE";
- let expandHandler = expander.onclick;
- expander.onclick = () => {
- that.collapseRow(tree, expander, expandHandler);
+ tree.arrow.textContent = EXPANDED_ARROW;
+ // Collapse the children when the row is clicked again.
+ let expandHandler = row.onclick;
+ row.onclick = () => {
+ this.collapseRow(tree, expandHandler);
}
}
@@ -439,7 +420,9 @@ class CallTreeView {
let row = this.rows.insertRow(index);
row.id = id + i + "/";
- if (node.type !== "CAT") {
+ if (node.type === "CAT") {
+ row.style.backgroundColor = CATEGORY_COLOR;
+ } else {
row.style.backgroundColor = bucketFromKind(node.type).backgroundColor;
}
@@ -460,9 +443,10 @@ class CallTreeView {
// Create the name cell.
let nameCell = row.insertCell();
- let expander = createTableExpander(indent + 1);
- nameCell.appendChild(expander);
- nameCell.appendChild(createTypeDiv(node.type));
+ nameCell.appendChild(createIndentNode(indent + 1));
+ let arrow = createArrowNode();
+ nameCell.appendChild(arrow);
+ nameCell.appendChild(createTypeNode(node.type));
nameCell.appendChild(createFunctionNode(node.name, node.codeId));
// Inclusive ticks cell.
@@ -476,18 +460,18 @@ class CallTreeView {
c.style.textAlign = "right";
}
if (node.children.length > 0) {
- expander.textContent = "\u25B8";
- expander.onclick = () => { that.expandTree(node, indent + 1); };
+ arrow.textContent = COLLAPSED_ARROW;
+ row.onclick = () => { this.expandTree(node, indent + 1); };
}
node.row = row;
- node.expander = expander;
+ node.arrow = arrow;
index++;
}
}
- collapseRow(tree, expander, expandHandler) {
+ collapseRow(tree, expandHandler) {
let row = tree.row;
let id = row.id;
let index = row.rowIndex;
@@ -496,8 +480,8 @@ class CallTreeView {
this.rows.deleteRow(index);
}
- expander.textContent = "\u25B8";
- expander.onclick = expandHandler;
+ tree.arrow.textContent = COLLAPSED_ARROW;
+ row.onclick = expandHandler;
}
fillSelects(mode, calltree) {
@@ -809,10 +793,12 @@ class TimelineView {
return;
}
- this.currentState = newState;
+ let width = Math.round(window.innerWidth - 20);
+ let height = Math.round(window.innerHeight / 5);
+
if (oldState) {
- if (newState.timeLine.width === oldState.timeLine.width &&
- newState.timeLine.height === oldState.timeLine.height &&
+ if (width === oldState.timelineSize.width &&
+ height === oldState.timelineSize.height &&
newState.file === oldState.file &&
newState.currentCodeId === oldState.currentCodeId &&
newState.start === oldState.start &&
@@ -821,21 +807,27 @@ class TimelineView {
return;
}
}
+ this.currentState = newState;
+ this.currentState.timelineSize.width = width;
+ this.currentState.timelineSize.height = height;
this.element.style.display = "inherit";
+ let file = this.currentState.file;
+
+ const minPixelsPerBucket = 10;
+ const minTicksPerBucket = 8;
+ let maxBuckets = Math.round(file.ticks.length / minTicksPerBucket);
+ let bucketCount = Math.min(
+ Math.round(width / minPixelsPerBucket), maxBuckets);
+
// Make sure the canvas has the right dimensions.
- let width = this.currentState.timeLine.width;
- let height = this.currentState.timeLine.height;
this.canvas.width = width;
this.canvas.height = height;
// Make space for the selection text.
height -= this.imageOffset;
- let file = this.currentState.file;
- if (!file) return;
-
let currentCodeId = this.currentState.currentCodeId;
let firstTime = file.ticks[0].tm;
@@ -846,13 +838,6 @@ class TimelineView {
this.selectionStart = (start - firstTime) / (lastTime - firstTime) * width;
this.selectionEnd = (end - firstTime) / (lastTime - firstTime) * width;
- let tickCount = file.ticks.length;
-
- let minBucketPixels = 10;
- let minBucketSamples = 30;
- let bucketCount = Math.min(width / minBucketPixels,
- tickCount / minBucketSamples);
-
let stackProcessor = new CategorySampler(file, bucketCount);
generateTree(file, 0, Infinity, stackProcessor);
let codeIdProcessor = new FunctionTimelineProcessor(
@@ -873,28 +858,36 @@ class TimelineView {
let sum = 0;
let bucketData = [];
let total = buckets[i].total;
- for (let j = 0; j < bucketDescriptors.length; j++) {
- let desc = bucketDescriptors[j];
- for (let k = 0; k < desc.kinds.length; k++) {
- sum += buckets[i][desc.kinds[k]];
+ if (total > 0) {
+ for (let j = 0; j < bucketDescriptors.length; j++) {
+ let desc = bucketDescriptors[j];
+ for (let k = 0; k < desc.kinds.length; k++) {
+ sum += buckets[i][desc.kinds[k]];
+ }
+ bucketData.push(Math.round(graphHeight * sum / total));
+ }
+ } else {
+ // No ticks fell into this bucket. Fill with "Unknown."
+ for (let j = 0; j < bucketDescriptors.length; j++) {
+ let desc = bucketDescriptors[j];
+ bucketData.push(desc.text === "Unknown" ? graphHeight : 0);
}
- bucketData.push(Math.round(graphHeight * sum / total));
}
bucketsGraph.push(bucketData);
}
// Draw the category graph into the buffer.
- let bucketWidth = width / bucketsGraph.length;
+ let bucketWidth = width / (bucketsGraph.length - 1);
let ctx = buffer.getContext('2d');
for (let i = 0; i < bucketsGraph.length - 1; i++) {
let bucketData = bucketsGraph[i];
let nextBucketData = bucketsGraph[i + 1];
+ let x1 = Math.round(i * bucketWidth);
+ let x2 = Math.round((i + 1) * bucketWidth);
for (let j = 0; j < bucketData.length; j++) {
- let x1 = Math.round(i * bucketWidth);
- let x2 = Math.round((i + 1) * bucketWidth);
ctx.beginPath();
- ctx.moveTo(x1, j && bucketData[j - 1]);
- ctx.lineTo(x2, j && nextBucketData[j - 1]);
+ ctx.moveTo(x1, j > 0 ? bucketData[j - 1] : 0);
+ ctx.lineTo(x2, j > 0 ? nextBucketData[j - 1] : 0);
ctx.lineTo(x2, nextBucketData[j]);
ctx.lineTo(x1, bucketData[j]);
ctx.closePath();
@@ -1114,22 +1107,22 @@ class SummaryView {
return row;
}
- function makeCollapsible(row, expander) {
- expander.textContent = "\u25BE";
- let expandHandler = expander.onclick;
- expander.onclick = () => {
+ function makeCollapsible(row, arrow) {
+ arrow.textContent = EXPANDED_ARROW;
+ let expandHandler = row.onclick;
+ row.onclick = () => {
let id = row.id;
let index = row.rowIndex + 1;
while (index < rows.rows.length &&
rows.rows[index].id.startsWith(id)) {
rows.deleteRow(index);
}
- expander.textContent = "\u25B8";
- expander.onclick = expandHandler;
+ arrow.textContent = COLLAPSED_ARROW;
+ row.onclick = expandHandler;
}
}
- function expandDeoptInstances(row, expander, instances, indent, kind) {
+ function expandDeoptInstances(row, arrow, instances, indent, kind) {
let index = row.rowIndex;
for (let i = 0; i < instances.length; i++) {
let childRow = rows.insertRow(index + 1);
@@ -1145,18 +1138,19 @@ class SummaryView {
document.createTextNode("Reason: " + deopt.reason));
reasonCell.style.textIndent = indent + "em";
}
- makeCollapsible(row, expander);
+ makeCollapsible(row, arrow);
}
- function expandDeoptFunctionList(row, expander, list, indent, kind) {
+ function expandDeoptFunctionList(row, arrow, list, indent, kind) {
let index = row.rowIndex;
for (let i = 0; i < list.length; i++) {
let childRow = rows.insertRow(index + 1);
childRow.id = row.id + i + "/";
let textCell = childRow.insertCell(-1);
- let expander = createTableExpander(indent);
- textCell.appendChild(expander);
+ textCell.appendChild(createIndentNode(indent));
+ let childArrow = createArrowNode();
+ textCell.appendChild(childArrow);
textCell.appendChild(
createFunctionNode(list[i].f.name, list[i].f.codes[0]));
@@ -1164,16 +1158,16 @@ class SummaryView {
numberCell.textContent = list[i].instances.length;
numberCell.style.textIndent = indent + "em";
- expander.textContent = "\u25B8";
- expander.onclick = () => {
+ childArrow.textContent = COLLAPSED_ARROW;
+ childRow.onclick = () => {
expandDeoptInstances(
- childRow, expander, list[i].instances, indent + 1);
+ childRow, childArrow, list[i].instances, indent + 1);
};
}
- makeCollapsible(row, expander);
+ makeCollapsible(row, arrow);
}
- function expandOptimizedFunctionList(row, expander, list, indent, kind) {
+ function expandOptimizedFunctionList(row, arrow, list, indent, kind) {
let index = row.rowIndex;
for (let i = 0; i < list.length; i++) {
let childRow = rows.insertRow(index + 1);
@@ -1188,17 +1182,19 @@ class SummaryView {
numberCell.textContent = list[i].instances.length;
numberCell.style.textIndent = indent + "em";
}
- makeCollapsible(row, expander);
+ makeCollapsible(row, arrow);
}
function addExpandableRow(text, list, indent, kind) {
let row = rows.insertRow(-1);
row.id = "opt-table/" + kind + "/";
+ row.style.backgroundColor = CATEGORY_COLOR;
let textCell = row.insertCell(-1);
- let expander = createTableExpander(indent);
- textCell.appendChild(expander);
+ textCell.appendChild(createIndentNode(indent));
+ let arrow = createArrowNode();
+ textCell.appendChild(arrow);
textCell.appendChild(document.createTextNode(text));
let numberCell = row.insertCell(-1);
@@ -1208,16 +1204,16 @@ class SummaryView {
}
if (list.count > 0) {
- expander.textContent = "\u25B8";
+ arrow.textContent = COLLAPSED_ARROW;
if (kind === "opt") {
- expander.onclick = () => {
+ row.onclick = () => {
expandOptimizedFunctionList(
- row, expander, list.functions, indent + 1, kind);
+ row, arrow, list.functions, indent + 1, kind);
};
} else {
- expander.onclick = () => {
+ row.onclick = () => {
expandDeoptFunctionList(
- row, expander, list.functions, indent + 1, kind);
+ row, arrow, list.functions, indent + 1, kind);
};
}
}
diff --git a/deps/v8/tools/release/create_release.py b/deps/v8/tools/release/create_release.py
index caee70308c..e5c2114b1a 100755
--- a/deps/v8/tools/release/create_release.py
+++ b/deps/v8/tools/release/create_release.py
@@ -221,7 +221,8 @@ class LandBranch(Step):
else:
self.GitUpload(author=self._options.author,
force=True,
- bypass_hooks=True)
+ bypass_hooks=True,
+ private=True)
cmd = "cl land --bypass-hooks -f"
if self._options.dry_run:
print "Dry run. Command:\ngit %s" % cmd
diff --git a/deps/v8/tools/release/filter_build_files.py b/deps/v8/tools/release/filter_build_files.py
index 9cc6607108..7d3f22138a 100755
--- a/deps/v8/tools/release/filter_build_files.py
+++ b/deps/v8/tools/release/filter_build_files.py
@@ -35,7 +35,7 @@ SUPPLEMENTARY_FILES = [
LIBRARY_FILES = {
'android': ['*.a', '*.so'],
'linux': ['*.a', '*.so'],
- 'mac': ['*.a', '*.so', '*.dylib'],
+ 'mac': ['*.a', '*.so'],
'win': ['*.lib', '*.dll'],
}
diff --git a/deps/v8/tools/release/git_recipes.py b/deps/v8/tools/release/git_recipes.py
index f3ac16058c..9deaee891b 100644
--- a/deps/v8/tools/release/git_recipes.py
+++ b/deps/v8/tools/release/git_recipes.py
@@ -206,8 +206,8 @@ class GitRecipesMixin(object):
self.Git(MakeArgs(args), **kwargs)
def GitUpload(self, reviewer="", author="", force=False, cq=False,
- cq_dry_run=False, bypass_hooks=False, cc="", tbr_reviewer="",
- **kwargs):
+ cq_dry_run=False, bypass_hooks=False, cc="", private=False,
+ tbr_reviewer="", **kwargs):
args = ["cl upload --send-mail"]
if author:
args += ["--email", Quoted(author)]
@@ -226,6 +226,8 @@ class GitRecipesMixin(object):
if cc:
args += ["--cc", Quoted(cc)]
args += ["--gerrit"]
+ if private:
+ args += ["--private"]
# TODO(machenbach): Check output in forced mode. Verify that all required
# base files were uploaded, if not retry.
self.Git(MakeArgs(args), pipe=False, **kwargs)
diff --git a/deps/v8/tools/release/test_scripts.py b/deps/v8/tools/release/test_scripts.py
index 86326bfda2..565b2b7c8f 100755
--- a/deps/v8/tools/release/test_scripts.py
+++ b/deps/v8/tools/release/test_scripts.py
@@ -934,7 +934,7 @@ TBR=reviewer@chromium.org"""
Cmd("git commit -aF \"%s\"" % TEST_CONFIG["COMMITMSG_FILE"], "",
cb=CheckVersionCommit),
Cmd("git cl upload --send-mail --email \"author@chromium.org\" "
- "-f --bypass-hooks --gerrit", ""),
+ "-f --bypass-hooks --gerrit --private", ""),
Cmd("git cl land --bypass-hooks -f", ""),
Cmd("git fetch", ""),
Cmd("git log -1 --format=%H --grep="
diff --git a/deps/v8/tools/run_perf.py b/deps/v8/tools/run_perf.py
index e0a9fc3b59..310bd8a008 100755
--- a/deps/v8/tools/run_perf.py
+++ b/deps/v8/tools/run_perf.py
@@ -56,7 +56,7 @@ A suite without "tests" is considered a performance test itself.
Full example (suite with one runner):
{
"path": ["."],
- "owner": ["username@chromium.org"],
+ "owners": ["username@chromium.org"],
"flags": ["--expose-gc"],
"test_flags": ["5"],
"archs": ["ia32", "x64"],
@@ -76,7 +76,7 @@ Full example (suite with one runner):
Full example (suite with several runners):
{
"path": ["."],
- "owner": ["username@chromium.org", "otherowner@google.com"],
+ "owners": ["username@chromium.org", "otherowner@google.com"],
"flags": ["--expose-gc"],
"archs": ["ia32", "x64"],
"run_count": 5,
@@ -109,6 +109,7 @@ import re
import subprocess
import sys
+from testrunner.local import android
from testrunner.local import command
from testrunner.local import utils
@@ -126,25 +127,6 @@ RESULT_LIST_RE = re.compile(r"^\[([^\]]+)\]$")
TOOLS_BASE = os.path.abspath(os.path.dirname(__file__))
-def LoadAndroidBuildTools(path): # pragma: no cover
- assert os.path.exists(path)
- sys.path.insert(0, path)
-
- import devil_chromium
- from devil.android import device_errors # pylint: disable=import-error
- from devil.android import device_utils # pylint: disable=import-error
- from devil.android.sdk import adb_wrapper # pylint: disable=import-error
- from devil.android.perf import cache_control # pylint: disable=import-error
- from devil.android.perf import perf_control # pylint: disable=import-error
- global adb_wrapper
- global cache_control
- global device_errors
- global device_utils
- global perf_control
-
- devil_chromium.Initialize()
-
-
def GeometricMean(values):
"""Returns the geometric mean of a list of values.
@@ -257,8 +239,7 @@ def RunResultsProcessor(results_processor, stdout, count):
stderr=subprocess.PIPE,
)
result, _ = p.communicate(input=stdout)
- print ">>> Processed stdout (#%d):" % count
- print result
+ logging.info(">>> Processed stdout (#%d):\n%s", count, result)
return result
@@ -504,7 +485,7 @@ class RunnableConfig(GraphConfig):
# TODO(machenbach): This requires +.exe if run on windows.
extra_flags = extra_flags or []
if self.binary != 'd8' and '--prof' in extra_flags:
- print "Profiler supported only on a benchmark run with d8"
+ logging.info("Profiler supported only on a benchmark run with d8")
if self.process_size:
cmd_prefix = ["/usr/bin/time", "--format=MaxMemory: %MKB"] + cmd_prefix
@@ -630,10 +611,19 @@ class Platform(object):
self.shell_dir = options.shell_dir
self.shell_dir_secondary = options.shell_dir_secondary
self.extra_flags = options.extra_flags.split()
+ self.options = options
+
+ @staticmethod
+ def ReadBuildConfig(options):
+ config_path = os.path.join(options.shell_dir, 'v8_build_config.json')
+ if not os.path.isfile(config_path):
+ return {}
+ with open(config_path) as f:
+ return json.load(f)
@staticmethod
def GetPlatform(options):
- if options.android_build_tools:
+ if Platform.ReadBuildConfig(options).get('is_android', False):
return AndroidPlatform(options)
else:
return DesktopPlatform(options)
@@ -664,6 +654,9 @@ class DesktopPlatform(Platform):
super(DesktopPlatform, self).__init__(options)
self.command_prefix = []
+ # Setup command class to OS specific version.
+ command.setup(utils.GuessOS())
+
if options.prioritize or options.affinitize != None:
self.command_prefix = ["schedtool"]
if options.prioritize:
@@ -695,26 +688,24 @@ class DesktopPlatform(Platform):
cmd = runnable.GetCommand(self.command_prefix, shell_dir, self.extra_flags)
try:
output = cmd.execute()
- except OSError as e: # pragma: no cover
- print title % "OSError"
- print e
+ except OSError: # pragma: no cover
+ logging.exception(title % "OSError")
return ""
- print title % "Stdout"
- print output.stdout
+ logging.info(title % "Stdout" + "\n%s", output.stdout)
if output.stderr: # pragma: no cover
# Print stderr for debugging.
- print title % "Stderr"
- print output.stderr
+ logging.info(title % "Stderr" + "\n%s", output.stderr)
if output.timed_out:
- print ">>> Test timed out after %ss." % runnable.timeout
+ logging.warning(">>> Test timed out after %ss.", runnable.timeout)
if '--prof' in self.extra_flags:
os_prefix = {"linux": "linux", "macos": "mac"}.get(utils.GuessOS())
if os_prefix:
tick_tools = os.path.join(TOOLS_BASE, "%s-tick-processor" % os_prefix)
subprocess.check_call(tick_tools + " --only-summary", shell=True)
else: # pragma: no cover
- print "Profiler option currently supported on Linux and Mac OS."
+ logging.warning(
+ "Profiler option currently supported on Linux and Mac OS.")
# time outputs to stderr
if runnable.process_size:
@@ -723,95 +714,17 @@ class DesktopPlatform(Platform):
class AndroidPlatform(Platform): # pragma: no cover
- DEVICE_DIR = "/data/local/tmp/v8/"
def __init__(self, options):
super(AndroidPlatform, self).__init__(options)
- LoadAndroidBuildTools(options.android_build_tools)
-
- if not options.device:
- # Detect attached device if not specified.
- devices = adb_wrapper.AdbWrapper.Devices()
- assert devices and len(devices) == 1, (
- "None or multiple devices detected. Please specify the device on "
- "the command-line with --device")
- options.device = str(devices[0])
- self.adb_wrapper = adb_wrapper.AdbWrapper(options.device)
- self.device = device_utils.DeviceUtils(self.adb_wrapper)
+ self.driver = android.android_driver(options.device)
def PreExecution(self):
- perf = perf_control.PerfControl(self.device)
- perf.SetHighPerfMode()
-
- # Remember what we have already pushed to the device.
- self.pushed = set()
+ self.driver.set_high_perf_mode()
def PostExecution(self):
- perf = perf_control.PerfControl(self.device)
- perf.SetDefaultPerfMode()
- self.device.RemovePath(
- AndroidPlatform.DEVICE_DIR, force=True, recursive=True)
-
- def _PushFile(self, host_dir, file_name, target_rel=".",
- skip_if_missing=False):
- file_on_host = os.path.join(host_dir, file_name)
- file_on_device_tmp = os.path.join(
- AndroidPlatform.DEVICE_DIR, "_tmp_", file_name)
- file_on_device = os.path.join(
- AndroidPlatform.DEVICE_DIR, target_rel, file_name)
- folder_on_device = os.path.dirname(file_on_device)
-
- # Only attempt to push files that exist.
- if not os.path.exists(file_on_host):
- if not skip_if_missing:
- logging.critical('Missing file on host: %s' % file_on_host)
- return
-
- # Only push files not yet pushed in one execution.
- if file_on_host in self.pushed:
- return
- else:
- self.pushed.add(file_on_host)
-
- # Work-around for "text file busy" errors. Push the files to a temporary
- # location and then copy them with a shell command.
- output = self.adb_wrapper.Push(file_on_host, file_on_device_tmp)
- # Success looks like this: "3035 KB/s (12512056 bytes in 4.025s)".
- # Errors look like this: "failed to copy ... ".
- if output and not re.search('^[0-9]', output.splitlines()[-1]):
- logging.critical('PUSH FAILED: ' + output)
- self.adb_wrapper.Shell("mkdir -p %s" % folder_on_device)
- self.adb_wrapper.Shell("cp %s %s" % (file_on_device_tmp, file_on_device))
-
- def _PushExecutable(self, shell_dir, target_dir, binary):
- self._PushFile(shell_dir, binary, target_dir)
-
- # Push external startup data. Backwards compatible for revisions where
- # these files didn't exist.
- self._PushFile(
- shell_dir,
- "natives_blob.bin",
- target_dir,
- skip_if_missing=True,
- )
- self._PushFile(
- shell_dir,
- "snapshot_blob.bin",
- target_dir,
- skip_if_missing=True,
- )
- self._PushFile(
- shell_dir,
- "snapshot_blob_trusted.bin",
- target_dir,
- skip_if_missing=True,
- )
- self._PushFile(
- shell_dir,
- "icudtl.dat",
- target_dir,
- skip_if_missing=True,
- )
+ self.driver.set_default_perf_mode()
+ self.driver.tear_down()
def PreTests(self, node, path):
if isinstance(node, RunnableConfig):
@@ -824,25 +737,21 @@ class AndroidPlatform(Platform): # pragma: no cover
bench_rel = "."
bench_abs = suite_dir
- self._PushExecutable(self.shell_dir, "bin", node.binary)
+ self.driver.push_executable(self.shell_dir, "bin", node.binary)
if self.shell_dir_secondary:
- self._PushExecutable(
+ self.driver.push_executable(
self.shell_dir_secondary, "bin_secondary", node.binary)
if isinstance(node, RunnableConfig):
- self._PushFile(bench_abs, node.main, bench_rel)
+ self.driver.push_file(bench_abs, node.main, bench_rel)
for resource in node.resources:
- self._PushFile(bench_abs, resource, bench_rel)
+ self.driver.push_file(bench_abs, resource, bench_rel)
def _Run(self, runnable, count, secondary=False):
suffix = ' - secondary' if secondary else ''
target_dir = "bin_secondary" if secondary else "bin"
title = ">>> %%s (#%d)%s:" % ((count + 1), suffix)
- cache = cache_control.CacheControl(self.device)
- cache.DropRamCaches()
- binary_on_device = os.path.join(
- AndroidPlatform.DEVICE_DIR, target_dir, runnable.binary)
- cmd = [binary_on_device] + runnable.GetCommandFlags(self.extra_flags)
+ self.driver.drop_ram_caches()
# Relative path to benchmark directory.
if runnable.path:
@@ -850,19 +759,29 @@ class AndroidPlatform(Platform): # pragma: no cover
else:
bench_rel = "."
+ logcat_file = None
+ if self.options.dump_logcats_to:
+ runnable_name = '-'.join(runnable.graphs)
+ logcat_file = os.path.join(
+ self.options.dump_logcats_to, 'logcat-%s-#%d%s.log' % (
+ runnable_name, count + 1, '-secondary' if secondary else ''))
+ logging.debug('Dumping logcat into %s', logcat_file)
+
try:
- output = self.device.RunShellCommand(
- cmd,
- cwd=os.path.join(AndroidPlatform.DEVICE_DIR, bench_rel),
- check_return=True,
+ stdout = self.driver.run(
+ target_dir=target_dir,
+ binary=runnable.binary,
+ args=runnable.GetCommandFlags(self.extra_flags),
+ rel_path=bench_rel,
timeout=runnable.timeout,
- retries=0,
+ logcat_file=logcat_file,
)
- stdout = "\n".join(output)
- print title % "Stdout"
- print stdout
- except device_errors.CommandTimeoutError:
- print ">>> Test timed out after %ss." % runnable.timeout
+ logging.info(title % "Stdout" + "\n%s", stdout)
+ except android.CommandFailedException as e:
+ logging.info(title % "Stdout" + "\n%s", e.output)
+ raise
+ except android.TimeoutException:
+ logging.warning(">>> Test timed out after %ss.", runnable.timeout)
stdout = ""
if runnable.process_size:
return stdout + "MaxMemory: Unsupported"
@@ -895,19 +814,19 @@ class CustomMachineConfiguration:
try:
with open("/proc/sys/kernel/randomize_va_space", "r") as f:
return int(f.readline().strip())
- except Exception as e:
- print "Failed to get current ASLR settings."
- raise e
+ except Exception:
+ logging.exception("Failed to get current ASLR settings.")
+ raise
@staticmethod
def SetASLR(value):
try:
with open("/proc/sys/kernel/randomize_va_space", "w") as f:
f.write(str(value))
- except Exception as e:
- print "Failed to update ASLR to %s." % value
- print "Are we running under sudo?"
- raise e
+ except Exception:
+ logging.exception(
+ "Failed to update ASLR to %s. Are we running under sudo?", value)
+ raise
new_value = CustomMachineConfiguration.GetASLR()
if value != new_value:
@@ -922,9 +841,9 @@ class CustomMachineConfiguration:
if len(r) == 1:
return range(r[0], r[0] + 1)
return range(r[0], r[1] + 1)
- except Exception as e:
- print "Failed to retrieve number of CPUs."
- raise e
+ except Exception:
+ logging.exception("Failed to retrieve number of CPUs.")
+ raise
@staticmethod
def GetCPUPathForId(cpu_index):
@@ -948,10 +867,10 @@ class CustomMachineConfiguration:
elif ret != val:
raise Exception("CPU cores have differing governor settings")
return ret
- except Exception as e:
- print "Failed to get the current CPU governor."
- print "Is the CPU governor disabled? Check BIOS."
- raise e
+ except Exception:
+ logging.exception("Failed to get the current CPU governor. Is the CPU "
+ "governor disabled? Check BIOS.")
+ raise
@staticmethod
def SetCPUGovernor(value):
@@ -962,10 +881,10 @@ class CustomMachineConfiguration:
with open(cpu_device, "w") as f:
f.write(value)
- except Exception as e:
- print "Failed to change CPU governor to %s." % value
- print "Are we running under sudo?"
- raise e
+ except Exception:
+ logging.exception("Failed to change CPU governor to %s. Are we "
+ "running under sudo?", value)
+ raise
cur_value = CustomMachineConfiguration.GetCPUGovernor()
if cur_value != value:
@@ -973,17 +892,15 @@ class CustomMachineConfiguration:
% cur_value )
def Main(args):
- logging.getLogger().setLevel(logging.INFO)
parser = optparse.OptionParser()
- parser.add_option("--android-build-tools",
- help="Path to chromium's build/android. Specifying this "
- "option will run tests using android platform.")
+ parser.add_option("--android-build-tools", help="Deprecated.")
parser.add_option("--arch",
help=("The architecture to run tests for, "
"'auto' or 'native' for auto-detect"),
default="x64")
parser.add_option("--buildbot",
- help="Adapt to path structure used on buildbots",
+ help="Adapt to path structure used on buildbots and adds "
+ "timestamps/level to all logged status messages",
default=False, action="store_true")
parser.add_option("--device",
help="The device ID to run Android tests on. If not given "
@@ -1034,9 +951,21 @@ def Main(args):
"--filter=JSTests/TypedArrays/ will run only TypedArray "
"benchmarks from the JSTests suite.",
default="")
+ parser.add_option("--run-count-multiplier", default=1, type="int",
+ help="Multipled used to increase number of times each test "
+ "is retried.")
+ parser.add_option("--dump-logcats-to",
+ help="Writes logcat output from each test into specified "
+ "directory. Only supported for android targets.")
(options, args) = parser.parse_args(args)
+ if options.buildbot:
+ logging.basicConfig(
+ level=logging.INFO, format="%(asctime)s %(levelname)s %(message)s")
+ else:
+ logging.basicConfig(level=logging.INFO, format="%(message)s")
+
if len(args) == 0: # pragma: no cover
parser.print_help()
return 1
@@ -1045,17 +974,13 @@ def Main(args):
options.arch = ARCH_GUESS
if not options.arch in SUPPORTED_ARCHS: # pragma: no cover
- print "Unknown architecture %s" % options.arch
- return 1
-
- if options.device and not options.android_build_tools: # pragma: no cover
- print "Specifying a device requires Android build tools."
+ logging.error("Unknown architecture %s", options.arch)
return 1
if (options.json_test_results_secondary and
not options.outdir_secondary): # pragma: no cover
- print("For writing secondary json test results, a secondary outdir patch "
- "must be specified.")
+ logging.error("For writing secondary json test results, a secondary outdir "
+ "patch must be specified.")
return 1
workspace = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
@@ -1070,10 +995,10 @@ def Main(args):
default_binary_name = "d8"
else:
if not os.path.isfile(options.binary_override_path):
- print "binary-override-path must be a file name"
+ logging.error("binary-override-path must be a file name")
return 1
if options.outdir_secondary:
- print "specify either binary-override-path or outdir-secondary"
+ logging.error("specify either binary-override-path or outdir-secondary")
return 1
options.shell_dir = os.path.abspath(
os.path.dirname(options.binary_override_path))
@@ -1132,11 +1057,12 @@ def Main(args):
if (not runnable_name.startswith(options.filter) and
runnable_name + "/" != options.filter):
continue
- print ">>> Running suite: %s" % runnable_name
+ logging.info(">>> Running suite: %s", runnable_name)
def Runner():
"""Output generator that reruns several times."""
- for i in xrange(0, max(1, runnable.run_count)):
+ total_runs = runnable.run_count * options.run_count_multiplier
+ for i in xrange(0, max(1, total_runs)):
# TODO(machenbach): Allow timeout per arch like with run_count per
# arch.
yield platform.Run(runnable, i)
diff --git a/deps/v8/tools/testrunner/base_runner.py b/deps/v8/tools/testrunner/base_runner.py
index d7d2373f2d..481cc10134 100644
--- a/deps/v8/tools/testrunner/base_runner.py
+++ b/deps/v8/tools/testrunner/base_runner.py
@@ -19,6 +19,7 @@ sys.path.insert(
os.path.dirname(os.path.abspath(__file__))))
+from testrunner.local import command
from testrunner.local import testsuite
from testrunner.local import utils
from testrunner.test_config import TestConfig
@@ -171,11 +172,12 @@ class BuildConfig(object):
else:
self.arch = build_config['v8_target_cpu']
- self.is_debug = build_config['is_debug']
self.asan = build_config['is_asan']
self.cfi_vptr = build_config['is_cfi']
self.dcheck_always_on = build_config['dcheck_always_on']
self.gcov_coverage = build_config['is_gcov_coverage']
+ self.is_android = build_config['is_android']
+ self.is_debug = build_config['is_debug']
self.msan = build_config['is_msan']
self.no_i18n = not build_config['v8_enable_i18n_support']
self.no_snap = not build_config['v8_use_snapshot']
@@ -221,6 +223,7 @@ class BaseTestRunner(object):
self.build_config = None
self.mode_name = None
self.mode_options = None
+ self.target_os = None
def execute(self, sys_args=None):
if sys_args is None: # pragma: no cover
@@ -234,6 +237,7 @@ class BaseTestRunner(object):
print ' '.join(sys.argv)
self._load_build_config(options)
+ command.setup(self.target_os)
try:
self._process_default_options(options)
@@ -256,6 +260,8 @@ class BaseTestRunner(object):
return utils.EXIT_CODE_INTERNAL_ERROR
except KeyboardInterrupt:
return utils.EXIT_CODE_INTERRUPTED
+ finally:
+ command.tear_down()
def _create_parser(self):
parser = optparse.OptionParser()
@@ -369,6 +375,13 @@ class BaseTestRunner(object):
print '>>> Autodetected:'
print self.build_config
+ # Represents the OS where tests are run on. Same as host OS except for
+ # Android, which is determined by build output.
+ if self.build_config.is_android:
+ self.target_os = 'android'
+ else:
+ self.target_os = utils.GuessOS()
+
# Returns possible build paths in order:
# gn
# outdir
@@ -463,7 +476,11 @@ class BaseTestRunner(object):
'build directory (%s) instead.' % self.outdir)
if options.j == 0:
- options.j = multiprocessing.cpu_count()
+ if self.build_config.is_android:
+ # Adb isn't happy about multi-processed file pushing.
+ options.j = 1
+ else:
+ options.j = multiprocessing.cpu_count()
options.command_prefix = shlex.split(options.command_prefix)
options.extra_flags = sum(map(shlex.split, options.extra_flags), [])
@@ -630,7 +647,7 @@ class BaseTestRunner(object):
"simd_mips": simd_mips,
"simulator": utils.UseSimulator(self.build_config.arch),
"simulator_run": False,
- "system": utils.GuessOS(),
+ "system": self.target_os,
"tsan": self.build_config.tsan,
"ubsan_vptr": self.build_config.ubsan_vptr,
}
diff --git a/deps/v8/tools/testrunner/local/android.py b/deps/v8/tools/testrunner/local/android.py
new file mode 100644
index 0000000000..fb25bb5a17
--- /dev/null
+++ b/deps/v8/tools/testrunner/local/android.py
@@ -0,0 +1,207 @@
+# Copyright 2018 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.
+
+"""
+Wrapper around the Android device abstraction from src/build/android.
+"""
+
+import logging
+import os
+import sys
+
+
+BASE_DIR = os.path.normpath(
+ os.path.join(os.path.dirname(__file__), '..', '..', '..'))
+ANDROID_DIR = os.path.join(BASE_DIR, 'build', 'android')
+DEVICE_DIR = '/data/local/tmp/v8/'
+
+
+class TimeoutException(Exception):
+ def __init__(self, timeout):
+ self.timeout = timeout
+
+
+class CommandFailedException(Exception):
+ def __init__(self, status, output):
+ self.status = status
+ self.output = output
+
+
+class _Driver(object):
+ """Helper class to execute shell commands on an Android device."""
+ def __init__(self, device=None):
+ assert os.path.exists(ANDROID_DIR)
+ sys.path.insert(0, ANDROID_DIR)
+
+ # We import the dependencies only on demand, so that this file can be
+ # imported unconditionally.
+ import devil_chromium
+ from devil.android import device_errors # pylint: disable=import-error
+ from devil.android import device_utils # pylint: disable=import-error
+ from devil.android.perf import cache_control # pylint: disable=import-error
+ from devil.android.perf import perf_control # pylint: disable=import-error
+ from devil.android.sdk import adb_wrapper # pylint: disable=import-error
+ global cache_control
+ global device_errors
+ global perf_control
+
+ devil_chromium.Initialize()
+
+ if not device:
+ # Detect attached device if not specified.
+ devices = adb_wrapper.AdbWrapper.Devices()
+ assert devices, 'No devices detected'
+ assert len(devices) == 1, 'Multiple devices detected.'
+ device = str(devices[0])
+ self.adb_wrapper = adb_wrapper.AdbWrapper(device)
+ self.device = device_utils.DeviceUtils(self.adb_wrapper)
+
+ # This remembers what we have already pushed to the device.
+ self.pushed = set()
+
+ def tear_down(self):
+ """Clean up files after running all tests."""
+ self.device.RemovePath(DEVICE_DIR, force=True, recursive=True)
+
+ def push_file(self, host_dir, file_name, target_rel='.',
+ skip_if_missing=False):
+ """Push a single file to the device (cached).
+
+ Args:
+ host_dir: Absolute parent directory of the file to push.
+ file_name: Name of the file to push.
+ target_rel: Parent directory of the target location on the device
+ (relative to the device's base dir for testing).
+ skip_if_missing: Keeps silent about missing files when set. Otherwise logs
+ error.
+ """
+ file_on_host = os.path.join(host_dir, file_name)
+
+ # Only push files not yet pushed in one execution.
+ if file_on_host in self.pushed:
+ return
+
+ file_on_device_tmp = os.path.join(DEVICE_DIR, '_tmp_', file_name)
+ file_on_device = os.path.join(DEVICE_DIR, target_rel, file_name)
+ folder_on_device = os.path.dirname(file_on_device)
+
+ # Only attempt to push files that exist.
+ if not os.path.exists(file_on_host):
+ if not skip_if_missing:
+ logging.critical('Missing file on host: %s' % file_on_host)
+ return
+
+ # Work-around for 'text file busy' errors. Push the files to a temporary
+ # location and then copy them with a shell command.
+ output = self.adb_wrapper.Push(file_on_host, file_on_device_tmp)
+ # Success looks like this: '3035 KB/s (12512056 bytes in 4.025s)'.
+ # Errors look like this: 'failed to copy ... '.
+ if output and not re.search('^[0-9]', output.splitlines()[-1]):
+ logging.critical('PUSH FAILED: ' + output)
+ self.adb_wrapper.Shell('mkdir -p %s' % folder_on_device)
+ self.adb_wrapper.Shell('cp %s %s' % (file_on_device_tmp, file_on_device))
+ self.pushed.add(file_on_host)
+
+ def push_executable(self, shell_dir, target_dir, binary):
+ """Push files required to run a V8 executable.
+
+ Args:
+ shell_dir: Absolute parent directory of the executable on the host.
+ target_dir: Parent directory of the executable on the device (relative to
+ devices' base dir for testing).
+ binary: Name of the binary to push.
+ """
+ self.push_file(shell_dir, binary, target_dir)
+
+ # Push external startup data. Backwards compatible for revisions where
+ # these files didn't exist. Or for bots that don't produce these files.
+ self.push_file(
+ shell_dir,
+ 'natives_blob.bin',
+ target_dir,
+ skip_if_missing=True,
+ )
+ self.push_file(
+ shell_dir,
+ 'snapshot_blob.bin',
+ target_dir,
+ skip_if_missing=True,
+ )
+ self.push_file(
+ shell_dir,
+ 'snapshot_blob_trusted.bin',
+ target_dir,
+ skip_if_missing=True,
+ )
+ self.push_file(
+ shell_dir,
+ 'icudtl.dat',
+ target_dir,
+ skip_if_missing=True,
+ )
+
+ def run(self, target_dir, binary, args, rel_path, timeout, env=None,
+ logcat_file=False):
+ """Execute a command on the device's shell.
+
+ Args:
+ target_dir: Parent directory of the executable on the device (relative to
+ devices' base dir for testing).
+ binary: Name of the binary.
+ args: List of arguments to pass to the binary.
+ rel_path: Relative path on device to use as CWD.
+ timeout: Timeout in seconds.
+ env: The environment variables with which the command should be run.
+ logcat_file: File into which to stream adb logcat log.
+ """
+ binary_on_device = os.path.join(DEVICE_DIR, target_dir, binary)
+ cmd = [binary_on_device] + args
+ def run_inner():
+ try:
+ output = self.device.RunShellCommand(
+ cmd,
+ cwd=os.path.join(DEVICE_DIR, rel_path),
+ check_return=True,
+ env=env,
+ timeout=timeout,
+ retries=0,
+ )
+ return '\n'.join(output)
+ except device_errors.AdbCommandFailedError as e:
+ raise CommandFailedException(e.status, e.output)
+ except device_errors.CommandTimeoutError:
+ raise TimeoutException(timeout)
+
+
+ if logcat_file:
+ with self.device.GetLogcatMonitor(output_file=logcat_file) as logmon:
+ result = run_inner()
+ logmon.Close()
+ return result
+ else:
+ return run_inner()
+
+ def drop_ram_caches(self):
+ """Drop ran caches on device."""
+ cache = cache_control.CacheControl(self.device)
+ cache.DropRamCaches()
+
+ def set_high_perf_mode(self):
+ """Set device into high performance mode."""
+ perf = perf_control.PerfControl(self.device)
+ perf.SetHighPerfMode()
+
+ def set_default_perf_mode(self):
+ """Set device into default performance mode."""
+ perf = perf_control.PerfControl(self.device)
+ perf.SetDefaultPerfMode()
+
+
+_ANDROID_DRIVER = None
+def android_driver(device=None):
+ """Singleton access method to the driver class."""
+ global _ANDROID_DRIVER
+ if not _ANDROID_DRIVER:
+ _ANDROID_DRIVER = _Driver(device)
+ return _ANDROID_DRIVER
diff --git a/deps/v8/tools/testrunner/local/command.py b/deps/v8/tools/testrunner/local/command.py
index adc9c2e452..302d568e87 100644
--- a/deps/v8/tools/testrunner/local/command.py
+++ b/deps/v8/tools/testrunner/local/command.py
@@ -4,16 +4,22 @@
import os
+import re
import signal
import subprocess
import sys
import threading
import time
+from ..local.android import (
+ android_driver, CommandFailedException, TimeoutException)
from ..local import utils
from ..objects import output
+BASE_DIR = os.path.normpath(
+ os.path.join(os.path.dirname(os.path.abspath(__file__)), '..' , '..', '..'))
+
SEM_INVALID_VALUE = -1
SEM_NOGPFAULTERRORBOX = 0x0002 # Microsoft Platform SDK WinBase.h
@@ -33,7 +39,18 @@ class AbortException(Exception):
class BaseCommand(object):
def __init__(self, shell, args=None, cmd_prefix=None, timeout=60, env=None,
- verbose=False):
+ verbose=False, resources_func=None):
+ """Initialize the command.
+
+ Args:
+ shell: The name of the executable (e.g. d8).
+ args: List of args to pass to the executable.
+ cmd_prefix: Prefix of command (e.g. a wrapper script).
+ timeout: Timeout in seconds.
+ env: Environment dict for execution.
+ verbose: Print additional output.
+ resources_func: Callable, returning all test files needed by this command.
+ """
assert(timeout > 0)
self.shell = shell
@@ -43,11 +60,11 @@ class BaseCommand(object):
self.env = env or {}
self.verbose = verbose
- def execute(self, **additional_popen_kwargs):
+ def execute(self):
if self.verbose:
print '# %s' % self
- process = self._start_process(**additional_popen_kwargs)
+ process = self._start_process()
# Variable to communicate with the signal handler.
abort_occured = [False]
@@ -79,14 +96,13 @@ class BaseCommand(object):
duration
)
- def _start_process(self, **additional_popen_kwargs):
+ def _start_process(self):
try:
return subprocess.Popen(
args=self._get_popen_args(),
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
env=self._get_env(),
- **additional_popen_kwargs
)
except Exception as e:
sys.stderr.write('Error executing: %s\n' % self)
@@ -187,8 +203,85 @@ class WindowsCommand(BaseCommand):
sys.stdout.flush()
-# Set the Command class to the OS-specific version.
-if utils.IsWindows():
- Command = WindowsCommand
-else:
- Command = PosixCommand
+class AndroidCommand(BaseCommand):
+ def __init__(self, shell, args=None, cmd_prefix=None, timeout=60, env=None,
+ verbose=False, resources_func=None):
+ """Initialize the command and all files that need to be pushed to the
+ Android device.
+ """
+ self.shell_name = os.path.basename(shell)
+ self.shell_dir = os.path.dirname(shell)
+ self.files_to_push = resources_func()
+
+ # Make all paths in arguments relative and also prepare files from arguments
+ # for pushing to the device.
+ rel_args = []
+ find_path_re = re.compile(r'.*(%s/[^\'"]+).*' % re.escape(BASE_DIR))
+ for arg in (args or []):
+ match = find_path_re.match(arg)
+ if match:
+ self.files_to_push.append(match.group(1))
+ rel_args.append(
+ re.sub(r'(.*)%s/(.*)' % re.escape(BASE_DIR), r'\1\2', arg))
+
+ super(AndroidCommand, self).__init__(
+ shell, args=rel_args, cmd_prefix=cmd_prefix, timeout=timeout, env=env,
+ verbose=verbose)
+
+ def execute(self, **additional_popen_kwargs):
+ """Execute the command on the device.
+
+ This pushes all required files to the device and then runs the command.
+ """
+ if self.verbose:
+ print '# %s' % self
+
+ android_driver().push_executable(self.shell_dir, 'bin', self.shell_name)
+
+ for abs_file in self.files_to_push:
+ abs_dir = os.path.dirname(abs_file)
+ file_name = os.path.basename(abs_file)
+ rel_dir = os.path.relpath(abs_dir, BASE_DIR)
+ android_driver().push_file(abs_dir, file_name, rel_dir)
+
+ start_time = time.time()
+ return_code = 0
+ timed_out = False
+ try:
+ stdout = android_driver().run(
+ 'bin', self.shell_name, self.args, '.', self.timeout, self.env)
+ except CommandFailedException as e:
+ return_code = e.status
+ stdout = e.output
+ except TimeoutException as e:
+ return_code = 1
+ timed_out = True
+ # Sadly the Android driver doesn't provide output on timeout.
+ stdout = ''
+
+ duration = time.time() - start_time
+ return output.Output(
+ return_code,
+ timed_out,
+ stdout,
+ '', # No stderr available.
+ -1, # No pid available.
+ duration,
+ )
+
+
+Command = None
+def setup(target_os):
+ """Set the Command class to the OS-specific version."""
+ global Command
+ if target_os == 'android':
+ Command = AndroidCommand
+ elif target_os == 'windows':
+ Command = WindowsCommand
+ else:
+ Command = PosixCommand
+
+def tear_down():
+ """Clean up after using commands."""
+ if Command == AndroidCommand:
+ android_driver().tear_down()
diff --git a/deps/v8/tools/testrunner/local/statusfile.py b/deps/v8/tools/testrunner/local/statusfile.py
index ecfbf008a2..4742e84caf 100644
--- a/deps/v8/tools/testrunner/local/statusfile.py
+++ b/deps/v8/tools/testrunner/local/statusfile.py
@@ -55,7 +55,7 @@ for key in [SKIP, FAIL, PASS, CRASH, SLOW, FAIL_OK, NO_VARIANTS, FAIL_SLOPPY,
# Support arches, modes to be written as keywords instead of strings.
VARIABLES = {ALWAYS: True}
-for var in ["debug", "release", "big", "little",
+for var in ["debug", "release", "big", "little", "android",
"android_arm", "android_arm64", "android_ia32", "android_x64",
"arm", "arm64", "ia32", "mips", "mipsel", "mips64", "mips64el",
"x64", "ppc", "ppc64", "s390", "s390x", "macos", "windows",
diff --git a/deps/v8/tools/testrunner/objects/testcase.py b/deps/v8/tools/testrunner/objects/testcase.py
index 39d4fbd2a7..7416590dd0 100644
--- a/deps/v8/tools/testrunner/objects/testcase.py
+++ b/deps/v8/tools/testrunner/objects/testcase.py
@@ -240,7 +240,8 @@ class TestCase(object):
args=params,
env=env,
timeout=timeout,
- verbose=self._test_config.verbose
+ verbose=self._test_config.verbose,
+ resources_func=self._get_resources,
)
def _parse_source_flags(self, source=None):
@@ -260,6 +261,14 @@ class TestCase(object):
def _get_source_path(self):
return None
+ def _get_resources(self):
+ """Returns a list of absolute paths with additional files needed by the
+ test case.
+
+ Used to push additional files to Android devices.
+ """
+ return []
+
@property
def output_proc(self):
if self.expected_outcomes is outproc.OUTCOMES_PASS:
diff --git a/deps/v8/tools/testrunner/outproc/base.py b/deps/v8/tools/testrunner/outproc/base.py
index d1953dda99..39efb60fe9 100644
--- a/deps/v8/tools/testrunner/outproc/base.py
+++ b/deps/v8/tools/testrunner/outproc/base.py
@@ -85,6 +85,11 @@ class PassOutProc(BaseOutProc):
return OUTCOMES_PASS
+class NegPassOutProc(Negative, PassOutProc):
+ """Output processor optimized for negative tests expected to PASS"""
+ pass
+
+
class OutProc(BaseOutProc):
"""Output processor optimized for positive tests with expected outcomes
different than a single PASS.
@@ -113,6 +118,7 @@ class OutProc(BaseOutProc):
# TODO(majeski): Override __reduce__ to make it deserialize as one instance.
DEFAULT = PassOutProc()
+DEFAULT_NEGATIVE = NegPassOutProc()
class ExpectedOutProc(OutProc):
diff --git a/deps/v8/tools/testrunner/testproc/filter.py b/deps/v8/tools/testrunner/testproc/filter.py
index 5081997751..e2a5e972a9 100644
--- a/deps/v8/tools/testrunner/testproc/filter.py
+++ b/deps/v8/tools/testrunner/testproc/filter.py
@@ -59,25 +59,25 @@ class NameFilterProc(base.TestProcFilter):
super(NameFilterProc, self).__init__()
self._globs = defaultdict(list)
+ self._exact_matches = defaultdict(dict)
for a in args:
argpath = a.split('/')
suitename = argpath[0]
path = '/'.join(argpath[1:]) or '*'
- self._globs[suitename].append(path)
+ if '*' in path:
+ self._globs[suitename].append(path)
+ else:
+ self._exact_matches[suitename][path] = True
for s, globs in self._globs.iteritems():
if not globs or '*' in globs:
- self._globs[s] = []
+ self._globs[s] = ['*']
def _filter(self, test):
- globs = self._globs.get(test.suite.name)
- if globs is None:
- return True
-
- if not globs:
- return False
-
+ globs = self._globs.get(test.suite.name, [])
for g in globs:
+ if g == '*': return False
if fnmatch.fnmatch(test.path, g):
return False
- return True
+ exact_matches = self._exact_matches.get(test.suite.name, {})
+ return test.path not in exact_matches
diff --git a/deps/v8/tools/tickprocessor.js b/deps/v8/tools/tickprocessor.js
index b5efa3f69c..31acd3d7be 100644
--- a/deps/v8/tools/tickprocessor.js
+++ b/deps/v8/tools/tickprocessor.js
@@ -160,7 +160,6 @@ function TickProcessor(
this.stateFilter_ = stateFilter;
this.runtimeTimerFilter_ = runtimeTimerFilter;
this.sourceMap = sourceMap;
- this.deserializedEntriesNames_ = [];
var ticks = this.ticks_ =
{ total: 0, unaccounted: 0, excluded: 0, gc: 0 };
@@ -299,7 +298,6 @@ TickProcessor.prototype.processSharedLibrary = function(
TickProcessor.prototype.processCodeCreation = function(
type, kind, timestamp, start, size, name, maybe_func) {
- name = this.deserializedEntriesNames_[start] || name;
if (maybe_func.length) {
var funcAddr = parseInt(maybe_func[0]);
var state = parseState(maybe_func[1]);
diff --git a/deps/v8/tools/torque/vim-torque/README.md b/deps/v8/tools/torque/vim-torque/README.md
new file mode 100644
index 0000000000..fbdef0fd0d
--- /dev/null
+++ b/deps/v8/tools/torque/vim-torque/README.md
@@ -0,0 +1,33 @@
+# V8 Torque syntax support for vim
+
+This plugin adds syntax highlighting support for the V8 Torque domain-specific
+language.
+
+## Installation
+
+Installation depends on your favorite plugin manager.
+
+**Pathogen:**
+
+Run
+
+```sh
+ln -s $V8/tools/torque/vim-torque ~/.vim/bundle/vim-torque
+# or ~/.config/nvim/bundle/vim-torque for Neovim
+```
+
+**Vundle:**
+
+Add this line to your `.vimrc` or `~/.config/nvim/init.vim`.
+
+```vim
+Plugin 'file:///path/to/v8/tools/torque/vim-torque'
+```
+
+**vim-plug:**
+
+Add this line to your `.vimrc` or `~/.config/nvim/init.vim`.
+
+```vim
+Plug '~/path/to/v8/tools/torque/vim-torque'
+```
diff --git a/deps/v8/tools/torque/vim-torque/ftdetect/torque.vim b/deps/v8/tools/torque/vim-torque/ftdetect/torque.vim
new file mode 100644
index 0000000000..ead2c5ef35
--- /dev/null
+++ b/deps/v8/tools/torque/vim-torque/ftdetect/torque.vim
@@ -0,0 +1 @@
+au BufRead,BufNewFile *.tq set filetype=torque
diff --git a/deps/v8/tools/torque/vim-torque/syntax/torque.vim b/deps/v8/tools/torque/vim-torque/syntax/torque.vim
new file mode 100644
index 0000000000..17713c7213
--- /dev/null
+++ b/deps/v8/tools/torque/vim-torque/syntax/torque.vim
@@ -0,0 +1,84 @@
+" Copyright 2018 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.
+
+if !exists("main_syntax")
+ " quit when a syntax file was already loaded
+ if exists("b:current_syntax")
+ finish
+ endif
+ let main_syntax = 'torque'
+elseif exists("b:current_syntax") && b:current_syntax == "torque"
+ finish
+endif
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+syn match torqueLineComment "\/\/.*" contains=@Spell
+syn region torqueComment start="/\*" end="\*/" contains=@Spell
+syn region torqueStringS start=+'+ skip=+\\\\\|\\'+ end=+'\|$+
+
+syn keyword torqueAssert assert check debug unreachable
+syn keyword torqueAtom True False Undefined Hole Null
+syn keyword torqueBoolean true false
+syn keyword torqueBranch break continue goto
+syn keyword torqueConditional if else typeswitch otherwise
+syn match torqueConstant /\v<[A-Z][A-Z0-9_]+>/
+syn match torqueConstant /\v<k[A-Z][A-Za-z0-9]*>/
+syn keyword torqueFunction macro builtin runtime
+syn keyword torqueKeyword cast convert from_constexpr min max unsafe_cast
+syn keyword torqueLabel case
+syn keyword torqueMatching try label
+syn keyword torqueModifier extern javascript constexpr
+syn match torqueNumber /\v<[0-9]+(\.[0-9]*)?>/
+syn match torqueNumber /\v<0x[0-9a-fA-F]+>/
+syn keyword torqueOperator operator
+syn keyword torqueRel extends generates labels
+syn keyword torqueRepeat while for of
+syn keyword torqueStatement return tail
+syn keyword torqueStructure module struct type
+syn keyword torqueVariable const let
+
+syn match torqueType /\v(\<)@<=([A-Za-z][0-9A-Za-z_]*)(>)@=/
+syn match torqueType /\v(:\s*(constexpr\s*)?)@<=([A-Za-z][0-9A-Za-z_]*)/
+" Include some common types also
+syn keyword torqueType Arguments void never
+syn keyword torqueType Tagged Smi HeapObject Object
+syn keyword torqueType int32 uint32 int64 intptr uintptr float32 float64
+syn keyword torqueType bool string
+syn keyword torqueType int31 RawPtr AbstractCode Code JSReceiver Context String
+syn keyword torqueType Oddball HeapNumber Number BigInt Numeric Boolean JSProxy
+syn keyword torqueType JSObject JSArray JSFunction JSBoundFunction Callable Map
+
+hi def link torqueAssert Statement
+hi def link torqueAtom Constant
+hi def link torqueBoolean Boolean
+hi def link torqueBranch Conditional
+hi def link torqueComment Comment
+hi def link torqueConditional Conditional
+hi def link torqueConstant Constant
+hi def link torqueFunction Function
+hi def link torqueKeyword Keyword
+hi def link torqueLabel Label
+hi def link torqueLineComment Comment
+hi def link torqueMatching Exception
+hi def link torqueModifier StorageClass
+hi def link torqueNumber Number
+hi def link torqueOperator Operator
+hi def link torqueRel StorageClass
+hi def link torqueRepeat Repeat
+hi def link torqueStatement Statement
+hi def link torqueStringS String
+hi def link torqueStructure Structure
+hi def link torqueType Type
+hi def link torqueVariable Identifier
+
+let b:current_syntax = "torque"
+if main_syntax == 'torque'
+ unlet main_syntax
+endif
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim: set ts=8:
diff --git a/deps/v8/tools/try_perf.py b/deps/v8/tools/try_perf.py
index 483dfe7199..58035efcc0 100755
--- a/deps/v8/tools/try_perf.py
+++ b/deps/v8/tools/try_perf.py
@@ -16,14 +16,15 @@ BOTS = {
'--linux64_haswell': 'v8_linux64_haswell_perf_try',
'--nexus5': 'v8_nexus5_perf_try',
'--nexus7': 'v8_nexus7_perf_try',
- '--nexus9': 'v8_nexus9_perf_try',
'--nexus10': 'v8_nexus10_perf_try',
+ '--pixel2': 'v8_pixel2_perf_try',
}
# This list will contain builder names that should be triggered on an internal
# swarming bucket instead of internal Buildbot master.
SWARMING_BOTS = [
'v8_linux64_perf_try',
+ 'v8_pixel2_perf_try',
]
DEFAULT_BOTS = [
diff --git a/deps/v8/tools/unittests/run_perf_test.py b/deps/v8/tools/unittests/run_perf_test.py
index 07dd515406..6ba18e0b9e 100755
--- a/deps/v8/tools/unittests/run_perf_test.py
+++ b/deps/v8/tools/unittests/run_perf_test.py
@@ -6,8 +6,7 @@
from collections import namedtuple
import coverage
import json
-from mock import DEFAULT
-from mock import MagicMock
+from mock import MagicMock, patch
import os
from os import path, sys
import platform
@@ -27,6 +26,7 @@ TEST_WORKSPACE = path.join(tempfile.gettempdir(), "test-v8-run-perf")
V8_JSON = {
"path": ["."],
+ "owners": ["username@chromium.org"],
"binary": "d7",
"flags": ["--flag"],
"main": "run.js",
@@ -40,6 +40,7 @@ V8_JSON = {
V8_NESTED_SUITES_JSON = {
"path": ["."],
+ "owners": ["username@chromium.org"],
"flags": ["--flag"],
"run_count": 1,
"units": "score",
@@ -76,6 +77,7 @@ V8_NESTED_SUITES_JSON = {
V8_GENERIC_JSON = {
"path": ["."],
+ "owners": ["username@chromium.org"],
"binary": "cc",
"flags": ["--flag"],
"generic": True,
@@ -429,9 +431,9 @@ class PerfTest(unittest.TestCase):
platform.Run = MagicMock(
return_value=("Richards: 1.234\nDeltaBlue: 10657567\n", None))
run_perf.AndroidPlatform = MagicMock(return_value=platform)
- self.assertEquals(
- 0, self._CallMain("--android-build-tools", "/some/dir",
- "--arch", "arm"))
+ with patch.object(run_perf.Platform, 'ReadBuildConfig',
+ MagicMock(return_value={'is_android': True})):
+ self.assertEquals(0, self._CallMain("--arch", "arm"))
self._VerifyResults("test", "score", [
{"name": "Richards", "results": ["1.234"], "stddev": ""},
{"name": "DeltaBlue", "results": ["10657567.0"], "stddev": ""},
diff --git a/deps/v8/tools/unittests/testdata/test1.json b/deps/v8/tools/unittests/testdata/test1.json
index 7fa1faac3b..939d6e2612 100644
--- a/deps/v8/tools/unittests/testdata/test1.json
+++ b/deps/v8/tools/unittests/testdata/test1.json
@@ -1,5 +1,6 @@
{
"path": ["."],
+ "owners": ["username@chromium.org"],
"flags": [],
"main": "run.js",
"run_count": 2,
diff --git a/deps/v8/tools/unittests/testdata/test2.json b/deps/v8/tools/unittests/testdata/test2.json
index 79fed2652f..632c4e5c6e 100644
--- a/deps/v8/tools/unittests/testdata/test2.json
+++ b/deps/v8/tools/unittests/testdata/test2.json
@@ -1,5 +1,6 @@
{
"path": ["."],
+ "owners": ["username@chromium.org"],
"flags": [],
"main": "run.js",
"run_count": 2,
diff --git a/deps/v8/tools/unittests/testdata/test3.json b/deps/v8/tools/unittests/testdata/test3.json
index 1b7ef96aae..3e871de28a 100644
--- a/deps/v8/tools/unittests/testdata/test3.json
+++ b/deps/v8/tools/unittests/testdata/test3.json
@@ -1,5 +1,6 @@
{
"path": ["."],
+ "owners": ["username@chromium.org"],
"flags": [],
"run_count": 1,
"results_processor": "results_processor.py",
diff --git a/deps/v8/tools/unittests/testdata/testroot1/v8_build_config.json b/deps/v8/tools/unittests/testdata/testroot1/v8_build_config.json
index c5e3ee35f1..eb9f7bafdc 100644
--- a/deps/v8/tools/unittests/testdata/testroot1/v8_build_config.json
+++ b/deps/v8/tools/unittests/testdata/testroot1/v8_build_config.json
@@ -1,6 +1,7 @@
{
"current_cpu": "x64",
"dcheck_always_on": false,
+ "is_android": false,
"is_asan": false,
"is_cfi": false,
"is_component_build": false,
diff --git a/deps/v8/tools/unittests/testdata/testroot2/v8_build_config.json b/deps/v8/tools/unittests/testdata/testroot2/v8_build_config.json
index c5e3ee35f1..eb9f7bafdc 100644
--- a/deps/v8/tools/unittests/testdata/testroot2/v8_build_config.json
+++ b/deps/v8/tools/unittests/testdata/testroot2/v8_build_config.json
@@ -1,6 +1,7 @@
{
"current_cpu": "x64",
"dcheck_always_on": false,
+ "is_android": false,
"is_asan": false,
"is_cfi": false,
"is_component_build": false,
diff --git a/deps/v8/tools/v8heapconst.py b/deps/v8/tools/v8heapconst.py
index 56a74c208c..16927d85b3 100644
--- a/deps/v8/tools/v8heapconst.py
+++ b/deps/v8/tools/v8heapconst.py
@@ -1,4 +1,4 @@
-# Copyright 2017 the V8 project authors. All rights reserved.
+# Copyright 2018 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.
@@ -123,8 +123,7 @@ INSTANCE_TYPES = {
219: "STORE_HANDLER_TYPE",
220: "UNCOMPILED_DATA_WITHOUT_PRE_PARSED_SCOPE_TYPE",
221: "UNCOMPILED_DATA_WITH_PRE_PARSED_SCOPE_TYPE",
- 222: "WEAK_CELL_TYPE",
- 223: "WEAK_ARRAY_LIST_TYPE",
+ 222: "WEAK_ARRAY_LIST_TYPE",
1024: "JS_PROXY_TYPE",
1025: "JS_GLOBAL_OBJECT_TYPE",
1026: "JS_GLOBAL_PROXY_TYPE",
@@ -159,199 +158,200 @@ INSTANCE_TYPES = {
1081: "JS_WEAK_SET_TYPE",
1082: "JS_TYPED_ARRAY_TYPE",
1083: "JS_DATA_VIEW_TYPE",
- 1084: "JS_INTL_LOCALE_TYPE",
- 1085: "JS_INTL_RELATIVE_TIME_FORMAT_TYPE",
- 1086: "WASM_GLOBAL_TYPE",
- 1087: "WASM_INSTANCE_TYPE",
- 1088: "WASM_MEMORY_TYPE",
- 1089: "WASM_MODULE_TYPE",
- 1090: "WASM_TABLE_TYPE",
- 1091: "JS_BOUND_FUNCTION_TYPE",
- 1092: "JS_FUNCTION_TYPE",
+ 1084: "JS_INTL_COLLATOR_TYPE",
+ 1085: "JS_INTL_LIST_FORMAT_TYPE",
+ 1086: "JS_INTL_LOCALE_TYPE",
+ 1087: "JS_INTL_PLURAL_RULES_TYPE",
+ 1088: "JS_INTL_RELATIVE_TIME_FORMAT_TYPE",
+ 1089: "WASM_GLOBAL_TYPE",
+ 1090: "WASM_INSTANCE_TYPE",
+ 1091: "WASM_MEMORY_TYPE",
+ 1092: "WASM_MODULE_TYPE",
+ 1093: "WASM_TABLE_TYPE",
+ 1094: "JS_BOUND_FUNCTION_TYPE",
+ 1095: "JS_FUNCTION_TYPE",
}
# List of known V8 maps.
KNOWN_MAPS = {
("RO_SPACE", 0x02201): (138, "FreeSpaceMap"),
- ("RO_SPACE", 0x02259): (132, "MetaMap"),
- ("RO_SPACE", 0x022e1): (131, "NullMap"),
- ("RO_SPACE", 0x02359): (205, "DescriptorArrayMap"),
- ("RO_SPACE", 0x023c1): (182, "FixedArrayMap"),
- ("RO_SPACE", 0x02429): (222, "WeakCellMap"),
- ("RO_SPACE", 0x024d1): (152, "OnePointerFillerMap"),
- ("RO_SPACE", 0x02539): (152, "TwoPointerFillerMap"),
- ("RO_SPACE", 0x025d1): (131, "UninitializedMap"),
- ("RO_SPACE", 0x02661): (8, "OneByteInternalizedStringMap"),
- ("RO_SPACE", 0x02721): (131, "UndefinedMap"),
- ("RO_SPACE", 0x02799): (129, "HeapNumberMap"),
- ("RO_SPACE", 0x02831): (131, "TheHoleMap"),
- ("RO_SPACE", 0x028f9): (131, "BooleanMap"),
- ("RO_SPACE", 0x02a09): (136, "ByteArrayMap"),
- ("RO_SPACE", 0x02a71): (182, "FixedCOWArrayMap"),
- ("RO_SPACE", 0x02ad9): (184, "HashTableMap"),
- ("RO_SPACE", 0x02b41): (128, "SymbolMap"),
- ("RO_SPACE", 0x02ba9): (72, "OneByteStringMap"),
- ("RO_SPACE", 0x02c11): (193, "ScopeInfoMap"),
- ("RO_SPACE", 0x02c79): (216, "SharedFunctionInfoMap"),
- ("RO_SPACE", 0x02ce1): (133, "CodeMap"),
- ("RO_SPACE", 0x02d49): (199, "FunctionContextMap"),
- ("RO_SPACE", 0x02db1): (208, "CellMap"),
- ("RO_SPACE", 0x02e19): (215, "GlobalPropertyCellMap"),
- ("RO_SPACE", 0x02e81): (135, "ForeignMap"),
- ("RO_SPACE", 0x02ee9): (206, "TransitionArrayMap"),
- ("RO_SPACE", 0x02f51): (211, "FeedbackVectorMap"),
- ("RO_SPACE", 0x02ff9): (131, "ArgumentsMarkerMap"),
- ("RO_SPACE", 0x030b9): (131, "ExceptionMap"),
- ("RO_SPACE", 0x03179): (131, "TerminationExceptionMap"),
- ("RO_SPACE", 0x03241): (131, "OptimizedOutMap"),
- ("RO_SPACE", 0x03301): (131, "StaleRegisterMap"),
- ("RO_SPACE", 0x03391): (201, "NativeContextMap"),
- ("RO_SPACE", 0x033f9): (200, "ModuleContextMap"),
- ("RO_SPACE", 0x03461): (198, "EvalContextMap"),
- ("RO_SPACE", 0x034c9): (202, "ScriptContextMap"),
- ("RO_SPACE", 0x03531): (195, "BlockContextMap"),
- ("RO_SPACE", 0x03599): (196, "CatchContextMap"),
- ("RO_SPACE", 0x03601): (203, "WithContextMap"),
- ("RO_SPACE", 0x03669): (197, "DebugEvaluateContextMap"),
- ("RO_SPACE", 0x036d1): (194, "ScriptContextTableMap"),
- ("RO_SPACE", 0x03739): (151, "FeedbackMetadataArrayMap"),
- ("RO_SPACE", 0x037a1): (182, "ArrayListMap"),
- ("RO_SPACE", 0x03809): (130, "BigIntMap"),
- ("RO_SPACE", 0x03871): (183, "ObjectBoilerplateDescriptionMap"),
- ("RO_SPACE", 0x038d9): (137, "BytecodeArrayMap"),
- ("RO_SPACE", 0x03941): (209, "CodeDataContainerMap"),
- ("RO_SPACE", 0x039a9): (150, "FixedDoubleArrayMap"),
- ("RO_SPACE", 0x03a11): (188, "GlobalDictionaryMap"),
- ("RO_SPACE", 0x03a79): (210, "ManyClosuresCellMap"),
- ("RO_SPACE", 0x03ae1): (182, "ModuleInfoMap"),
- ("RO_SPACE", 0x03b49): (134, "MutableHeapNumberMap"),
- ("RO_SPACE", 0x03bb1): (187, "NameDictionaryMap"),
- ("RO_SPACE", 0x03c19): (210, "NoClosuresCellMap"),
- ("RO_SPACE", 0x03c81): (189, "NumberDictionaryMap"),
- ("RO_SPACE", 0x03ce9): (210, "OneClosureCellMap"),
- ("RO_SPACE", 0x03d51): (185, "OrderedHashMapMap"),
- ("RO_SPACE", 0x03db9): (186, "OrderedHashSetMap"),
- ("RO_SPACE", 0x03e21): (213, "PreParsedScopeDataMap"),
- ("RO_SPACE", 0x03e89): (214, "PropertyArrayMap"),
- ("RO_SPACE", 0x03ef1): (207, "SideEffectCallHandlerInfoMap"),
- ("RO_SPACE", 0x03f59): (207, "SideEffectFreeCallHandlerInfoMap"),
- ("RO_SPACE", 0x03fc1): (207, "NextCallSideEffectFreeCallHandlerInfoMap"),
- ("RO_SPACE", 0x04029): (190, "SimpleNumberDictionaryMap"),
- ("RO_SPACE", 0x04091): (182, "SloppyArgumentsElementsMap"),
- ("RO_SPACE", 0x040f9): (217, "SmallOrderedHashMapMap"),
- ("RO_SPACE", 0x04161): (218, "SmallOrderedHashSetMap"),
- ("RO_SPACE", 0x041c9): (191, "StringTableMap"),
- ("RO_SPACE", 0x04231): (220, "UncompiledDataWithoutPreParsedScopeMap"),
- ("RO_SPACE", 0x04299): (221, "UncompiledDataWithPreParsedScopeMap"),
- ("RO_SPACE", 0x04301): (204, "WeakFixedArrayMap"),
- ("RO_SPACE", 0x04369): (223, "WeakArrayListMap"),
- ("RO_SPACE", 0x043d1): (192, "EphemeronHashTableMap"),
- ("RO_SPACE", 0x04439): (106, "NativeSourceStringMap"),
- ("RO_SPACE", 0x044a1): (64, "StringMap"),
- ("RO_SPACE", 0x04509): (73, "ConsOneByteStringMap"),
- ("RO_SPACE", 0x04571): (65, "ConsStringMap"),
- ("RO_SPACE", 0x045d9): (77, "ThinOneByteStringMap"),
- ("RO_SPACE", 0x04641): (69, "ThinStringMap"),
- ("RO_SPACE", 0x046a9): (67, "SlicedStringMap"),
- ("RO_SPACE", 0x04711): (75, "SlicedOneByteStringMap"),
- ("RO_SPACE", 0x04779): (66, "ExternalStringMap"),
- ("RO_SPACE", 0x047e1): (82, "ExternalStringWithOneByteDataMap"),
- ("RO_SPACE", 0x04849): (74, "ExternalOneByteStringMap"),
- ("RO_SPACE", 0x048b1): (98, "ShortExternalStringMap"),
- ("RO_SPACE", 0x04919): (114, "ShortExternalStringWithOneByteDataMap"),
- ("RO_SPACE", 0x04981): (0, "InternalizedStringMap"),
- ("RO_SPACE", 0x049e9): (2, "ExternalInternalizedStringMap"),
- ("RO_SPACE", 0x04a51): (18, "ExternalInternalizedStringWithOneByteDataMap"),
- ("RO_SPACE", 0x04ab9): (10, "ExternalOneByteInternalizedStringMap"),
- ("RO_SPACE", 0x04b21): (34, "ShortExternalInternalizedStringMap"),
- ("RO_SPACE", 0x04b89): (50, "ShortExternalInternalizedStringWithOneByteDataMap"),
- ("RO_SPACE", 0x04bf1): (42, "ShortExternalOneByteInternalizedStringMap"),
- ("RO_SPACE", 0x04c59): (106, "ShortExternalOneByteStringMap"),
- ("RO_SPACE", 0x04cc1): (140, "FixedUint8ArrayMap"),
- ("RO_SPACE", 0x04d29): (139, "FixedInt8ArrayMap"),
- ("RO_SPACE", 0x04d91): (142, "FixedUint16ArrayMap"),
- ("RO_SPACE", 0x04df9): (141, "FixedInt16ArrayMap"),
- ("RO_SPACE", 0x04e61): (144, "FixedUint32ArrayMap"),
- ("RO_SPACE", 0x04ec9): (143, "FixedInt32ArrayMap"),
- ("RO_SPACE", 0x04f31): (145, "FixedFloat32ArrayMap"),
- ("RO_SPACE", 0x04f99): (146, "FixedFloat64ArrayMap"),
- ("RO_SPACE", 0x05001): (147, "FixedUint8ClampedArrayMap"),
- ("RO_SPACE", 0x05069): (149, "FixedBigUint64ArrayMap"),
- ("RO_SPACE", 0x050d1): (148, "FixedBigInt64ArrayMap"),
- ("RO_SPACE", 0x05139): (131, "SelfReferenceMarkerMap"),
- ("RO_SPACE", 0x051b9): (171, "Tuple2Map"),
- ("RO_SPACE", 0x05509): (161, "InterceptorInfoMap"),
- ("RO_SPACE", 0x05629): (169, "ScriptMap"),
- ("RO_SPACE", 0x0a021): (154, "AccessorInfoMap"),
- ("RO_SPACE", 0x0a089): (153, "AccessCheckInfoMap"),
- ("RO_SPACE", 0x0a0f1): (155, "AccessorPairMap"),
- ("RO_SPACE", 0x0a159): (156, "AliasedArgumentsEntryMap"),
- ("RO_SPACE", 0x0a1c1): (157, "AllocationMementoMap"),
- ("RO_SPACE", 0x0a229): (158, "AsyncGeneratorRequestMap"),
- ("RO_SPACE", 0x0a291): (159, "DebugInfoMap"),
- ("RO_SPACE", 0x0a2f9): (160, "FunctionTemplateInfoMap"),
- ("RO_SPACE", 0x0a361): (162, "InterpreterDataMap"),
- ("RO_SPACE", 0x0a3c9): (163, "ModuleInfoEntryMap"),
- ("RO_SPACE", 0x0a431): (164, "ModuleMap"),
- ("RO_SPACE", 0x0a499): (165, "ObjectTemplateInfoMap"),
- ("RO_SPACE", 0x0a501): (166, "PromiseCapabilityMap"),
- ("RO_SPACE", 0x0a569): (167, "PromiseReactionMap"),
- ("RO_SPACE", 0x0a5d1): (168, "PrototypeInfoMap"),
- ("RO_SPACE", 0x0a639): (170, "StackFrameInfoMap"),
- ("RO_SPACE", 0x0a6a1): (172, "Tuple3Map"),
- ("RO_SPACE", 0x0a709): (173, "ArrayBoilerplateDescriptionMap"),
- ("RO_SPACE", 0x0a771): (174, "WasmDebugInfoMap"),
- ("RO_SPACE", 0x0a7d9): (175, "WasmExportedFunctionDataMap"),
- ("RO_SPACE", 0x0a841): (176, "CallableTaskMap"),
- ("RO_SPACE", 0x0a8a9): (177, "CallbackTaskMap"),
- ("RO_SPACE", 0x0a911): (178, "PromiseFulfillReactionJobTaskMap"),
- ("RO_SPACE", 0x0a979): (179, "PromiseRejectReactionJobTaskMap"),
- ("RO_SPACE", 0x0a9e1): (180, "PromiseResolveThenableJobTaskMap"),
- ("RO_SPACE", 0x0aa49): (181, "AllocationSiteMap"),
- ("RO_SPACE", 0x0aab1): (181, "AllocationSiteMap"),
+ ("RO_SPACE", 0x02251): (132, "MetaMap"),
+ ("RO_SPACE", 0x022d1): (131, "NullMap"),
+ ("RO_SPACE", 0x02341): (205, "DescriptorArrayMap"),
+ ("RO_SPACE", 0x023a1): (204, "WeakFixedArrayMap"),
+ ("RO_SPACE", 0x023f1): (152, "OnePointerFillerMap"),
+ ("RO_SPACE", 0x02441): (152, "TwoPointerFillerMap"),
+ ("RO_SPACE", 0x024c1): (131, "UninitializedMap"),
+ ("RO_SPACE", 0x02539): (8, "OneByteInternalizedStringMap"),
+ ("RO_SPACE", 0x025e1): (131, "UndefinedMap"),
+ ("RO_SPACE", 0x02641): (129, "HeapNumberMap"),
+ ("RO_SPACE", 0x026c1): (131, "TheHoleMap"),
+ ("RO_SPACE", 0x02771): (131, "BooleanMap"),
+ ("RO_SPACE", 0x02869): (136, "ByteArrayMap"),
+ ("RO_SPACE", 0x028b9): (182, "FixedArrayMap"),
+ ("RO_SPACE", 0x02909): (182, "FixedCOWArrayMap"),
+ ("RO_SPACE", 0x02959): (184, "HashTableMap"),
+ ("RO_SPACE", 0x029a9): (128, "SymbolMap"),
+ ("RO_SPACE", 0x029f9): (72, "OneByteStringMap"),
+ ("RO_SPACE", 0x02a49): (193, "ScopeInfoMap"),
+ ("RO_SPACE", 0x02a99): (216, "SharedFunctionInfoMap"),
+ ("RO_SPACE", 0x02ae9): (133, "CodeMap"),
+ ("RO_SPACE", 0x02b39): (199, "FunctionContextMap"),
+ ("RO_SPACE", 0x02b89): (208, "CellMap"),
+ ("RO_SPACE", 0x02bd9): (215, "GlobalPropertyCellMap"),
+ ("RO_SPACE", 0x02c29): (135, "ForeignMap"),
+ ("RO_SPACE", 0x02c79): (206, "TransitionArrayMap"),
+ ("RO_SPACE", 0x02cc9): (211, "FeedbackVectorMap"),
+ ("RO_SPACE", 0x02d69): (131, "ArgumentsMarkerMap"),
+ ("RO_SPACE", 0x02e11): (131, "ExceptionMap"),
+ ("RO_SPACE", 0x02eb9): (131, "TerminationExceptionMap"),
+ ("RO_SPACE", 0x02f69): (131, "OptimizedOutMap"),
+ ("RO_SPACE", 0x03011): (131, "StaleRegisterMap"),
+ ("RO_SPACE", 0x03089): (201, "NativeContextMap"),
+ ("RO_SPACE", 0x030d9): (200, "ModuleContextMap"),
+ ("RO_SPACE", 0x03129): (198, "EvalContextMap"),
+ ("RO_SPACE", 0x03179): (202, "ScriptContextMap"),
+ ("RO_SPACE", 0x031c9): (195, "BlockContextMap"),
+ ("RO_SPACE", 0x03219): (196, "CatchContextMap"),
+ ("RO_SPACE", 0x03269): (203, "WithContextMap"),
+ ("RO_SPACE", 0x032b9): (197, "DebugEvaluateContextMap"),
+ ("RO_SPACE", 0x03309): (194, "ScriptContextTableMap"),
+ ("RO_SPACE", 0x03359): (151, "FeedbackMetadataArrayMap"),
+ ("RO_SPACE", 0x033a9): (182, "ArrayListMap"),
+ ("RO_SPACE", 0x033f9): (130, "BigIntMap"),
+ ("RO_SPACE", 0x03449): (183, "ObjectBoilerplateDescriptionMap"),
+ ("RO_SPACE", 0x03499): (137, "BytecodeArrayMap"),
+ ("RO_SPACE", 0x034e9): (209, "CodeDataContainerMap"),
+ ("RO_SPACE", 0x03539): (150, "FixedDoubleArrayMap"),
+ ("RO_SPACE", 0x03589): (188, "GlobalDictionaryMap"),
+ ("RO_SPACE", 0x035d9): (210, "ManyClosuresCellMap"),
+ ("RO_SPACE", 0x03629): (182, "ModuleInfoMap"),
+ ("RO_SPACE", 0x03679): (134, "MutableHeapNumberMap"),
+ ("RO_SPACE", 0x036c9): (187, "NameDictionaryMap"),
+ ("RO_SPACE", 0x03719): (210, "NoClosuresCellMap"),
+ ("RO_SPACE", 0x03769): (189, "NumberDictionaryMap"),
+ ("RO_SPACE", 0x037b9): (210, "OneClosureCellMap"),
+ ("RO_SPACE", 0x03809): (185, "OrderedHashMapMap"),
+ ("RO_SPACE", 0x03859): (186, "OrderedHashSetMap"),
+ ("RO_SPACE", 0x038a9): (213, "PreParsedScopeDataMap"),
+ ("RO_SPACE", 0x038f9): (214, "PropertyArrayMap"),
+ ("RO_SPACE", 0x03949): (207, "SideEffectCallHandlerInfoMap"),
+ ("RO_SPACE", 0x03999): (207, "SideEffectFreeCallHandlerInfoMap"),
+ ("RO_SPACE", 0x039e9): (207, "NextCallSideEffectFreeCallHandlerInfoMap"),
+ ("RO_SPACE", 0x03a39): (190, "SimpleNumberDictionaryMap"),
+ ("RO_SPACE", 0x03a89): (182, "SloppyArgumentsElementsMap"),
+ ("RO_SPACE", 0x03ad9): (217, "SmallOrderedHashMapMap"),
+ ("RO_SPACE", 0x03b29): (218, "SmallOrderedHashSetMap"),
+ ("RO_SPACE", 0x03b79): (191, "StringTableMap"),
+ ("RO_SPACE", 0x03bc9): (220, "UncompiledDataWithoutPreParsedScopeMap"),
+ ("RO_SPACE", 0x03c19): (221, "UncompiledDataWithPreParsedScopeMap"),
+ ("RO_SPACE", 0x03c69): (222, "WeakArrayListMap"),
+ ("RO_SPACE", 0x03cb9): (192, "EphemeronHashTableMap"),
+ ("RO_SPACE", 0x03d09): (106, "NativeSourceStringMap"),
+ ("RO_SPACE", 0x03d59): (64, "StringMap"),
+ ("RO_SPACE", 0x03da9): (73, "ConsOneByteStringMap"),
+ ("RO_SPACE", 0x03df9): (65, "ConsStringMap"),
+ ("RO_SPACE", 0x03e49): (77, "ThinOneByteStringMap"),
+ ("RO_SPACE", 0x03e99): (69, "ThinStringMap"),
+ ("RO_SPACE", 0x03ee9): (67, "SlicedStringMap"),
+ ("RO_SPACE", 0x03f39): (75, "SlicedOneByteStringMap"),
+ ("RO_SPACE", 0x03f89): (66, "ExternalStringMap"),
+ ("RO_SPACE", 0x03fd9): (82, "ExternalStringWithOneByteDataMap"),
+ ("RO_SPACE", 0x04029): (74, "ExternalOneByteStringMap"),
+ ("RO_SPACE", 0x04079): (98, "ShortExternalStringMap"),
+ ("RO_SPACE", 0x040c9): (114, "ShortExternalStringWithOneByteDataMap"),
+ ("RO_SPACE", 0x04119): (0, "InternalizedStringMap"),
+ ("RO_SPACE", 0x04169): (2, "ExternalInternalizedStringMap"),
+ ("RO_SPACE", 0x041b9): (18, "ExternalInternalizedStringWithOneByteDataMap"),
+ ("RO_SPACE", 0x04209): (10, "ExternalOneByteInternalizedStringMap"),
+ ("RO_SPACE", 0x04259): (34, "ShortExternalInternalizedStringMap"),
+ ("RO_SPACE", 0x042a9): (50, "ShortExternalInternalizedStringWithOneByteDataMap"),
+ ("RO_SPACE", 0x042f9): (42, "ShortExternalOneByteInternalizedStringMap"),
+ ("RO_SPACE", 0x04349): (106, "ShortExternalOneByteStringMap"),
+ ("RO_SPACE", 0x04399): (140, "FixedUint8ArrayMap"),
+ ("RO_SPACE", 0x043e9): (139, "FixedInt8ArrayMap"),
+ ("RO_SPACE", 0x04439): (142, "FixedUint16ArrayMap"),
+ ("RO_SPACE", 0x04489): (141, "FixedInt16ArrayMap"),
+ ("RO_SPACE", 0x044d9): (144, "FixedUint32ArrayMap"),
+ ("RO_SPACE", 0x04529): (143, "FixedInt32ArrayMap"),
+ ("RO_SPACE", 0x04579): (145, "FixedFloat32ArrayMap"),
+ ("RO_SPACE", 0x045c9): (146, "FixedFloat64ArrayMap"),
+ ("RO_SPACE", 0x04619): (147, "FixedUint8ClampedArrayMap"),
+ ("RO_SPACE", 0x04669): (149, "FixedBigUint64ArrayMap"),
+ ("RO_SPACE", 0x046b9): (148, "FixedBigInt64ArrayMap"),
+ ("RO_SPACE", 0x04709): (131, "SelfReferenceMarkerMap"),
+ ("RO_SPACE", 0x04771): (171, "Tuple2Map"),
+ ("RO_SPACE", 0x04811): (173, "ArrayBoilerplateDescriptionMap"),
+ ("RO_SPACE", 0x04b01): (161, "InterceptorInfoMap"),
+ ("RO_SPACE", 0x04bf9): (169, "ScriptMap"),
+ ("RO_SPACE", 0x09aa1): (154, "AccessorInfoMap"),
+ ("RO_SPACE", 0x09af1): (153, "AccessCheckInfoMap"),
+ ("RO_SPACE", 0x09b41): (155, "AccessorPairMap"),
+ ("RO_SPACE", 0x09b91): (156, "AliasedArgumentsEntryMap"),
+ ("RO_SPACE", 0x09be1): (157, "AllocationMementoMap"),
+ ("RO_SPACE", 0x09c31): (158, "AsyncGeneratorRequestMap"),
+ ("RO_SPACE", 0x09c81): (159, "DebugInfoMap"),
+ ("RO_SPACE", 0x09cd1): (160, "FunctionTemplateInfoMap"),
+ ("RO_SPACE", 0x09d21): (162, "InterpreterDataMap"),
+ ("RO_SPACE", 0x09d71): (163, "ModuleInfoEntryMap"),
+ ("RO_SPACE", 0x09dc1): (164, "ModuleMap"),
+ ("RO_SPACE", 0x09e11): (165, "ObjectTemplateInfoMap"),
+ ("RO_SPACE", 0x09e61): (166, "PromiseCapabilityMap"),
+ ("RO_SPACE", 0x09eb1): (167, "PromiseReactionMap"),
+ ("RO_SPACE", 0x09f01): (168, "PrototypeInfoMap"),
+ ("RO_SPACE", 0x09f51): (170, "StackFrameInfoMap"),
+ ("RO_SPACE", 0x09fa1): (172, "Tuple3Map"),
+ ("RO_SPACE", 0x09ff1): (174, "WasmDebugInfoMap"),
+ ("RO_SPACE", 0x0a041): (175, "WasmExportedFunctionDataMap"),
+ ("RO_SPACE", 0x0a091): (176, "CallableTaskMap"),
+ ("RO_SPACE", 0x0a0e1): (177, "CallbackTaskMap"),
+ ("RO_SPACE", 0x0a131): (178, "PromiseFulfillReactionJobTaskMap"),
+ ("RO_SPACE", 0x0a181): (179, "PromiseRejectReactionJobTaskMap"),
+ ("RO_SPACE", 0x0a1d1): (180, "PromiseResolveThenableJobTaskMap"),
+ ("RO_SPACE", 0x0a221): (181, "AllocationSiteMap"),
+ ("RO_SPACE", 0x0a271): (181, "AllocationSiteMap"),
("MAP_SPACE", 0x02201): (1057, "ExternalMap"),
- ("MAP_SPACE", 0x02259): (1072, "JSMessageObjectMap"),
+ ("MAP_SPACE", 0x02251): (1072, "JSMessageObjectMap"),
}
# List of known V8 objects.
KNOWN_OBJECTS = {
- ("RO_SPACE", 0x022b1): "NullValue",
- ("RO_SPACE", 0x02339): "EmptyDescriptorArray",
- ("RO_SPACE", 0x023b1): "EmptyFixedArray",
- ("RO_SPACE", 0x025a1): "UninitializedValue",
- ("RO_SPACE", 0x026f1): "UndefinedValue",
- ("RO_SPACE", 0x02789): "NanValue",
- ("RO_SPACE", 0x02801): "TheHoleValue",
- ("RO_SPACE", 0x028b9): "HoleNanValue",
- ("RO_SPACE", 0x028c9): "TrueValue",
- ("RO_SPACE", 0x029a1): "FalseValue",
- ("RO_SPACE", 0x029f1): "empty_string",
- ("RO_SPACE", 0x02fb9): "EmptyScopeInfo",
- ("RO_SPACE", 0x02fc9): "ArgumentsMarker",
- ("RO_SPACE", 0x03089): "Exception",
- ("RO_SPACE", 0x03149): "TerminationException",
- ("RO_SPACE", 0x03211): "OptimizedOut",
- ("RO_SPACE", 0x032d1): "StaleRegister",
- ("RO_SPACE", 0x05231): "EmptyByteArray",
- ("RO_SPACE", 0x05259): "EmptyFixedUint8Array",
- ("RO_SPACE", 0x05279): "EmptyFixedInt8Array",
- ("RO_SPACE", 0x05299): "EmptyFixedUint16Array",
- ("RO_SPACE", 0x052b9): "EmptyFixedInt16Array",
- ("RO_SPACE", 0x052d9): "EmptyFixedUint32Array",
- ("RO_SPACE", 0x052f9): "EmptyFixedInt32Array",
- ("RO_SPACE", 0x05319): "EmptyFixedFloat32Array",
- ("RO_SPACE", 0x05339): "EmptyFixedFloat64Array",
- ("RO_SPACE", 0x05359): "EmptyFixedUint8ClampedArray",
- ("RO_SPACE", 0x053b9): "EmptySloppyArgumentsElements",
- ("RO_SPACE", 0x053d9): "EmptySlowElementDictionary",
- ("RO_SPACE", 0x05421): "EmptyOrderedHashMap",
- ("RO_SPACE", 0x05449): "EmptyOrderedHashSet",
- ("RO_SPACE", 0x05481): "EmptyPropertyCell",
- ("RO_SPACE", 0x054a9): "EmptyWeakCell",
- ("RO_SPACE", 0x05599): "InfinityValue",
- ("RO_SPACE", 0x055a9): "MinusZeroValue",
- ("RO_SPACE", 0x055b9): "MinusInfinityValue",
- ("RO_SPACE", 0x055c9): "SelfReferenceMarker",
+ ("RO_SPACE", 0x022a1): "NullValue",
+ ("RO_SPACE", 0x02321): "EmptyDescriptorArray",
+ ("RO_SPACE", 0x02491): "UninitializedValue",
+ ("RO_SPACE", 0x025b1): "UndefinedValue",
+ ("RO_SPACE", 0x02631): "NanValue",
+ ("RO_SPACE", 0x02691): "TheHoleValue",
+ ("RO_SPACE", 0x02731): "HoleNanValue",
+ ("RO_SPACE", 0x02741): "TrueValue",
+ ("RO_SPACE", 0x02801): "FalseValue",
+ ("RO_SPACE", 0x02851): "empty_string",
+ ("RO_SPACE", 0x02d19): "EmptyScopeInfo",
+ ("RO_SPACE", 0x02d29): "EmptyFixedArray",
+ ("RO_SPACE", 0x02d39): "ArgumentsMarker",
+ ("RO_SPACE", 0x02de1): "Exception",
+ ("RO_SPACE", 0x02e89): "TerminationException",
+ ("RO_SPACE", 0x02f39): "OptimizedOut",
+ ("RO_SPACE", 0x02fe1): "StaleRegister",
+ ("RO_SPACE", 0x047d1): "EmptyByteArray",
+ ("RO_SPACE", 0x04861): "EmptyFixedUint8Array",
+ ("RO_SPACE", 0x04881): "EmptyFixedInt8Array",
+ ("RO_SPACE", 0x048a1): "EmptyFixedUint16Array",
+ ("RO_SPACE", 0x048c1): "EmptyFixedInt16Array",
+ ("RO_SPACE", 0x048e1): "EmptyFixedUint32Array",
+ ("RO_SPACE", 0x04901): "EmptyFixedInt32Array",
+ ("RO_SPACE", 0x04921): "EmptyFixedFloat32Array",
+ ("RO_SPACE", 0x04941): "EmptyFixedFloat64Array",
+ ("RO_SPACE", 0x04961): "EmptyFixedUint8ClampedArray",
+ ("RO_SPACE", 0x049c1): "EmptySloppyArgumentsElements",
+ ("RO_SPACE", 0x049e1): "EmptySlowElementDictionary",
+ ("RO_SPACE", 0x04a29): "EmptyOrderedHashMap",
+ ("RO_SPACE", 0x04a51): "EmptyOrderedHashSet",
+ ("RO_SPACE", 0x04a89): "EmptyPropertyCell",
+ ("RO_SPACE", 0x04b69): "InfinityValue",
+ ("RO_SPACE", 0x04b79): "MinusZeroValue",
+ ("RO_SPACE", 0x04b89): "MinusInfinityValue",
+ ("RO_SPACE", 0x04b99): "SelfReferenceMarker",
("OLD_SPACE", 0x02211): "EmptyScript",
("OLD_SPACE", 0x02291): "ManyClosuresCell",
("OLD_SPACE", 0x022b1): "NoElementsProtector",
diff --git a/deps/v8/tools/whitespace.txt b/deps/v8/tools/whitespace.txt
index e295060ab7..654e19f7e9 100644
--- a/deps/v8/tools/whitespace.txt
+++ b/deps/v8/tools/whitespace.txt
@@ -6,6 +6,5 @@ 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 autoroller bought a round of Himbeerbrause. Suddenly...
-The bartender starts to shake the bottles...............................
-.
+The autoroller bought a round of Himbeerbrause. Suddenly....
+The bartender starts to shake the bottles...