diff options
author | Michaël Zasso <targos@protonmail.com> | 2018-09-21 09:14:51 +0200 |
---|---|---|
committer | Michaël Zasso <targos@protonmail.com> | 2018-09-22 18:29:25 +0200 |
commit | 0e7ddbd3d7e9439c67573b854c49cf82c398ae82 (patch) | |
tree | 2afe372acde921cb57ddb3444ff00c5adef8848c /deps/v8/tools | |
parent | 13245dc50da4cb7443c39ef6c68d419d5e6336d4 (diff) | |
download | android-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')
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... |