diff --git a/deps/v8/.gitignore b/deps/v8/.gitignore index 69afcfd23e9bdd..e77e072c288edb 100644 --- a/deps/v8/.gitignore +++ b/deps/v8/.gitignore @@ -25,6 +25,7 @@ .cproject .d8_history .gclient_entries +.gdb_history .landmines .project .pydevproject diff --git a/deps/v8/AUTHORS b/deps/v8/AUTHORS index fdef3668bba38a..c9be8bbcda70ec 100644 --- a/deps/v8/AUTHORS +++ b/deps/v8/AUTHORS @@ -32,6 +32,7 @@ StrongLoop, Inc. <*@strongloop.com> Aaron Bieber Abdulla Kamar Akinori MUSHA +Alex Kodat Alexander Botero-Lowry Alexander Karpinsky Alexandre Vassalotti @@ -51,6 +52,7 @@ Daniel James Douglas Crosher Dusan Milosavljevic Erich Ocean +Evan Lucas Fedor Indutny Felix Geisendörfer Filipe David Manana @@ -102,7 +104,8 @@ Stefan Penner Tobias Burnus Victor Costan Vlad Burlik +Vladimir Krivosheev Vladimir Shutoff Yu Yin Zhongping Wang -柳荣一 +柳荣一 \ No newline at end of file diff --git a/deps/v8/BUILD.gn b/deps/v8/BUILD.gn index 443ffe1e48e4dc..88097133c43099 100644 --- a/deps/v8/BUILD.gn +++ b/deps/v8/BUILD.gn @@ -171,12 +171,22 @@ config("toolchain") { if (v8_target_arch == "mips64el") { defines += [ "V8_TARGET_ARCH_MIPS64" ] } + if (v8_target_arch == "s390") { + defines += [ "V8_TARGET_ARCH_S390" ] + } + if (v8_target_arch == "s390x") { + defines += [ + "V8_TARGET_ARCH_S390", + "V8_TARGET_ARCH_S390X", + ] + } if (v8_target_arch == "x86") { defines += [ "V8_TARGET_ARCH_IA32" ] } if (v8_target_arch == "x64") { defines += [ "V8_TARGET_ARCH_X64" ] } + if (is_win) { defines += [ "WIN32" ] # TODO(jochen): Support v8_enable_prof. @@ -222,7 +232,6 @@ action("js2c") { "src/js/uri.js", "src/js/math.js", "src/third_party/fdlibm/fdlibm.js", - "src/js/date.js", "src/js/regexp.js", "src/js/arraybuffer.js", "src/js/typedarray.js", @@ -266,40 +275,6 @@ action("js2c") { } } -action("js2c_code_stubs") { - visibility = [ ":*" ] # Only targets in this file can depend on this. - - script = "tools/js2c.py" - - # The script depends on this other script, this rule causes a rebuild if it - # changes. - inputs = [ "tools/jsmin.py" ] - - sources = [ - "src/js/macros.py", - "src/messages.h", - "src/js/code-stubs.js" - ] - - outputs = [ - "$target_gen_dir/code-stub-libraries.cc", - ] - - args = [ - rebase_path("$target_gen_dir/code-stub-libraries.cc", - root_build_dir), - "CODE_STUB", - ] + rebase_path(sources, root_build_dir) - - if (v8_use_external_startup_data) { - outputs += [ "$target_gen_dir/libraries_code_stub.bin" ] - args += [ - "--startup_blob", - rebase_path("$target_gen_dir/libraries_code_stub.bin", root_build_dir), - ] - } -} - action("js2c_experimental") { visibility = [ ":*" ] # Only targets in this file can depend on this. @@ -315,12 +290,14 @@ action("js2c_experimental") { "src/js/proxy.js", "src/js/generator.js", "src/js/harmony-atomics.js", - "src/js/harmony-array-includes.js", "src/js/harmony-regexp.js", "src/js/harmony-reflect.js", "src/js/harmony-object-observe.js", "src/js/harmony-sharedarraybuffer.js", - "src/js/harmony-simd.js" + "src/js/harmony-simd.js", + "src/js/harmony-species.js", + "src/js/harmony-unicode-regexps.js", + "src/js/promise-extra.js" ] outputs = [ @@ -439,7 +416,6 @@ if (v8_use_external_startup_data) { deps = [ ":js2c", - ":js2c_code_stubs", ":js2c_experimental", ":js2c_extras", ":js2c_experimental_extras", @@ -447,7 +423,6 @@ if (v8_use_external_startup_data) { sources = [ "$target_gen_dir/libraries.bin", - "$target_gen_dir/libraries_code_stub.bin", "$target_gen_dir/libraries_experimental.bin", "$target_gen_dir/libraries_extras.bin", "$target_gen_dir/libraries_experimental_extras.bin", @@ -535,7 +510,6 @@ source_set("v8_nosnapshot") { deps = [ ":js2c", - ":js2c_code_stubs", ":js2c_experimental", ":js2c_extras", ":js2c_experimental_extras", @@ -544,7 +518,6 @@ source_set("v8_nosnapshot") { sources = [ "$target_gen_dir/libraries.cc", - "$target_gen_dir/code-stub-libraries.cc", "$target_gen_dir/experimental-libraries.cc", "$target_gen_dir/extras-libraries.cc", "$target_gen_dir/experimental-extras-libraries.cc", @@ -570,7 +543,6 @@ source_set("v8_snapshot") { deps = [ ":js2c", - ":js2c_code_stubs", ":js2c_experimental", ":js2c_extras", ":js2c_experimental_extras", @@ -584,7 +556,6 @@ source_set("v8_snapshot") { sources = [ "$target_gen_dir/libraries.cc", - "$target_gen_dir/code-stub-libraries.cc", "$target_gen_dir/experimental-libraries.cc", "$target_gen_dir/extras-libraries.cc", "$target_gen_dir/experimental-extras-libraries.cc", @@ -606,7 +577,6 @@ if (v8_use_external_startup_data) { deps = [ ":js2c", - ":js2c_code_stubs", ":js2c_experimental", ":js2c_extras", ":js2c_experimental_extras", @@ -636,7 +606,10 @@ source_set("v8_base") { visibility = [ ":*" ] # Only targets in this file can depend on this. sources = [ + # TODO(fmeawad): This needs to be updated to support standalone V8 builds. + "../base/trace_event/common/trace_event_common.h", "include/v8-debug.h", + "include/v8-experimental.h", "include/v8-platform.h", "include/v8-profiler.h", "include/v8-testing.h", @@ -654,6 +627,8 @@ source_set("v8_base") { "src/allocation-site-scopes.h", "src/api.cc", "src/api.h", + "src/api-experimental.cc", + "src/api-experimental.h", "src/api-natives.cc", "src/api-natives.h", "src/arguments.cc", @@ -662,16 +637,28 @@ source_set("v8_base") { "src/assembler.h", "src/assert-scope.h", "src/assert-scope.cc", - "src/ast-expression-visitor.cc", - "src/ast-expression-visitor.h", - "src/ast-literal-reindexer.cc", - "src/ast-literal-reindexer.h", - "src/ast-numbering.cc", - "src/ast-numbering.h", - "src/ast-value-factory.cc", - "src/ast-value-factory.h", - "src/ast.cc", - "src/ast.h", + "src/ast/ast-expression-rewriter.cc", + "src/ast/ast-expression-rewriter.h", + "src/ast/ast-expression-visitor.cc", + "src/ast/ast-expression-visitor.h", + "src/ast/ast-literal-reindexer.cc", + "src/ast/ast-literal-reindexer.h", + "src/ast/ast-numbering.cc", + "src/ast/ast-numbering.h", + "src/ast/ast-value-factory.cc", + "src/ast/ast-value-factory.h", + "src/ast/ast.cc", + "src/ast/ast.h", + "src/ast/modules.cc", + "src/ast/modules.h", + "src/ast/prettyprinter.cc", + "src/ast/prettyprinter.h", + "src/ast/scopeinfo.cc", + "src/ast/scopeinfo.h", + "src/ast/scopes.cc", + "src/ast/scopes.h", + "src/ast/variables.cc", + "src/ast/variables.h", "src/atomic-utils.h", "src/background-parsing-task.cc", "src/background-parsing-task.h", @@ -722,10 +709,10 @@ source_set("v8_base") { "src/compiler/ast-loop-assignment-analyzer.h", "src/compiler/basic-block-instrumentor.cc", "src/compiler/basic-block-instrumentor.h", - "src/compiler/binary-operator-reducer.cc", - "src/compiler/binary-operator-reducer.h", "src/compiler/branch-elimination.cc", "src/compiler/branch-elimination.h", + "src/compiler/bytecode-branch-analysis.cc", + "src/compiler/bytecode-branch-analysis.h", "src/compiler/bytecode-graph-builder.cc", "src/compiler/bytecode-graph-builder.h", "src/compiler/change-lowering.cc", @@ -736,6 +723,8 @@ source_set("v8_base") { "src/compiler/code-generator-impl.h", "src/compiler/code-generator.cc", "src/compiler/code-generator.h", + "src/compiler/code-stub-assembler.cc", + "src/compiler/code-stub-assembler.h", "src/compiler/common-node-cache.cc", "src/compiler/common-node-cache.h", "src/compiler/common-operator-reducer.cc", @@ -751,6 +740,12 @@ source_set("v8_base") { "src/compiler/dead-code-elimination.cc", "src/compiler/dead-code-elimination.h", "src/compiler/diamond.h", + "src/compiler/escape-analysis.cc", + "src/compiler/escape-analysis.h", + "src/compiler/escape-analysis-reducer.cc", + "src/compiler/escape-analysis-reducer.h", + "src/compiler/fast-accessor-assembler.cc", + "src/compiler/fast-accessor-assembler.h", "src/compiler/frame.cc", "src/compiler/frame.h", "src/compiler/frame-elider.cc", @@ -772,6 +767,8 @@ source_set("v8_base") { "src/compiler/greedy-allocator.cc", "src/compiler/greedy-allocator.h", "src/compiler/instruction-codes.h", + "src/compiler/instruction-scheduler.cc", + "src/compiler/instruction-scheduler.h", "src/compiler/instruction-selector-impl.h", "src/compiler/instruction-selector.cc", "src/compiler/instruction-selector.h", @@ -781,6 +778,8 @@ source_set("v8_base") { "src/compiler/interpreter-assembler.h", "src/compiler/js-builtin-reducer.cc", "src/compiler/js-builtin-reducer.h", + "src/compiler/js-call-reducer.cc", + "src/compiler/js-call-reducer.h", "src/compiler/js-context-relaxation.cc", "src/compiler/js-context-relaxation.h", "src/compiler/js-context-specialization.cc", @@ -822,8 +821,6 @@ source_set("v8_base") { "src/compiler/machine-operator-reducer.h", "src/compiler/machine-operator.cc", "src/compiler/machine-operator.h", - "src/compiler/machine-type.cc", - "src/compiler/machine-type.h", "src/compiler/move-optimizer.cc", "src/compiler/move-optimizer.h", "src/compiler/node-aux-data.h", @@ -855,6 +852,7 @@ source_set("v8_base") { "src/compiler/register-allocator.h", "src/compiler/register-allocator-verifier.cc", "src/compiler/register-allocator-verifier.h", + "src/compiler/representation-change.cc", "src/compiler/representation-change.h", "src/compiler/schedule.cc", "src/compiler/schedule.h", @@ -874,12 +872,19 @@ source_set("v8_base") { "src/compiler/state-values-utils.h", "src/compiler/tail-call-optimization.cc", "src/compiler/tail-call-optimization.h", + "src/compiler/type-hint-analyzer.cc", + "src/compiler/type-hint-analyzer.h", + "src/compiler/type-hints.cc", + "src/compiler/type-hints.h", "src/compiler/typer.cc", "src/compiler/typer.h", "src/compiler/value-numbering-reducer.cc", "src/compiler/value-numbering-reducer.h", "src/compiler/verifier.cc", "src/compiler/verifier.h", + "src/compiler/wasm-compiler.cc", + "src/compiler/wasm-compiler.h", + "src/compiler/wasm-linkage.cc", "src/compiler/zone-pool.cc", "src/compiler/zone-pool.h", "src/compiler.cc", @@ -988,7 +993,6 @@ source_set("v8_base") { "src/elements.h", "src/execution.cc", "src/execution.h", - "src/expression-classifier.h", "src/extensions/externalize-string-extension.cc", "src/extensions/externalize-string-extension.h", "src/extensions/free-buffer-extension.cc", @@ -1015,8 +1019,6 @@ source_set("v8_base") { "src/frames.h", "src/full-codegen/full-codegen.cc", "src/full-codegen/full-codegen.h", - "src/func-name-inferrer.cc", - "src/func-name-inferrer.h", "src/futex-emulation.cc", "src/futex-emulation.h", "src/gdb-jit.cc", @@ -1095,7 +1097,11 @@ source_set("v8_base") { "src/interpreter/bytecode-array-iterator.h", "src/interpreter/bytecode-generator.cc", "src/interpreter/bytecode-generator.h", + "src/interpreter/bytecode-register-allocator.cc", + "src/interpreter/bytecode-register-allocator.h", "src/interpreter/bytecode-traits.h", + "src/interpreter/constant-array-builder.cc", + "src/interpreter/constant-array-builder.h", "src/interpreter/control-flow-builders.cc", "src/interpreter/control-flow-builders.h", "src/interpreter/interpreter.cc", @@ -1103,7 +1109,6 @@ source_set("v8_base") { "src/isolate-inl.h", "src/isolate.cc", "src/isolate.h", - "src/json-parser.h", "src/json-stringifier.h", "src/key-accumulator.h", "src/key-accumulator.cc", @@ -1120,11 +1125,13 @@ source_set("v8_base") { "src/lookup.cc", "src/lookup.h", "src/macro-assembler.h", + "src/machine-type.cc", + "src/machine-type.h", "src/messages.cc", "src/messages.h", - "src/modules.cc", - "src/modules.h", "src/msan.h", + "src/objects-body-descriptors-inl.h", + "src/objects-body-descriptors.h", "src/objects-debug.cc", "src/objects-inl.h", "src/objects-printer.cc", @@ -1134,20 +1141,31 @@ source_set("v8_base") { "src/optimizing-compile-dispatcher.h", "src/ostreams.cc", "src/ostreams.h", - "src/parameter-initializer-rewriter.cc", - "src/parameter-initializer-rewriter.h", - "src/parser.cc", - "src/parser.h", - "src/pattern-rewriter.cc", + "src/parsing/expression-classifier.h", + "src/parsing/func-name-inferrer.cc", + "src/parsing/func-name-inferrer.h", + "src/parsing/json-parser.h", + "src/parsing/parameter-initializer-rewriter.cc", + "src/parsing/parameter-initializer-rewriter.h", + "src/parsing/parser-base.h", + "src/parsing/parser.cc", + "src/parsing/parser.h", + "src/parsing/pattern-rewriter.cc", + "src/parsing/preparse-data-format.h", + "src/parsing/preparse-data.cc", + "src/parsing/preparse-data.h", + "src/parsing/preparser.cc", + "src/parsing/preparser.h", + "src/parsing/rewriter.cc", + "src/parsing/rewriter.h", + "src/parsing/scanner-character-streams.cc", + "src/parsing/scanner-character-streams.h", + "src/parsing/scanner.cc", + "src/parsing/scanner.h", + "src/parsing/token.cc", + "src/parsing/token.h", "src/pending-compilation-error-handler.cc", "src/pending-compilation-error-handler.h", - "src/preparse-data-format.h", - "src/preparse-data.cc", - "src/preparse-data.h", - "src/preparser.cc", - "src/preparser.h", - "src/prettyprinter.cc", - "src/prettyprinter.h", "src/profiler/allocation-tracker.cc", "src/profiler/allocation-tracker.h", "src/profiler/circular-queue-inl.h", @@ -1175,14 +1193,14 @@ source_set("v8_base") { "src/property.cc", "src/property.h", "src/prototype.h", - "src/rewriter.cc", - "src/rewriter.h", "src/regexp/bytecodes-irregexp.h", "src/regexp/interpreter-irregexp.cc", "src/regexp/interpreter-irregexp.h", "src/regexp/jsregexp-inl.h", "src/regexp/jsregexp.cc", "src/regexp/jsregexp.h", + "src/regexp/regexp-ast.cc", + "src/regexp/regexp-ast.h", "src/regexp/regexp-macro-assembler-irregexp-inl.h", "src/regexp/regexp-macro-assembler-irregexp.cc", "src/regexp/regexp-macro-assembler-irregexp.h", @@ -1190,6 +1208,8 @@ source_set("v8_base") { "src/regexp/regexp-macro-assembler-tracer.h", "src/regexp/regexp-macro-assembler.cc", "src/regexp/regexp-macro-assembler.h", + "src/regexp/regexp-parser.cc", + "src/regexp/regexp-parser.h", "src/regexp/regexp-stack.cc", "src/regexp/regexp-stack.h", "src/register-configuration.cc", @@ -1232,14 +1252,6 @@ source_set("v8_base") { "src/runtime/runtime.h", "src/safepoint-table.cc", "src/safepoint-table.h", - "src/scanner-character-streams.cc", - "src/scanner-character-streams.h", - "src/scanner.cc", - "src/scanner.h", - "src/scopeinfo.cc", - "src/scopeinfo.h", - "src/scopes.cc", - "src/scopes.h", "src/signature.h", "src/simulator.h", "src/small-pointer-list.h", @@ -1262,8 +1274,8 @@ source_set("v8_base") { "src/string-stream.h", "src/strtod.cc", "src/strtod.h", - "src/token.cc", - "src/token.h", + "src/tracing/trace-event.cc", + "src/tracing/trace-event.h", "src/transitions-inl.h", "src/transitions.cc", "src/transitions.h", @@ -1295,12 +1307,28 @@ source_set("v8_base") { "src/v8memory.h", "src/v8threads.cc", "src/v8threads.h", - "src/variables.cc", - "src/variables.h", "src/version.cc", "src/version.h", "src/vm-state-inl.h", "src/vm-state.h", + "src/wasm/asm-wasm-builder.cc", + "src/wasm/asm-wasm-builder.h", + "src/wasm/ast-decoder.cc", + "src/wasm/ast-decoder.h", + "src/wasm/decoder.h", + "src/wasm/encoder.cc", + "src/wasm/encoder.h", + "src/wasm/module-decoder.cc", + "src/wasm/module-decoder.h", + "src/wasm/wasm-js.cc", + "src/wasm/wasm-js.h", + "src/wasm/wasm-macro-gen.h", + "src/wasm/wasm-module.cc", + "src/wasm/wasm-module.h", + "src/wasm/wasm-opcodes.cc", + "src/wasm/wasm-opcodes.h", + "src/wasm/wasm-result.cc", + "src/wasm/wasm-result.h", "src/zone.cc", "src/zone.h", "src/zone-allocator.h", @@ -1319,6 +1347,7 @@ source_set("v8_base") { "src/crankshaft/ia32/lithium-ia32.h", "src/compiler/ia32/code-generator-ia32.cc", "src/compiler/ia32/instruction-codes-ia32.h", + "src/compiler/ia32/instruction-scheduler-ia32.cc", "src/compiler/ia32/instruction-selector-ia32.cc", "src/debug/ia32/debug-ia32.cc", "src/full-codegen/ia32/full-codegen-ia32.cc", @@ -1350,6 +1379,7 @@ source_set("v8_base") { sources += [ "src/compiler/x64/code-generator-x64.cc", "src/compiler/x64/instruction-codes-x64.h", + "src/compiler/x64/instruction-scheduler-x64.cc", "src/compiler/x64/instruction-selector-x64.cc", "src/crankshaft/x64/lithium-codegen-x64.cc", "src/crankshaft/x64/lithium-codegen-x64.h", @@ -1408,6 +1438,7 @@ source_set("v8_base") { "src/arm/simulator-arm.h", "src/compiler/arm/code-generator-arm.cc", "src/compiler/arm/instruction-codes-arm.h", + "src/compiler/arm/instruction-scheduler-arm.cc", "src/compiler/arm/instruction-selector-arm.cc", "src/crankshaft/arm/lithium-arm.cc", "src/crankshaft/arm/lithium-arm.h", @@ -1460,6 +1491,7 @@ source_set("v8_base") { "src/arm64/utils-arm64.h", "src/compiler/arm64/code-generator-arm64.cc", "src/compiler/arm64/instruction-codes-arm64.h", + "src/compiler/arm64/instruction-scheduler-arm64.cc", "src/compiler/arm64/instruction-selector-arm64.cc", "src/crankshaft/arm64/delayed-masm-arm64.cc", "src/crankshaft/arm64/delayed-masm-arm64.h", @@ -1484,6 +1516,7 @@ source_set("v8_base") { sources += [ "src/compiler/mips/code-generator-mips.cc", "src/compiler/mips/instruction-codes-mips.h", + "src/compiler/mips/instruction-scheduler-mips.cc", "src/compiler/mips/instruction-selector-mips.cc", "src/crankshaft/mips/lithium-codegen-mips.cc", "src/crankshaft/mips/lithium-codegen-mips.h", @@ -1525,6 +1558,7 @@ source_set("v8_base") { sources += [ "compiler/mips64/code-generator-mips64.cc", "compiler/mips64/instruction-codes-mips64.h", + "compiler/mips64/instruction-scheduler-mips64.cc", "compiler/mips64/instruction-selector-mips64.cc", "src/crankshaft/mips64/lithium-codegen-mips64.cc", "src/crankshaft/mips64/lithium-codegen-mips64.h", diff --git a/deps/v8/ChangeLog b/deps/v8/ChangeLog index 4311545a5a79c8..54bcbe4275a99c 100644 --- a/deps/v8/ChangeLog +++ b/deps/v8/ChangeLog @@ -1,3 +1,2241 @@ +2016-01-14: Version 4.9.385 + + Performance and stability improvements on all platforms. + + +2016-01-14: Version 4.9.384 + + Performance and stability improvements on all platforms. + + +2016-01-14: Version 4.9.383 + + Performance and stability improvements on all platforms. + + +2016-01-14: Version 4.9.382 + + Performance and stability improvements on all platforms. + + +2016-01-14: Version 4.9.381 + + Performance and stability improvements on all platforms. + + +2016-01-14: Version 4.9.380 + + Performance and stability improvements on all platforms. + + +2016-01-14: Version 4.9.379 + + Performance and stability improvements on all platforms. + + +2016-01-14: Version 4.9.378 + + Performance and stability improvements on all platforms. + + +2016-01-13: Version 4.9.377 + + Performance and stability improvements on all platforms. + + +2016-01-13: Version 4.9.376 + + Performance and stability improvements on all platforms. + + +2016-01-13: Version 4.9.375 + + Performance and stability improvements on all platforms. + + +2016-01-13: Version 4.9.374 + + Performance and stability improvements on all platforms. + + +2016-01-13: Version 4.9.373 + + Performance and stability improvements on all platforms. + + +2016-01-13: Version 4.9.372 + + Performance and stability improvements on all platforms. + + +2016-01-13: Version 4.9.371 + + Performance and stability improvements on all platforms. + + +2016-01-13: Version 4.9.370 + + Performance and stability improvements on all platforms. + + +2016-01-13: Version 4.9.369 + + Performance and stability improvements on all platforms. + + +2016-01-13: Version 4.9.368 + + Performance and stability improvements on all platforms. + + +2016-01-13: Version 4.9.367 + + Performance and stability improvements on all platforms. + + +2016-01-13: Version 4.9.366 + + Performance and stability improvements on all platforms. + + +2016-01-13: Version 4.9.365 + + Performance and stability improvements on all platforms. + + +2016-01-13: Version 4.9.364 + + Performance and stability improvements on all platforms. + + +2016-01-13: Version 4.9.363 + + Performance and stability improvements on all platforms. + + +2016-01-13: Version 4.9.362 + + Performance and stability improvements on all platforms. + + +2016-01-13: Version 4.9.361 + + Disable concurrent osr (issue 4650). + + Performance and stability improvements on all platforms. + + +2016-01-13: Version 4.9.360 + + Performance and stability improvements on all platforms. + + +2016-01-13: Version 4.9.359 + + Performance and stability improvements on all platforms. + + +2016-01-12: Version 4.9.358 + + Performance and stability improvements on all platforms. + + +2016-01-12: Version 4.9.357 + + Performance and stability improvements on all platforms. + + +2016-01-12: Version 4.9.356 + + [wasm] Rename the WASM object to _WASMEXP_ (Chromium issue 575167). + + Performance and stability improvements on all platforms. + + +2016-01-12: Version 4.9.355 + + Performance and stability improvements on all platforms. + + +2016-01-12: Version 4.9.354 + + Reland of "[Proxies] Ship Proxies + Reflect." (issues 1543, 3931). + + Performance and stability improvements on all platforms. + + +2016-01-12: Version 4.9.353 + + Performance and stability improvements on all platforms. + + +2016-01-12: Version 4.9.352 + + Gracefully handle proxies in AllCanWrite() (issue 1543, Chromium issue + 576662). + + Performance and stability improvements on all platforms. + + +2016-01-12: Version 4.9.351 + + [wasm] Fix double to int conversions (Chromium issue 576560). + + Performance and stability improvements on all platforms. + + +2016-01-12: Version 4.9.350 + + [Proxies] Ship Proxies + Reflect (issues 1543, 3931). + + Performance and stability improvements on all platforms. + + +2016-01-12: Version 4.9.349 + + Performance and stability improvements on all platforms. + + +2016-01-12: Version 4.9.348 + + Performance and stability improvements on all platforms. + + +2016-01-12: Version 4.9.347 + + Performance and stability improvements on all platforms. + + +2016-01-12: Version 4.9.346 + + Performance and stability improvements on all platforms. + + +2016-01-12: Version 4.9.345 + + Add @@species/better subclassing support to Promises (issue 4633, + Chromium issue 575314). + + TypedArray and ArrayBuffer support for @@species (issue 4093). + + Performance and stability improvements on all platforms. + + +2016-01-12: Version 4.9.344 + + Performance and stability improvements on all platforms. + + +2016-01-11: Version 4.9.343 + + Performance and stability improvements on all platforms. + + +2016-01-11: Version 4.9.342 + + Ship ES2015 sloppy-mode const semantics (issue 3305). + + Performance and stability improvements on all platforms. + + +2016-01-11: Version 4.9.341 + + Partial rollback of Promise error checking (issue 4633). + + Performance and stability improvements on all platforms. + + +2016-01-11: Version 4.9.340 + + Performance and stability improvements on all platforms. + + +2016-01-11: Version 4.9.339 + + Performance and stability improvements on all platforms. + + +2016-01-11: Version 4.9.338 + + [wasm] Fix set_local appearing in unreachable code (Chromium issue + 575861). + + Performance and stability improvements on all platforms. + + +2016-01-11: Version 4.9.337 + + Performance and stability improvements on all platforms. + + +2016-01-11: Version 4.9.336 + + Performance and stability improvements on all platforms. + + +2016-01-11: Version 4.9.335 + + Performance and stability improvements on all platforms. + + +2016-01-11: Version 4.9.334 + + [wasm] Avoid crashing if parsing fails in asm -> wasm (Chromium issue + 575369). + + Performance and stability improvements on all platforms. + + +2016-01-11: Version 4.9.333 + + Performance and stability improvements on all platforms. + + +2016-01-11: Version 4.9.332 + + Performance and stability improvements on all platforms. + + +2016-01-11: Version 4.9.331 + + Performance and stability improvements on all platforms. + + +2016-01-09: Version 4.9.330 + + Performance and stability improvements on all platforms. + + +2016-01-08: Version 4.9.329 + + Performance and stability improvements on all platforms. + + +2016-01-08: Version 4.9.328 + + Performance and stability improvements on all platforms. + + +2016-01-08: Version 4.9.327 + + Performance and stability improvements on all platforms. + + +2016-01-08: Version 4.9.326 + + Performance and stability improvements on all platforms. + + +2016-01-08: Version 4.9.325 + + Performance and stability improvements on all platforms. + + +2016-01-08: Version 4.9.324 + + Performance and stability improvements on all platforms. + + +2016-01-08: Version 4.9.323 + + Fix sloppy block-scoped function hoisting with nested zones (Chromium + issue 537816). + + Performance and stability improvements on all platforms. + + +2016-01-08: Version 4.9.322 + + Performance and stability improvements on all platforms. + + +2016-01-08: Version 4.9.321 + + Performance and stability improvements on all platforms. + + +2016-01-08: Version 4.9.320 + + Performance and stability improvements on all platforms. + + +2016-01-08: Version 4.9.319 + + [wasm] Fix validation error for missing return statement in asm.js + module (Chromium issue 575364). + + Performance and stability improvements on all platforms. + + +2016-01-08: Version 4.9.318 + + Performance and stability improvements on all platforms. + + +2016-01-08: Version 4.9.317 + + Performance and stability improvements on all platforms. + + +2016-01-08: Version 4.9.316 + + Performance and stability improvements on all platforms. + + +2016-01-08: Version 4.9.315 + + Performance and stability improvements on all platforms. + + +2016-01-08: Version 4.9.314 + + Performance and stability improvements on all platforms. + + +2016-01-07: Version 4.9.313 + + Performance and stability improvements on all platforms. + + +2016-01-07: Version 4.9.312 + + Performance and stability improvements on all platforms. + + +2016-01-07: Version 4.9.311 + + Performance and stability improvements on all platforms. + + +2016-01-07: Version 4.9.310 + + Performance and stability improvements on all platforms. + + +2016-01-07: Version 4.9.309 + + Performance and stability improvements on all platforms. + + +2016-01-07: Version 4.9.308 + + Performance and stability improvements on all platforms. + + +2016-01-07: Version 4.9.307 + + Performance and stability improvements on all platforms. + + +2016-01-07: Version 4.9.306 + + Performance and stability improvements on all platforms. + + +2016-01-07: Version 4.9.305 + + Performance and stability improvements on all platforms. + + +2016-01-07: Version 4.9.304 + + Performance and stability improvements on all platforms. + + +2016-01-07: Version 4.9.303 + + Performance and stability improvements on all platforms. + + +2016-01-07: Version 4.9.302 + + Performance and stability improvements on all platforms. + + +2016-01-07: Version 4.9.301 + + Performance and stability improvements on all platforms. + + +2016-01-07: Version 4.9.300 + + Add Array support for @@species and subclassing (issue 4093). + + Performance and stability improvements on all platforms. + + +2016-01-06: Version 4.9.299 + + Performance and stability improvements on all platforms. + + +2016-01-06: Version 4.9.298 + + Performance and stability improvements on all platforms. + + +2016-01-06: Version 4.9.297 + + Performance and stability improvements on all platforms. + + +2016-01-05: Version 4.9.296 + + Performance and stability improvements on all platforms. + + +2016-01-05: Version 4.9.295 + + Ship ES2015 sloppy-mode function hoisting, let, class (issues 3305, + 4285). + + Ship destructuring assignment (issue 811). + + Performance and stability improvements on all platforms. + + +2016-01-05: Version 4.9.294 + + Performance and stability improvements on all platforms. + + +2016-01-05: Version 4.9.293 + + Performance and stability improvements on all platforms. + + +2016-01-05: Version 4.9.292 + + Performance and stability improvements on all platforms. + + +2016-01-05: Version 4.9.291 + + Performance and stability improvements on all platforms. + + +2016-01-05: Version 4.9.290 + + Performance and stability improvements on all platforms. + + +2016-01-05: Version 4.9.289 + + Performance and stability improvements on all platforms. + + +2016-01-05: Version 4.9.288 + + Performance and stability improvements on all platforms. + + +2016-01-05: Version 4.9.287 + + Performance and stability improvements on all platforms. + + +2016-01-05: Version 4.9.286 + + Performance and stability improvements on all platforms. + + +2016-01-05: Version 4.9.285 + + Accept time zones like GMT-8 in the legacy date parser (Chromium issue + 422858). + + Timezone name check fix (Chromium issue 364374). + + Add a --harmony-species flag, defining @@species on constructors (issue + 4093). + + Performance and stability improvements on all platforms. + + +2016-01-04: Version 4.9.284 + + Performance and stability improvements on all platforms. + + +2016-01-04: Version 4.9.283 + + Performance and stability improvements on all platforms. + + +2016-01-04: Version 4.9.282 + + Performance and stability improvements on all platforms. + + +2016-01-04: Version 4.9.281 + + Performance and stability improvements on all platforms. + + +2016-01-04: Version 4.9.280 + + Performance and stability improvements on all platforms. + + +2016-01-01: Version 4.9.279 + + Performance and stability improvements on all platforms. + + +2015-12-31: Version 4.9.278 + + Performance and stability improvements on all platforms. + + +2015-12-31: Version 4.9.277 + + Fix 'illegal access' in Date constructor edge case (issue 4640). + + Reland of Use ES2015-style TypedArray prototype chain (patchset #1 id:1 + of https://codereview.chromium.org/1554523002/ ) (issue 4085). + + Performance and stability improvements on all platforms. + + +2015-12-30: Version 4.9.276 + + Reland "Clean up promises and fix an edge case bug (patchset #4 id:60001 + of https://codereview.chromium.org/1488783002/ )" (issue 3641). + + Performance and stability improvements on all platforms. + + +2015-12-30: Version 4.9.275 + + Performance and stability improvements on all platforms. + + +2015-12-30: Version 4.9.274 + + Performance and stability improvements on all platforms. + + +2015-12-30: Version 4.9.273 + + Performance and stability improvements on all platforms. + + +2015-12-29: Version 4.9.272 + + Performance and stability improvements on all platforms. + + +2015-12-29: Version 4.9.271 + + Performance and stability improvements on all platforms. + + +2015-12-29: Version 4.9.270 + + [crankshaft] Don't inline array resize operations if receiver's proto is + not a JSObject (Chromium issue 571064). + + Performance and stability improvements on all platforms. + + +2015-12-29: Version 4.9.269 + + [ic] Fixed receiver_map register trashing in KeyedStoreIC megamorphic + (Chromium issue 571370). + + Performance and stability improvements on all platforms. + + +2015-12-29: Version 4.9.268 + + Use ES2015-style TypedArray prototype chain (issue 4085). + + Guard the property RegExp.prototype.unicode behind --harmony-regexp- + unicode (issue 4644). + + Performance and stability improvements on all platforms. + + +2015-12-28: Version 4.9.267 + + Performance and stability improvements on all platforms. + + +2015-12-28: Version 4.9.266 + + Performance and stability improvements on all platforms. + + +2015-12-26: Version 4.9.265 + + Performance and stability improvements on all platforms. + + +2015-12-26: Version 4.9.264 + + Performance and stability improvements on all platforms. + + +2015-12-25: Version 4.9.263 + + Performance and stability improvements on all platforms. + + +2015-12-24: Version 4.9.262 + + Performance and stability improvements on all platforms. + + +2015-12-24: Version 4.9.261 + + Performance and stability improvements on all platforms. + + +2015-12-23: Version 4.9.260 + + Performance and stability improvements on all platforms. + + +2015-12-23: Version 4.9.259 + + Performance and stability improvements on all platforms. + + +2015-12-23: Version 4.9.258 + + Performance and stability improvements on all platforms. + + +2015-12-23: Version 4.9.257 + + [elements] Enable left-trimming again (issue 4606). + + Performance and stability improvements on all platforms. + + +2015-12-23: Version 4.9.256 + + Performance and stability improvements on all platforms. + + +2015-12-23: Version 4.9.255 + + Reland of Add web compat workarounds for ES2015 RegExp semantics + (patchset #3 id:40001 of https://codereview.chromium.org/1543723002/ ) + (issues 4617, 4637). + + Add web compat workarounds for ES2015 RegExp semantics (issues 4617, + 4637). + + Performance and stability improvements on all platforms. + + +2015-12-22: Version 4.9.254 + + Performance and stability improvements on all platforms. + + +2015-12-22: Version 4.9.253 + + Performance and stability improvements on all platforms. + + +2015-12-21: Version 4.9.252 + + [ES6] Stage sloppy function block scoping (issue 3305). + + Performance and stability improvements on all platforms. + + +2015-12-21: Version 4.9.251 + + Performance and stability improvements on all platforms. + + +2015-12-21: Version 4.9.250 + + Performance and stability improvements on all platforms. + + +2015-12-21: Version 4.9.249 + + Performance and stability improvements on all platforms. + + +2015-12-21: Version 4.9.248 + + Performance and stability improvements on all platforms. + + +2015-12-21: Version 4.9.247 + + Performance and stability improvements on all platforms. + + +2015-12-21: Version 4.9.246 + + Performance and stability improvements on all platforms. + + +2015-12-21: Version 4.9.245 + + Performance and stability improvements on all platforms. + + +2015-12-20: Version 4.9.244 + + Performance and stability improvements on all platforms. + + +2015-12-20: Version 4.9.243 + + Mark all APIs without callers in Blink as deprecated. + + Performance and stability improvements on all platforms. + + +2015-12-19: Version 4.9.242 + + Performance and stability improvements on all platforms. + + +2015-12-19: Version 4.9.241 + + Performance and stability improvements on all platforms. + + +2015-12-18: Version 4.9.240 + + Performance and stability improvements on all platforms. + + +2015-12-18: Version 4.9.239 + + Performance and stability improvements on all platforms. + + +2015-12-18: Version 4.9.238 + + Performance and stability improvements on all platforms. + + +2015-12-18: Version 4.9.237 + + Stage Proxies and Reflect behind --harmony flag (issues 1543, 3931). + + Performance and stability improvements on all platforms. + + +2015-12-18: Version 4.9.236 + + Performance and stability improvements on all platforms. + + +2015-12-18: Version 4.9.235 + + Performance and stability improvements on all platforms. + + +2015-12-18: Version 4.9.234 + + Performance and stability improvements on all platforms. + + +2015-12-17: Version 4.9.233 + + Performance and stability improvements on all platforms. + + +2015-12-17: Version 4.9.232 + + Performance and stability improvements on all platforms. + + +2015-12-17: Version 4.9.231 + + Performance and stability improvements on all platforms. + + +2015-12-17: Version 4.9.230 + + Performance and stability improvements on all platforms. + + +2015-12-17: Version 4.9.229 + + Performance and stability improvements on all platforms. + + +2015-12-17: Version 4.9.228 + + Performance and stability improvements on all platforms. + + +2015-12-17: Version 4.9.227 + + Performance and stability improvements on all platforms. + + +2015-12-17: Version 4.9.226 + + [IC] Fix "compatible receiver" checks hidden behind interceptors + (Chromium issue 497632). + + Performance and stability improvements on all platforms. + + +2015-12-17: Version 4.9.225 + + Performance and stability improvements on all platforms. + + +2015-12-17: Version 4.9.224 + + Performance and stability improvements on all platforms. + + +2015-12-17: Version 4.9.223 + + Performance and stability improvements on all platforms. + + +2015-12-17: Version 4.9.222 + + Performance and stability improvements on all platforms. + + +2015-12-17: Version 4.9.221 + + Performance and stability improvements on all platforms. + + +2015-12-16: Version 4.9.220 + + Performance and stability improvements on all platforms. + + +2015-12-16: Version 4.9.219 + + Performance and stability improvements on all platforms. + + +2015-12-16: Version 4.9.218 + + Performance and stability improvements on all platforms. + + +2015-12-16: Version 4.9.217 + + Performance and stability improvements on all platforms. + + +2015-12-16: Version 4.9.216 + + Stage destructuring assignment (issue 811). + + Update DEPS entry for tracing to point at correct location. + + Performance and stability improvements on all platforms. + + +2015-12-16: Version 4.9.215 + + [harmony] unstage regexp lookbehind assertions (issue 4545). + + Move Object.observe back to shipping temporarily (Chromium issues + 552100, 569417, 569647). + + Performance and stability improvements on all platforms. + + +2015-12-14: Version 4.9.214 + + Performance and stability improvements on all platforms. + + +2015-12-14: Version 4.9.213 + + Performance and stability improvements on all platforms. + + +2015-12-14: Version 4.9.212 + + [harmony] stage regexp lookbehind assertions (issue 4545). + + [es6] ship regexp sticky flag (issue 4342). + + Performance and stability improvements on all platforms. + + +2015-12-14: Version 4.9.211 + + Performance and stability improvements on all platforms. + + +2015-12-11: Version 4.9.210 + + Performance and stability improvements on all platforms. + + +2015-12-11: Version 4.9.209 + + Performance and stability improvements on all platforms. + + +2015-12-11: Version 4.9.208 + + Performance and stability improvements on all platforms. + + +2015-12-11: Version 4.9.207 + + Performance and stability improvements on all platforms. + + +2015-12-11: Version 4.9.206 + + [es6] Support Function name inference in variable declarations (issue + 3699). + + Performance and stability improvements on all platforms. + + +2015-12-11: Version 4.9.205 + + Performance and stability improvements on all platforms. + + +2015-12-11: Version 4.9.204 + + Disable --harmony-object-observe (Chromium issue 552100). + + Performance and stability improvements on all platforms. + + +2015-12-11: Version 4.9.203 + + Performance and stability improvements on all platforms. + + +2015-12-11: Version 4.9.202 + + Performance and stability improvements on all platforms. + + +2015-12-11: Version 4.9.201 + + Performance and stability improvements on all platforms. + + +2015-12-11: Version 4.9.200 + + Performance and stability improvements on all platforms. + + +2015-12-11: Version 4.9.199 + + Performance and stability improvements on all platforms. + + +2015-12-11: Version 4.9.198 + + Performance and stability improvements on all platforms. + + +2015-12-11: Version 4.9.197 + + Performance and stability improvements on all platforms. + + +2015-12-11: Version 4.9.196 + + Re-re-land FastAccessorBuilder (Chromium issue 508898). + + Performance and stability improvements on all platforms. + + +2015-12-11: Version 4.9.195 + + Performance and stability improvements on all platforms. + + +2015-12-11: Version 4.9.194 + + Performance and stability improvements on all platforms. + + +2015-12-10: Version 4.9.193 + + Performance and stability improvements on all platforms. + + +2015-12-10: Version 4.9.192 + + Unstage non-standard Promise functions (issue 3237). + + Performance and stability improvements on all platforms. + + +2015-12-10: Version 4.9.191 + + Performance and stability improvements on all platforms. + + +2015-12-10: Version 4.9.190 + + Performance and stability improvements on all platforms. + + +2015-12-10: Version 4.9.189 + + Allow ICU to normalize time zones (Chromium issue 487322). + + Fix FuncNameInferrer usage in ParseAssignmentExpression (issue 4595). + + Performance and stability improvements on all platforms. + + +2015-12-10: Version 4.9.188 + + Fix Function subclassing (issues 3101, 3330, 4597). + + Performance and stability improvements on all platforms. + + +2015-12-10: Version 4.9.187 + + Performance and stability improvements on all platforms. + + +2015-12-10: Version 4.9.186 + + Performance and stability improvements on all platforms. + + +2015-12-10: Version 4.9.185 + + Performance and stability improvements on all platforms. + + +2015-12-10: Version 4.9.184 + + Re-land FastAccessorBuilder (Chromium issue 508898). + + Performance and stability improvements on all platforms. + + +2015-12-10: Version 4.9.183 + + Performance and stability improvements on all platforms. + + +2015-12-10: Version 4.9.182 + + Performance and stability improvements on all platforms. + + +2015-12-10: Version 4.9.181 + + Performance and stability improvements on all platforms. + + +2015-12-10: Version 4.9.180 + + Performance and stability improvements on all platforms. + + +2015-12-10: Version 4.9.179 + + Performance and stability improvements on all platforms. + + +2015-12-10: Version 4.9.178 + + Implement FastAccessorBuilder (Chromium issue 508898). + + Performance and stability improvements on all platforms. + + +2015-12-10: Version 4.9.177 + + Performance and stability improvements on all platforms. + + +2015-12-09: Version 4.9.176 + + Updated the check for unmodfied objects to handle Smi Objects (Chromium + issue 553287). + + Performance and stability improvements on all platforms. + + +2015-12-09: Version 4.9.175 + + Performance and stability improvements on all platforms. + + +2015-12-09: Version 4.9.174 + + Performance and stability improvements on all platforms. + + +2015-12-08: Version 4.9.173 + + Performance and stability improvements on all platforms. + + +2015-12-08: Version 4.9.172 + + Performance and stability improvements on all platforms. + + +2015-12-08: Version 4.9.171 + + Remove usage of deprecated APIs from api interceptor tests (issue 4341). + + Deprecate Promise::Chain from V8 APIs (issue 3237). + + Set the Gregorian changeover date to the beginning of time in Intl + (Chromium issue 537382). + + Performance and stability improvements on all platforms. + + +2015-12-07: Version 4.9.170 + + Performance and stability improvements on all platforms. + + +2015-12-07: Version 4.9.169 + + Performance and stability improvements on all platforms. + + +2015-12-07: Version 4.9.168 + + Performance and stability improvements on all platforms. + + +2015-12-07: Version 4.9.167 + + Performance and stability improvements on all platforms. + + +2015-12-07: Version 4.9.166 + + Performance and stability improvements on all platforms. + + +2015-12-07: Version 4.9.165 + + Performance and stability improvements on all platforms. + + +2015-12-07: Version 4.9.164 + + Performance and stability improvements on all platforms. + + +2015-12-07: Version 4.9.163 + + Performance and stability improvements on all platforms. + + +2015-12-07: Version 4.9.162 + + Performance and stability improvements on all platforms. + + +2015-12-07: Version 4.9.161 + + Performance and stability improvements on all platforms. + + +2015-12-07: Version 4.9.160 + + Performance and stability improvements on all platforms. + + +2015-12-07: Version 4.9.159 + + Performance and stability improvements on all platforms. + + +2015-12-07: Version 4.9.158 + + Performance and stability improvements on all platforms. + + +2015-12-06: Version 4.9.157 + + Performance and stability improvements on all platforms. + + +2015-12-06: Version 4.9.156 + + Performance and stability improvements on all platforms. + + +2015-12-06: Version 4.9.155 + + Performance and stability improvements on all platforms. + + +2015-12-05: Version 4.9.154 + + Performance and stability improvements on all platforms. + + +2015-12-05: Version 4.9.153 + + Performance and stability improvements on all platforms. + + +2015-12-05: Version 4.9.152 + + Clean up promises and fix an edge case bug (issue 3641). + + Performance and stability improvements on all platforms. + + +2015-12-04: Version 4.9.151 + + [es6] implement destructuring assignment (issue 811). + + Performance and stability improvements on all platforms. + + +2015-12-04: Version 4.9.150 + + Performance and stability improvements on all platforms. + + +2015-12-04: Version 4.9.149 + + Mark deprecated debugger APIs as such. + + Performance and stability improvements on all platforms. + + +2015-12-04: Version 4.9.148 + + Performance and stability improvements on all platforms. + + +2015-12-04: Version 4.9.147 + + Performance and stability improvements on all platforms. + + +2015-12-04: Version 4.9.146 + + Performance and stability improvements on all platforms. + + +2015-12-04: Version 4.9.145 + + Performance and stability improvements on all platforms. + + +2015-12-04: Version 4.9.144 + + Performance and stability improvements on all platforms. + + +2015-12-04: Version 4.9.143 + + Performance and stability improvements on all platforms. + + +2015-12-04: Version 4.9.142 + + Performance and stability improvements on all platforms. + + +2015-12-04: Version 4.9.141 + + Performance and stability improvements on all platforms. + + +2015-12-04: Version 4.9.140 + + Performance and stability improvements on all platforms. + + +2015-12-04: Version 4.9.139 + + Performance and stability improvements on all platforms. + + +2015-12-04: Version 4.9.138 + + Performance and stability improvements on all platforms. + + +2015-12-04: Version 4.9.137 + + Performance and stability improvements on all platforms. + + +2015-12-04: Version 4.9.136 + + Mark BooleanObject::New() as deprecated. + + Performance and stability improvements on all platforms. + + +2015-12-03: Version 4.9.135 + + For non-prototype objects constructed using base==new.target, use the + cached constructor to render the name (Chromium issue 563791). + + Performance and stability improvements on all platforms. + + +2015-12-03: Version 4.9.134 + + Deprecate non-standard Array methods and clarify Object::isArray. + + Performance and stability improvements on all platforms. + + +2015-12-03: Version 4.9.133 + + Performance and stability improvements on all platforms. + + +2015-12-03: Version 4.9.132 + + Fix inobject slack tracking for both subclassing and non-subclassing + cases (Chromium issue 563339). + + Performance and stability improvements on all platforms. + + +2015-12-03: Version 4.9.131 + + Performance and stability improvements on all platforms. + + +2015-12-03: Version 4.9.130 + + Performance and stability improvements on all platforms. + + +2015-12-02: Version 4.9.129 + + Removed support deprecated (//@|/*@) source(URL|MappingURL)= (Chromium + issue 558998). + + Performance and stability improvements on all platforms. + + +2015-12-02: Version 4.9.128 + + Improve rendering of callsite with non-function target (issue 3953). + + Performance and stability improvements on all platforms. + + +2015-12-02: Version 4.9.127 + + Performance and stability improvements on all platforms. + + +2015-12-02: Version 4.9.126 + + Performance and stability improvements on all platforms. + + +2015-12-02: Version 4.9.125 + + Performance and stability improvements on all platforms. + + +2015-12-02: Version 4.9.124 + + Performance and stability improvements on all platforms. + + +2015-12-02: Version 4.9.123 + + Performance and stability improvements on all platforms. + + +2015-12-02: Version 4.9.122 + + Performance and stability improvements on all platforms. + + +2015-12-02: Version 4.9.121 + + Performance and stability improvements on all platforms. + + +2015-12-01: Version 4.9.120 + + Performance and stability improvements on all platforms. + + +2015-12-01: Version 4.9.119 + + Performance and stability improvements on all platforms. + + +2015-12-01: Version 4.9.118 + + Performance and stability improvements on all platforms. + + +2015-12-01: Version 4.9.117 + + Performance and stability improvements on all platforms. + + +2015-12-01: Version 4.9.116 + + Performance and stability improvements on all platforms. + + +2015-12-01: Version 4.9.115 + + Performance and stability improvements on all platforms. + + +2015-12-01: Version 4.9.114 + + Performance and stability improvements on all platforms. + + +2015-12-01: Version 4.9.113 + + Performance and stability improvements on all platforms. + + +2015-11-30: Version 4.9.112 + + Performance and stability improvements on all platforms. + + +2015-11-30: Version 4.9.111 + + Performance and stability improvements on all platforms. + + +2015-11-30: Version 4.9.110 + + Performance and stability improvements on all platforms. + + +2015-11-30: Version 4.9.109 + + Performance and stability improvements on all platforms. + + +2015-11-30: Version 4.9.108 + + Performance and stability improvements on all platforms. + + +2015-11-30: Version 4.9.107 + + Performance and stability improvements on all platforms. + + +2015-11-30: Version 4.9.106 + + Performance and stability improvements on all platforms. + + +2015-11-30: Version 4.9.105 + + Performance and stability improvements on all platforms. + + +2015-11-30: Version 4.9.104 + + Performance and stability improvements on all platforms. + + +2015-11-30: Version 4.9.103 + + Performance and stability improvements on all platforms. + + +2015-11-30: Version 4.9.102 + + Performance and stability improvements on all platforms. + + +2015-11-30: Version 4.9.101 + + Performance and stability improvements on all platforms. + + +2015-11-30: Version 4.9.100 + + Move RMA::Label out of the class, so it can be forward declared + (Chromium issue 508898). + + Performance and stability improvements on all platforms. + + +2015-11-30: Version 4.9.99 + + Performance and stability improvements on all platforms. + + +2015-11-30: Version 4.9.98 + + Performance and stability improvements on all platforms. + + +2015-11-30: Version 4.9.97 + + Performance and stability improvements on all platforms. + + +2015-11-30: Version 4.9.96 + + Performance and stability improvements on all platforms. + + +2015-11-30: Version 4.9.95 + + Performance and stability improvements on all platforms. + + +2015-11-29: Version 4.9.94 + + Performance and stability improvements on all platforms. + + +2015-11-29: Version 4.9.93 + + Performance and stability improvements on all platforms. + + +2015-11-28: Version 4.9.92 + + Performance and stability improvements on all platforms. + + +2015-11-28: Version 4.9.91 + + Performance and stability improvements on all platforms. + + +2015-11-27: Version 4.9.90 + + Performance and stability improvements on all platforms. + + +2015-11-27: Version 4.9.89 + + Performance and stability improvements on all platforms. + + +2015-11-27: Version 4.9.88 + + Performance and stability improvements on all platforms. + + +2015-11-27: Version 4.9.87 + + Performance and stability improvements on all platforms. + + +2015-11-27: Version 4.9.86 + + Performance and stability improvements on all platforms. + + +2015-11-27: Version 4.9.85 + + Performance and stability improvements on all platforms. + + +2015-11-27: Version 4.9.84 + + Performance and stability improvements on all platforms. + + +2015-11-27: Version 4.9.83 + + Performance and stability improvements on all platforms. + + +2015-11-26: Version 4.9.82 + + Performance and stability improvements on all platforms. + + +2015-11-26: Version 4.9.81 + + Performance and stability improvements on all platforms. + + +2015-11-26: Version 4.9.80 + + Performance and stability improvements on all platforms. + + +2015-11-26: Version 4.9.79 + + Performance and stability improvements on all platforms. + + +2015-11-26: Version 4.9.78 + + Mark PromiseRejectMessage::GetStackTrace as deprecated. + + Performance and stability improvements on all platforms. + + +2015-11-26: Version 4.9.77 + + Performance and stability improvements on all platforms. + + +2015-11-26: Version 4.9.76 + + Performance and stability improvements on all platforms. + + +2015-11-26: Version 4.9.75 + + Performance and stability improvements on all platforms. + + +2015-11-26: Version 4.9.74 + + Add explicit Isolate parameter to Exception::CreateMessage() (Chromium + issue 495801). + + Performance and stability improvements on all platforms. + + +2015-11-26: Version 4.9.73 + + Allow in-object properties in JSArrayBuffer (issue 4531). + + Allow in-object properties in JSTypedArray and JSDataView (issue 4531). + + Performance and stability improvements on all platforms. + + +2015-11-26: Version 4.9.72 + + Performance and stability improvements on all platforms. + + +2015-11-26: Version 4.9.71 + + Performance and stability improvements on all platforms. + + +2015-11-26: Version 4.9.70 + + Performance and stability improvements on all platforms. + + +2015-11-26: Version 4.9.69 + + Performance and stability improvements on all platforms. + + +2015-11-25: Version 4.9.68 + + Reland shipping of --harmony-destructuring-bind (issue 811). + + Fix promotion of JSFunctions with in-object properties (issue 4572, + Chromium issue 561481). + + Allow in-object properties in JSCollections, JSWeakCollections and + JSRegExp (issue 4531). + + Fix JSFunction's in-object properties initialization (issue 4572). + + Performance and stability improvements on all platforms. + + +2015-11-25: Version 4.9.67 + + Performance and stability improvements on all platforms. + + +2015-11-25: Version 4.9.66 + + Removed support deprecated (//@|/*@) source(URL|MappingURL)= (Chromium + issue 558998). + + PPC: Reshuffle registers in JSConstructStub to avoid trashing costructor + and new.target on fast path (so we don't need to push/pop them) + (Chromium issue 560239). + + Performance and stability improvements on all platforms. + + +2015-11-24: Version 4.9.65 + + Performance and stability improvements on all platforms. + + +2015-11-24: Version 4.9.64 + + Move --harmony-destructuring-bind to shipping (issue 811). + + Performance and stability improvements on all platforms. + + +2015-11-24: Version 4.9.63 + + Reshuffle registers in JSConstructStub to avoid trashing costructor and + new.target on fast path (so we don't need to push/pop them) (Chromium + issue 560239). + + Performance and stability improvements on all platforms. + + +2015-11-24: Version 4.9.62 + + Performance and stability improvements on all platforms. + + +2015-11-24: Version 4.9.61 + + Performance and stability improvements on all platforms. + + +2015-11-24: Version 4.9.60 + + Allow in-object properties in JSFunctions (issue 4531). + + Disable non-standard Promise functions in staging (issue 3237). + + Performance and stability improvements on all platforms. + + +2015-11-24: Version 4.9.59 + + Performance and stability improvements on all platforms. + + +2015-11-24: Version 4.9.58 + + Performance and stability improvements on all platforms. + + +2015-11-24: Version 4.9.57 + + Performance and stability improvements on all platforms. + + +2015-11-23: Version 4.9.56 + + Performance and stability improvements on all platforms. + + +2015-11-23: Version 4.9.55 + + Performance and stability improvements on all platforms. + + +2015-11-23: Version 4.9.54 + + Performance and stability improvements on all platforms. + + +2015-11-23: Version 4.9.53 + + Performance and stability improvements on all platforms. + + +2015-11-23: Version 4.9.52 + + Performance and stability improvements on all platforms. + + +2015-11-23: Version 4.9.51 + + Performance and stability improvements on all platforms. + + +2015-11-23: Version 4.9.50 + + Performance and stability improvements on all platforms. + + +2015-11-23: Version 4.9.49 + + Performance and stability improvements on all platforms. + + +2015-11-23: Version 4.9.48 + + Performance and stability improvements on all platforms. + + +2015-11-23: Version 4.9.47 + + Performance and stability improvements on all platforms. + + +2015-11-23: Version 4.9.46 + + Performance and stability improvements on all platforms. + + +2015-11-22: Version 4.9.45 + + Performance and stability improvements on all platforms. + + +2015-11-22: Version 4.9.44 + + Performance and stability improvements on all platforms. + + +2015-11-22: Version 4.9.43 + + Performance and stability improvements on all platforms. + + +2015-11-21: Version 4.9.42 + + Performance and stability improvements on all platforms. + + +2015-11-20: Version 4.9.41 + + Performance and stability improvements on all platforms. + + +2015-11-20: Version 4.9.40 + + Performance and stability improvements on all platforms. + + +2015-11-20: Version 4.9.39 + + Performance and stability improvements on all platforms. + + +2015-11-20: Version 4.9.38 + + Performance and stability improvements on all platforms. + + +2015-11-20: Version 4.9.37 + + Performance and stability improvements on all platforms. + + +2015-11-20: Version 4.9.36 + + Performance and stability improvements on all platforms. + + +2015-11-20: Version 4.9.35 + + Performance and stability improvements on all platforms. + + +2015-11-20: Version 4.9.34 + + Performance and stability improvements on all platforms. + + +2015-11-20: Version 4.9.33 + + Performance and stability improvements on all platforms. + + +2015-11-20: Version 4.9.32 + + Performance and stability improvements on all platforms. + + +2015-11-20: Version 4.9.31 + + Performance and stability improvements on all platforms. + + +2015-11-20: Version 4.9.30 + + Performance and stability improvements on all platforms. + + +2015-11-20: Version 4.9.29 + + Performance and stability improvements on all platforms. + + +2015-11-19: Version 4.9.28 + + Performance and stability improvements on all platforms. + + +2015-11-19: Version 4.9.27 + + [V8] Unify get function name for debugging purpose (Chromium issue + 17356). + + Performance and stability improvements on all platforms. + + +2015-11-19: Version 4.9.26 + + Performance and stability improvements on all platforms. + + +2015-11-19: Version 4.9.25 + + Performance and stability improvements on all platforms. + + +2015-11-19: Version 4.9.24 + + Performance and stability improvements on all platforms. + + +2015-11-19: Version 4.9.23 + + Performance and stability improvements on all platforms. + + +2015-11-19: Version 4.9.22 + + Performance and stability improvements on all platforms. + + +2015-11-19: Version 4.9.21 + + Performance and stability improvements on all platforms. + + +2015-11-19: Version 4.9.20 + + Performance and stability improvements on all platforms. + + +2015-11-18: Version 4.9.19 + + Performance and stability improvements on all platforms. + + +2015-11-18: Version 4.9.18 + + Performance and stability improvements on all platforms. + + +2015-11-18: Version 4.9.17 + + Performance and stability improvements on all platforms. + + +2015-11-18: Version 4.9.16 + + Performance and stability improvements on all platforms. + + +2015-11-18: Version 4.9.15 + + Performance and stability improvements on all platforms. + + +2015-11-18: Version 4.9.14 + + Performance and stability improvements on all platforms. + + +2015-11-17: Version 4.9.13 + + Performance and stability improvements on all platforms. + + +2015-11-17: Version 4.9.12 + + Performance and stability improvements on all platforms. + + +2015-11-17: Version 4.9.11 + + Performance and stability improvements on all platforms. + + +2015-11-17: Version 4.9.10 + + Performance and stability improvements on all platforms. + + +2015-11-16: Version 4.9.9 + + Map v8::Object to v8::internal::JSReceiver. + + Performance and stability improvements on all platforms. + + +2015-11-16: Version 4.9.8 + + Performance and stability improvements on all platforms. + + +2015-11-16: Version 4.9.7 + + Performance and stability improvements on all platforms. + + +2015-11-16: Version 4.9.6 + + Performance and stability improvements on all platforms. + + +2015-11-16: Version 4.9.5 + + Performance and stability improvements on all platforms. + + +2015-11-16: Version 4.9.4 + + Performance and stability improvements on all platforms. + + +2015-11-15: Version 4.9.3 + + Performance and stability improvements on all platforms. + + +2015-11-15: Version 4.9.2 + + Performance and stability improvements on all platforms. + + +2015-11-15: Version 4.9.1 + + Performance and stability improvements on all platforms. + + +2015-11-13: Version 4.8.294 + + Performance and stability improvements on all platforms. + + +2015-11-13: Version 4.8.293 + + Performance and stability improvements on all platforms. + + +2015-11-12: Version 4.8.292 + + Performance and stability improvements on all platforms. + + +2015-11-12: Version 4.8.291 + + Performance and stability improvements on all platforms. + + +2015-11-12: Version 4.8.290 + + Performance and stability improvements on all platforms. + + +2015-11-12: Version 4.8.289 + + Performance and stability improvements on all platforms. + + +2015-11-12: Version 4.8.288 + + Performance and stability improvements on all platforms. + + +2015-11-12: Version 4.8.287 + + [JSON stringifier] Correctly load array elements (Chromium issue + 554946). + + Performance and stability improvements on all platforms. + + +2015-11-12: Version 4.8.286 + + Performance and stability improvements on all platforms. + + +2015-11-12: Version 4.8.285 + + Performance and stability improvements on all platforms. + + +2015-11-12: Version 4.8.284 + + Ship --harmony-default-parameters (issue 2160). + + Performance and stability improvements on all platforms. + + +2015-11-12: Version 4.8.283 + + Performance and stability improvements on all platforms. + + +2015-11-12: Version 4.8.282 + + Performance and stability improvements on all platforms. + + +2015-11-12: Version 4.8.281 + + Performance and stability improvements on all platforms. + + +2015-11-12: Version 4.8.280 + + Performance and stability improvements on all platforms. + + +2015-11-12: Version 4.8.279 + + Performance and stability improvements on all platforms. + + +2015-11-11: Version 4.8.278 + + Performance and stability improvements on all platforms. + + +2015-11-11: Version 4.8.277 + + Performance and stability improvements on all platforms. + + +2015-11-11: Version 4.8.276 + + Performance and stability improvements on all platforms. + + +2015-11-11: Version 4.8.275 + + Performance and stability improvements on all platforms. + + +2015-11-11: Version 4.8.274 + + Performance and stability improvements on all platforms. + + +2015-11-11: Version 4.8.273 + + Performance and stability improvements on all platforms. + + +2015-11-11: Version 4.8.272 + + Performance and stability improvements on all platforms. + + 2015-11-11: Version 4.8.271 Performance and stability improvements on all platforms. diff --git a/deps/v8/DEPS b/deps/v8/DEPS index fc1ad8585ef936..07b11a4ae38fb7 100644 --- a/deps/v8/DEPS +++ b/deps/v8/DEPS @@ -8,13 +8,15 @@ vars = { deps = { "v8/build/gyp": - Var("git_url") + "/external/gyp.git" + "@" + "2c1e6cced23554ce84806e570acea637f6473afc", + Var("git_url") + "/external/gyp.git" + "@" + "b85ad3e578da830377dbc1843aa4fbc5af17a192", "v8/third_party/icu": - Var("git_url") + "/chromium/deps/icu.git" + "@" + "42c58d4e49f2250039f0e98d43e0b76e8f5ca024", + Var("git_url") + "/chromium/deps/icu.git" + "@" + "8d342a405be5ae8aacb1e16f0bc31c3a4fbf26a2", "v8/buildtools": - Var("git_url") + "/chromium/buildtools.git" + "@" + "4a95614772d9bcbd8bc197e1d9bd034e088fc740", + Var("git_url") + "/chromium/buildtools.git" + "@" + "0f8e6e4b126ee88137930a0ae4776c4741808740", + "v8/base/trace_event/common": + Var("git_url") + "/chromium/src/base/trace_event/common.git" + "@" + "d83d44b13d07c2fd0a40101a7deef9b93b841732", "v8/tools/swarming_client": - Var('git_url') + '/external/swarming.client.git' + '@' + "8fce79620b04bbe5415ace1103db27505bdc4c06", + Var('git_url') + '/external/swarming.client.git' + '@' + "9cdd76171e517a430a72dcd7d66ade67e109aa00", "v8/testing/gtest": Var("git_url") + "/external/github.com/google/googletest.git" + "@" + "6f8a66431cb592dad629028a50b3dd418a408c87", "v8/testing/gmock": @@ -25,15 +27,15 @@ deps = { Var("git_url") + "/v8/deps/third_party/mozilla-tests.git" + "@" + "f6c578a10ea707b1a8ab0b88943fe5115ce2b9be", "v8/test/simdjs/data": Var("git_url") + "/external/github.com/tc39/ecmascript_simd.git" + "@" + "c8ef63c728283debc25891123eb00482fee4b8cd", "v8/test/test262/data": - Var("git_url") + "/external/github.com/tc39/test262.git" + "@" + "ea222fb7d09e334c321b987656315ad4056ded96", + Var("git_url") + "/external/github.com/tc39/test262.git" + "@" + "67ba34b03a46bac4254223ae25f42c7b959540f0", "v8/tools/clang": - Var("git_url") + "/chromium/src/tools/clang.git" + "@" + "66f5328417331216569e8beb244fd887f62e8997", + Var("git_url") + "/chromium/src/tools/clang.git" + "@" + "24e8c1c92fe54ef8ed7651b5850c056983354a4a", } deps_os = { "android": { "v8/third_party/android_tools": - Var("git_url") + "/android_tools.git" + "@" + "54492f99c84cab0826a8e656efeb33a1b1bf5a04", + Var("git_url") + "/android_tools.git" + "@" + "f4c36ad89b2696b37d9cd7ca7d984b691888b188", }, "win": { "v8/third_party/cygwin": diff --git a/deps/v8/Makefile b/deps/v8/Makefile index 28c1af2e07f498..6ae9b245768915 100644 --- a/deps/v8/Makefile +++ b/deps/v8/Makefile @@ -220,12 +220,6 @@ ifeq ($(arm_test_noprobe), on) GYPFLAGS += -Darm_test_noprobe=on endif -# Optionally enable wasm prototype. -# Assume you've placed a link to v8-native-prototype in third_party/wasm. -ifeq ($(wasm), on) - GYPFLAGS += -Dv8_wasm=1 -endif - # ----------------- available targets: -------------------- # - "grokdump": rebuilds heap constants lists used by grokdump # - any arch listed in ARCHES (see below) @@ -244,7 +238,8 @@ endif # Architectures and modes to be compiled. Consider these to be internal # variables, don't override them (use the targets instead). -ARCHES = ia32 x64 x32 arm arm64 mips mipsel mips64 mips64el x87 ppc ppc64 +ARCHES = ia32 x64 x32 arm arm64 mips mipsel mips64 mips64el x87 ppc ppc64 \ + s390 s390x DEFAULT_ARCHES = ia32 x64 arm MODES = release debug optdebug DEFAULT_MODES = release debug diff --git a/deps/v8/PRESUBMIT.py b/deps/v8/PRESUBMIT.py index ab9bba88455906..f8516afc44ef50 100644 --- a/deps/v8/PRESUBMIT.py +++ b/deps/v8/PRESUBMIT.py @@ -69,6 +69,7 @@ def _V8PresubmitChecks(input_api, output_api): from presubmit import SourceProcessor from presubmit import CheckExternalReferenceRegistration from presubmit import CheckAuthorizedAuthor + from presubmit import CheckStatusFiles results = [] if not CppLintProcessor().Run(input_api.PresubmitLocalPath()): @@ -80,6 +81,8 @@ def _V8PresubmitChecks(input_api, output_api): if not CheckExternalReferenceRegistration(input_api.PresubmitLocalPath()): results.append(output_api.PresubmitError( "External references registration check failed")) + if not CheckStatusFiles(input_api.PresubmitLocalPath()): + results.append(output_api.PresubmitError("Status file check failed")) results.extend(CheckAuthorizedAuthor(input_api, output_api)) return results @@ -272,28 +275,3 @@ def CheckChangeOnCommit(input_api, output_api): input_api, output_api, json_url='http://v8-status.appspot.com/current?format=json')) return results - - -def GetPreferredTryMasters(project, change): - return { - 'tryserver.v8': { - 'v8_linux_rel': set(['defaulttests']), - 'v8_linux_dbg': set(['defaulttests']), - 'v8_linux_nodcheck_rel': set(['defaulttests']), - 'v8_linux_gcc_compile_rel': set(['defaulttests']), - 'v8_linux64_rel': set(['defaulttests']), - 'v8_linux64_asan_rel': set(['defaulttests']), - 'v8_linux64_avx2_rel': set(['defaulttests']), - 'v8_win_rel': set(['defaulttests']), - 'v8_win_compile_dbg': set(['defaulttests']), - 'v8_win_nosnap_shared_compile_rel': set(['defaulttests']), - 'v8_win64_rel': set(['defaulttests']), - 'v8_mac_rel': set(['defaulttests']), - 'v8_linux_arm_rel': set(['defaulttests']), - 'v8_linux_arm64_rel': set(['defaulttests']), - 'v8_linux_mipsel_compile_rel': set(['defaulttests']), - 'v8_linux_mips64el_compile_rel': set(['defaulttests']), - 'v8_android_arm_compile_rel': set(['defaulttests']), - 'v8_linux_chromium_gn_rel': set(['defaulttests']), - }, - } diff --git a/deps/v8/README.md b/deps/v8/README.md index c649f02ec2c2f4..840c4971f91527 100644 --- a/deps/v8/README.md +++ b/deps/v8/README.md @@ -10,7 +10,7 @@ browser from Google. V8 can run standalone, or can be embedded into any C++ application. -V8 Project page: https://code.google.com/p/v8/ +V8 Project page: https://github.com/v8/v8/wiki Getting the Code @@ -37,4 +37,4 @@ Contributing ============= Please follow the instructions mentioned on the -[V8 wiki](https://code.google.com/p/v8-wiki/wiki/Contributing). +[V8 wiki](https://github.com/v8/v8/wiki/Contributing). diff --git a/deps/v8/WATCHLISTS b/deps/v8/WATCHLISTS index a5699abcf1be65..81e941f28a5fb4 100644 --- a/deps/v8/WATCHLISTS +++ b/deps/v8/WATCHLISTS @@ -50,6 +50,12 @@ 'feature_shipping_status': { 'filepath': 'src/flag-definitions.h', }, + 'gc_changes': { + 'filepath': 'src/heap/', + }, + 'merges': { + 'filepath': '.', + }, }, 'WATCHLISTS': { @@ -69,5 +75,13 @@ 'feature_shipping_status': [ 'hablich@chromium.org', ], + 'gc_changes': [ + 'hpayer@chromium.org', + 'ulan@chromium.org', + ], + 'merges': [ + # Only enabled on branches created with tools/release/create_release.py + 'v8-merges@googlegroups.com', + ], }, } diff --git a/deps/v8/base/trace_event/common/trace_event_common.h b/deps/v8/base/trace_event/common/trace_event_common.h new file mode 100644 index 00000000000000..33578bd37bd258 --- /dev/null +++ b/deps/v8/base/trace_event/common/trace_event_common.h @@ -0,0 +1,1048 @@ +// Copyright 2015 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 header file defines the set of trace_event macros without specifying +// how the events actually get collected and stored. If you need to expose trace +// events to some other universe, you can copy-and-paste this file as well as +// trace_event.h, modifying the macros contained there as necessary for the +// target platform. The end result is that multiple libraries can funnel events +// through to a shared trace event collector. + +// IMPORTANT: To avoid conflicts, if you need to modify this file for a library, +// land your change in base/ first, and then copy-and-paste it. + +// Trace events are for tracking application performance and resource usage. +// Macros are provided to track: +// Begin and end of function calls +// Counters +// +// Events are issued against categories. Whereas LOG's +// categories are statically defined, TRACE categories are created +// implicitly with a string. For example: +// TRACE_EVENT_INSTANT0("MY_SUBSYSTEM", "SomeImportantEvent", +// TRACE_EVENT_SCOPE_THREAD) +// +// It is often the case that one trace may belong in multiple categories at the +// same time. The first argument to the trace can be a comma-separated list of +// categories, forming a category group, like: +// +// TRACE_EVENT_INSTANT0("input,views", "OnMouseOver", TRACE_EVENT_SCOPE_THREAD) +// +// We can enable/disable tracing of OnMouseOver by enabling/disabling either +// category. +// +// Events can be INSTANT, or can be pairs of BEGIN and END in the same scope: +// TRACE_EVENT_BEGIN0("MY_SUBSYSTEM", "SomethingCostly") +// doSomethingCostly() +// TRACE_EVENT_END0("MY_SUBSYSTEM", "SomethingCostly") +// Note: our tools can't always determine the correct BEGIN/END pairs unless +// these are used in the same scope. Use ASYNC_BEGIN/ASYNC_END macros if you +// need them to be in separate scopes. +// +// A common use case is to trace entire function scopes. This +// issues a trace BEGIN and END automatically: +// void doSomethingCostly() { +// TRACE_EVENT0("MY_SUBSYSTEM", "doSomethingCostly"); +// ... +// } +// +// Additional parameters can be associated with an event: +// void doSomethingCostly2(int howMuch) { +// TRACE_EVENT1("MY_SUBSYSTEM", "doSomethingCostly", +// "howMuch", howMuch); +// ... +// } +// +// The trace system will automatically add to this information the +// current process id, thread id, and a timestamp in microseconds. +// +// To trace an asynchronous procedure such as an IPC send/receive, use +// ASYNC_BEGIN and ASYNC_END: +// [single threaded sender code] +// static int send_count = 0; +// ++send_count; +// TRACE_EVENT_ASYNC_BEGIN0("ipc", "message", send_count); +// Send(new MyMessage(send_count)); +// [receive code] +// void OnMyMessage(send_count) { +// TRACE_EVENT_ASYNC_END0("ipc", "message", send_count); +// } +// The third parameter is a unique ID to match ASYNC_BEGIN/ASYNC_END pairs. +// ASYNC_BEGIN and ASYNC_END can occur on any thread of any traced process. +// Pointers can be used for the ID parameter, and they will be mangled +// internally so that the same pointer on two different processes will not +// match. For example: +// class MyTracedClass { +// public: +// MyTracedClass() { +// TRACE_EVENT_ASYNC_BEGIN0("category", "MyTracedClass", this); +// } +// ~MyTracedClass() { +// TRACE_EVENT_ASYNC_END0("category", "MyTracedClass", this); +// } +// } +// +// Trace event also supports counters, which is a way to track a quantity +// as it varies over time. Counters are created with the following macro: +// TRACE_COUNTER1("MY_SUBSYSTEM", "myCounter", g_myCounterValue); +// +// Counters are process-specific. The macro itself can be issued from any +// thread, however. +// +// Sometimes, you want to track two counters at once. You can do this with two +// counter macros: +// TRACE_COUNTER1("MY_SUBSYSTEM", "myCounter0", g_myCounterValue[0]); +// TRACE_COUNTER1("MY_SUBSYSTEM", "myCounter1", g_myCounterValue[1]); +// Or you can do it with a combined macro: +// TRACE_COUNTER2("MY_SUBSYSTEM", "myCounter", +// "bytesPinned", g_myCounterValue[0], +// "bytesAllocated", g_myCounterValue[1]); +// This indicates to the tracing UI that these counters should be displayed +// in a single graph, as a summed area chart. +// +// Since counters are in a global namespace, you may want to disambiguate with a +// unique ID, by using the TRACE_COUNTER_ID* variations. +// +// By default, trace collection is compiled in, but turned off at runtime. +// Collecting trace data is the responsibility of the embedding +// application. In Chrome's case, navigating to about:tracing will turn on +// tracing and display data collected across all active processes. +// +// +// Memory scoping note: +// Tracing copies the pointers, not the string content, of the strings passed +// in for category_group, name, and arg_names. Thus, the following code will +// cause problems: +// char* str = strdup("importantName"); +// TRACE_EVENT_INSTANT0("SUBSYSTEM", str); // BAD! +// free(str); // Trace system now has dangling pointer +// +// To avoid this issue with the |name| and |arg_name| parameters, use the +// TRACE_EVENT_COPY_XXX overloads of the macros at additional runtime overhead. +// Notes: The category must always be in a long-lived char* (i.e. static const). +// The |arg_values|, when used, are always deep copied with the _COPY +// macros. +// +// When are string argument values copied: +// const char* arg_values are only referenced by default: +// TRACE_EVENT1("category", "name", +// "arg1", "literal string is only referenced"); +// Use TRACE_STR_COPY to force copying of a const char*: +// TRACE_EVENT1("category", "name", +// "arg1", TRACE_STR_COPY("string will be copied")); +// std::string arg_values are always copied: +// TRACE_EVENT1("category", "name", +// "arg1", std::string("string will be copied")); +// +// +// Convertable notes: +// Converting a large data type to a string can be costly. To help with this, +// the trace framework provides an interface ConvertableToTraceFormat. If you +// inherit from it and implement the AppendAsTraceFormat method the trace +// framework will call back to your object to convert a trace output time. This +// means, if the category for the event is disabled, the conversion will not +// happen. +// +// class MyData : public base::trace_event::ConvertableToTraceFormat { +// public: +// MyData() {} +// void AppendAsTraceFormat(std::string* out) const override { +// out->append("{\"foo\":1}"); +// } +// private: +// ~MyData() override {} +// DISALLOW_COPY_AND_ASSIGN(MyData); +// }; +// +// TRACE_EVENT1("foo", "bar", "data", +// scoped_refptr(new MyData())); +// +// The trace framework will take ownership if the passed pointer and it will +// be free'd when the trace buffer is flushed. +// +// Note, we only do the conversion when the buffer is flushed, so the provided +// data object should not be modified after it's passed to the trace framework. +// +// +// Thread Safety: +// A thread safe singleton and mutex are used for thread safety. Category +// enabled flags are used to limit the performance impact when the system +// is not enabled. +// +// TRACE_EVENT macros first cache a pointer to a category. The categories are +// statically allocated and safe at all times, even after exit. Fetching a +// category is protected by the TraceLog::lock_. Multiple threads initializing +// the static variable is safe, as they will be serialized by the lock and +// multiple calls will return the same pointer to the category. +// +// Then the category_group_enabled flag is checked. This is a unsigned char, and +// not intended to be multithread safe. It optimizes access to AddTraceEvent +// which is threadsafe internally via TraceLog::lock_. The enabled flag may +// cause some threads to incorrectly call or skip calling AddTraceEvent near +// the time of the system being enabled or disabled. This is acceptable as +// we tolerate some data loss while the system is being enabled/disabled and +// because AddTraceEvent is threadsafe internally and checks the enabled state +// again under lock. +// +// Without the use of these static category pointers and enabled flags all +// trace points would carry a significant performance cost of acquiring a lock +// and resolving the category. + +#if defined(TRACE_EVENT0) +#error "Another copy of this file has already been included." +#endif + +// This will mark the trace event as disabled by default. The user will need +// to explicitly enable the event. +#define TRACE_DISABLED_BY_DEFAULT(name) "disabled-by-default-" name + +// Records a pair of begin and end events called "name" for the current +// scope, with 0, 1 or 2 associated arguments. If the category is not +// enabled, then this does nothing. +// - category and name strings must have application lifetime (statics or +// literals). They may not include " chars. +#define TRACE_EVENT0(category_group, name) \ + INTERNAL_TRACE_MEMORY(category_group, name) \ + INTERNAL_TRACE_EVENT_ADD_SCOPED(category_group, name) +#define TRACE_EVENT_WITH_FLOW0(category_group, name, bind_id, flow_flags) \ + INTERNAL_TRACE_MEMORY(category_group, name) \ + INTERNAL_TRACE_EVENT_ADD_SCOPED_WITH_FLOW(category_group, name, bind_id, \ + flow_flags) +#define TRACE_EVENT1(category_group, name, arg1_name, arg1_val) \ + INTERNAL_TRACE_MEMORY(category_group, name) \ + INTERNAL_TRACE_EVENT_ADD_SCOPED(category_group, name, arg1_name, arg1_val) +#define TRACE_EVENT_WITH_FLOW1(category_group, name, bind_id, flow_flags, \ + arg1_name, arg1_val) \ + INTERNAL_TRACE_MEMORY(category_group, name) \ + INTERNAL_TRACE_EVENT_ADD_SCOPED_WITH_FLOW(category_group, name, bind_id, \ + flow_flags, arg1_name, arg1_val) +#define TRACE_EVENT2(category_group, name, arg1_name, arg1_val, arg2_name, \ + arg2_val) \ + INTERNAL_TRACE_MEMORY(category_group, name) \ + INTERNAL_TRACE_EVENT_ADD_SCOPED(category_group, name, arg1_name, arg1_val, \ + arg2_name, arg2_val) +#define TRACE_EVENT_WITH_FLOW2(category_group, name, bind_id, flow_flags, \ + arg1_name, arg1_val, arg2_name, arg2_val) \ + INTERNAL_TRACE_MEMORY(category_group, name) \ + INTERNAL_TRACE_EVENT_ADD_SCOPED_WITH_FLOW(category_group, name, bind_id, \ + flow_flags, arg1_name, arg1_val, \ + arg2_name, arg2_val) + +// Records events like TRACE_EVENT2 but uses |memory_tag| for memory tracing. +// Use this where |name| is too generic to accurately aggregate allocations. +#define TRACE_EVENT_WITH_MEMORY_TAG2(category, name, memory_tag, arg1_name, \ + arg1_val, arg2_name, arg2_val) \ + INTERNAL_TRACE_MEMORY(category, memory_tag) \ + INTERNAL_TRACE_EVENT_ADD_SCOPED(category, name, arg1_name, arg1_val, \ + arg2_name, arg2_val) + +// UNSHIPPED_TRACE_EVENT* are like TRACE_EVENT* except that they are not +// included in official builds. + +#if OFFICIAL_BUILD +#undef TRACING_IS_OFFICIAL_BUILD +#define TRACING_IS_OFFICIAL_BUILD 1 +#elif !defined(TRACING_IS_OFFICIAL_BUILD) +#define TRACING_IS_OFFICIAL_BUILD 0 +#endif + +#if TRACING_IS_OFFICIAL_BUILD +#define UNSHIPPED_TRACE_EVENT0(category_group, name) (void)0 +#define UNSHIPPED_TRACE_EVENT1(category_group, name, arg1_name, arg1_val) \ + (void)0 +#define UNSHIPPED_TRACE_EVENT2(category_group, name, arg1_name, arg1_val, \ + arg2_name, arg2_val) \ + (void)0 +#define UNSHIPPED_TRACE_EVENT_INSTANT0(category_group, name, scope) (void)0 +#define UNSHIPPED_TRACE_EVENT_INSTANT1(category_group, name, scope, arg1_name, \ + arg1_val) \ + (void)0 +#define UNSHIPPED_TRACE_EVENT_INSTANT2(category_group, name, scope, arg1_name, \ + arg1_val, arg2_name, arg2_val) \ + (void)0 +#else +#define UNSHIPPED_TRACE_EVENT0(category_group, name) \ + TRACE_EVENT0(category_group, name) +#define UNSHIPPED_TRACE_EVENT1(category_group, name, arg1_name, arg1_val) \ + TRACE_EVENT1(category_group, name, arg1_name, arg1_val) +#define UNSHIPPED_TRACE_EVENT2(category_group, name, arg1_name, arg1_val, \ + arg2_name, arg2_val) \ + TRACE_EVENT2(category_group, name, arg1_name, arg1_val, arg2_name, arg2_val) +#define UNSHIPPED_TRACE_EVENT_INSTANT0(category_group, name, scope) \ + TRACE_EVENT_INSTANT0(category_group, name, scope) +#define UNSHIPPED_TRACE_EVENT_INSTANT1(category_group, name, scope, arg1_name, \ + arg1_val) \ + TRACE_EVENT_INSTANT1(category_group, name, scope, arg1_name, arg1_val) +#define UNSHIPPED_TRACE_EVENT_INSTANT2(category_group, name, scope, arg1_name, \ + arg1_val, arg2_name, arg2_val) \ + TRACE_EVENT_INSTANT2(category_group, name, scope, arg1_name, arg1_val, \ + arg2_name, arg2_val) +#endif + +// Records a single event called "name" immediately, with 0, 1 or 2 +// associated arguments. If the category is not enabled, then this +// does nothing. +// - category and name strings must have application lifetime (statics or +// literals). They may not include " chars. +#define TRACE_EVENT_INSTANT0(category_group, name, scope) \ + INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_INSTANT, category_group, name, \ + TRACE_EVENT_FLAG_NONE | scope) +#define TRACE_EVENT_INSTANT1(category_group, name, scope, arg1_name, arg1_val) \ + INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_INSTANT, category_group, name, \ + TRACE_EVENT_FLAG_NONE | scope, arg1_name, arg1_val) +#define TRACE_EVENT_INSTANT2(category_group, name, scope, arg1_name, arg1_val, \ + arg2_name, arg2_val) \ + INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_INSTANT, category_group, name, \ + TRACE_EVENT_FLAG_NONE | scope, arg1_name, arg1_val, \ + arg2_name, arg2_val) +#define TRACE_EVENT_COPY_INSTANT0(category_group, name, scope) \ + INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_INSTANT, category_group, name, \ + TRACE_EVENT_FLAG_COPY | scope) +#define TRACE_EVENT_COPY_INSTANT1(category_group, name, scope, arg1_name, \ + arg1_val) \ + INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_INSTANT, category_group, name, \ + TRACE_EVENT_FLAG_COPY | scope, arg1_name, arg1_val) +#define TRACE_EVENT_COPY_INSTANT2(category_group, name, scope, arg1_name, \ + arg1_val, arg2_name, arg2_val) \ + INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_INSTANT, category_group, name, \ + TRACE_EVENT_FLAG_COPY | scope, arg1_name, arg1_val, \ + arg2_name, arg2_val) + +// Syntactic sugars for the sampling tracing in the main thread. +#define TRACE_EVENT_SCOPED_SAMPLING_STATE(category, name) \ + TRACE_EVENT_SCOPED_SAMPLING_STATE_FOR_BUCKET(0, category, name) +#define TRACE_EVENT_GET_SAMPLING_STATE() \ + TRACE_EVENT_GET_SAMPLING_STATE_FOR_BUCKET(0) +#define TRACE_EVENT_SET_SAMPLING_STATE(category, name) \ + TRACE_EVENT_SET_SAMPLING_STATE_FOR_BUCKET(0, category, name) +#define TRACE_EVENT_SET_NONCONST_SAMPLING_STATE(categoryAndName) \ + TRACE_EVENT_SET_NONCONST_SAMPLING_STATE_FOR_BUCKET(0, categoryAndName) + +// Records a single BEGIN event called "name" immediately, with 0, 1 or 2 +// associated arguments. If the category is not enabled, then this +// does nothing. +// - category and name strings must have application lifetime (statics or +// literals). They may not include " chars. +#define TRACE_EVENT_BEGIN0(category_group, name) \ + INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_BEGIN, category_group, name, \ + TRACE_EVENT_FLAG_NONE) +#define TRACE_EVENT_BEGIN1(category_group, name, arg1_name, arg1_val) \ + INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_BEGIN, category_group, name, \ + TRACE_EVENT_FLAG_NONE, arg1_name, arg1_val) +#define TRACE_EVENT_BEGIN2(category_group, name, arg1_name, arg1_val, \ + arg2_name, arg2_val) \ + INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_BEGIN, category_group, name, \ + TRACE_EVENT_FLAG_NONE, arg1_name, arg1_val, \ + arg2_name, arg2_val) +#define TRACE_EVENT_COPY_BEGIN0(category_group, name) \ + INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_BEGIN, category_group, name, \ + TRACE_EVENT_FLAG_COPY) +#define TRACE_EVENT_COPY_BEGIN1(category_group, name, arg1_name, arg1_val) \ + INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_BEGIN, category_group, name, \ + TRACE_EVENT_FLAG_COPY, arg1_name, arg1_val) +#define TRACE_EVENT_COPY_BEGIN2(category_group, name, arg1_name, arg1_val, \ + arg2_name, arg2_val) \ + INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_BEGIN, category_group, name, \ + TRACE_EVENT_FLAG_COPY, arg1_name, arg1_val, \ + arg2_name, arg2_val) + +// Similar to TRACE_EVENT_BEGINx but with a custom |at| timestamp provided. +// - |id| is used to match the _BEGIN event with the _END event. +// Events are considered to match if their category_group, name and id values +// all match. |id| must either be a pointer or an integer value up to 64 bits. +// If it's a pointer, the bits will be xored with a hash of the process ID so +// that the same pointer on two different processes will not collide. +#define TRACE_EVENT_BEGIN_WITH_ID_TID_AND_TIMESTAMP0(category_group, name, id, \ + thread_id, timestamp) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID_TID_AND_TIMESTAMP( \ + TRACE_EVENT_PHASE_ASYNC_BEGIN, category_group, name, id, thread_id, \ + timestamp, TRACE_EVENT_FLAG_NONE) +#define TRACE_EVENT_COPY_BEGIN_WITH_ID_TID_AND_TIMESTAMP0( \ + category_group, name, id, thread_id, timestamp) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID_TID_AND_TIMESTAMP( \ + TRACE_EVENT_PHASE_ASYNC_BEGIN, category_group, name, id, thread_id, \ + timestamp, TRACE_EVENT_FLAG_COPY) +#define TRACE_EVENT_COPY_BEGIN_WITH_ID_TID_AND_TIMESTAMP1( \ + category_group, name, id, thread_id, timestamp, arg1_name, arg1_val) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID_TID_AND_TIMESTAMP( \ + TRACE_EVENT_PHASE_ASYNC_BEGIN, category_group, name, id, thread_id, \ + timestamp, TRACE_EVENT_FLAG_COPY, arg1_name, arg1_val) +#define TRACE_EVENT_COPY_BEGIN_WITH_ID_TID_AND_TIMESTAMP2( \ + category_group, name, id, thread_id, timestamp, arg1_name, arg1_val, \ + arg2_name, arg2_val) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID_TID_AND_TIMESTAMP( \ + TRACE_EVENT_PHASE_ASYNC_BEGIN, category_group, name, id, thread_id, \ + timestamp, TRACE_EVENT_FLAG_COPY, arg1_name, arg1_val, arg2_name, \ + arg2_val) + +// Records a single END event for "name" immediately. If the category +// is not enabled, then this does nothing. +// - category and name strings must have application lifetime (statics or +// literals). They may not include " chars. +#define TRACE_EVENT_END0(category_group, name) \ + INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_END, category_group, name, \ + TRACE_EVENT_FLAG_NONE) +#define TRACE_EVENT_END1(category_group, name, arg1_name, arg1_val) \ + INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_END, category_group, name, \ + TRACE_EVENT_FLAG_NONE, arg1_name, arg1_val) +#define TRACE_EVENT_END2(category_group, name, arg1_name, arg1_val, arg2_name, \ + arg2_val) \ + INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_END, category_group, name, \ + TRACE_EVENT_FLAG_NONE, arg1_name, arg1_val, \ + arg2_name, arg2_val) +#define TRACE_EVENT_COPY_END0(category_group, name) \ + INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_END, category_group, name, \ + TRACE_EVENT_FLAG_COPY) +#define TRACE_EVENT_COPY_END1(category_group, name, arg1_name, arg1_val) \ + INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_END, category_group, name, \ + TRACE_EVENT_FLAG_COPY, arg1_name, arg1_val) +#define TRACE_EVENT_COPY_END2(category_group, name, arg1_name, arg1_val, \ + arg2_name, arg2_val) \ + INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_END, category_group, name, \ + TRACE_EVENT_FLAG_COPY, arg1_name, arg1_val, \ + arg2_name, arg2_val) + +#define TRACE_EVENT_MARK_WITH_TIMESTAMP1(category_group, name, timestamp, \ + arg1_name, arg1_val) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID_TID_AND_TIMESTAMP( \ + TRACE_EVENT_PHASE_MARK, category_group, name, 0, 0, timestamp, \ + TRACE_EVENT_FLAG_NONE, arg1_name, arg1_val) + +#define TRACE_EVENT_COPY_MARK(category_group, name) \ + INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_MARK, category_group, name, \ + TRACE_EVENT_FLAG_COPY) + +#define TRACE_EVENT_COPY_MARK_WITH_TIMESTAMP(category_group, name, timestamp) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID_TID_AND_TIMESTAMP( \ + TRACE_EVENT_PHASE_MARK, category_group, name, 0, 0, timestamp, \ + TRACE_EVENT_FLAG_COPY) + +// Similar to TRACE_EVENT_ENDx but with a custom |at| timestamp provided. +// - |id| is used to match the _BEGIN event with the _END event. +// Events are considered to match if their category_group, name and id values +// all match. |id| must either be a pointer or an integer value up to 64 bits. +// If it's a pointer, the bits will be xored with a hash of the process ID so +// that the same pointer on two different processes will not collide. +#define TRACE_EVENT_END_WITH_ID_TID_AND_TIMESTAMP0(category_group, name, id, \ + thread_id, timestamp) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID_TID_AND_TIMESTAMP( \ + TRACE_EVENT_PHASE_ASYNC_END, category_group, name, id, thread_id, \ + timestamp, TRACE_EVENT_FLAG_NONE) +#define TRACE_EVENT_COPY_END_WITH_ID_TID_AND_TIMESTAMP0( \ + category_group, name, id, thread_id, timestamp) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID_TID_AND_TIMESTAMP( \ + TRACE_EVENT_PHASE_ASYNC_END, category_group, name, id, thread_id, \ + timestamp, TRACE_EVENT_FLAG_COPY) +#define TRACE_EVENT_COPY_END_WITH_ID_TID_AND_TIMESTAMP1( \ + category_group, name, id, thread_id, timestamp, arg1_name, arg1_val) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID_TID_AND_TIMESTAMP( \ + TRACE_EVENT_PHASE_ASYNC_END, category_group, name, id, thread_id, \ + timestamp, TRACE_EVENT_FLAG_COPY, arg1_name, arg1_val) +#define TRACE_EVENT_COPY_END_WITH_ID_TID_AND_TIMESTAMP2( \ + category_group, name, id, thread_id, timestamp, arg1_name, arg1_val, \ + arg2_name, arg2_val) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID_TID_AND_TIMESTAMP( \ + TRACE_EVENT_PHASE_ASYNC_END, category_group, name, id, thread_id, \ + timestamp, TRACE_EVENT_FLAG_COPY, arg1_name, arg1_val, arg2_name, \ + arg2_val) + +// Records the value of a counter called "name" immediately. Value +// must be representable as a 32 bit integer. +// - category and name strings must have application lifetime (statics or +// literals). They may not include " chars. +#define TRACE_COUNTER1(category_group, name, value) \ + INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_COUNTER, category_group, name, \ + TRACE_EVENT_FLAG_NONE, "value", \ + static_cast(value)) +#define TRACE_COPY_COUNTER1(category_group, name, value) \ + INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_COUNTER, category_group, name, \ + TRACE_EVENT_FLAG_COPY, "value", \ + static_cast(value)) + +// Records the values of a multi-parted counter called "name" immediately. +// The UI will treat value1 and value2 as parts of a whole, displaying their +// values as a stacked-bar chart. +// - category and name strings must have application lifetime (statics or +// literals). They may not include " chars. +#define TRACE_COUNTER2(category_group, name, value1_name, value1_val, \ + value2_name, value2_val) \ + INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_COUNTER, category_group, name, \ + TRACE_EVENT_FLAG_NONE, value1_name, \ + static_cast(value1_val), value2_name, \ + static_cast(value2_val)) +#define TRACE_COPY_COUNTER2(category_group, name, value1_name, value1_val, \ + value2_name, value2_val) \ + INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_COUNTER, category_group, name, \ + TRACE_EVENT_FLAG_COPY, value1_name, \ + static_cast(value1_val), value2_name, \ + static_cast(value2_val)) + +// Records the value of a counter called "name" immediately. Value +// must be representable as a 32 bit integer. +// - category and name strings must have application lifetime (statics or +// literals). They may not include " chars. +// - |id| is used to disambiguate counters with the same name. It must either +// be a pointer or an integer value up to 64 bits. If it's a pointer, the bits +// will be xored with a hash of the process ID so that the same pointer on +// two different processes will not collide. +#define TRACE_COUNTER_ID1(category_group, name, id, value) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_COUNTER, category_group, \ + name, id, TRACE_EVENT_FLAG_NONE, "value", \ + static_cast(value)) +#define TRACE_COPY_COUNTER_ID1(category_group, name, id, value) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_COUNTER, category_group, \ + name, id, TRACE_EVENT_FLAG_COPY, "value", \ + static_cast(value)) + +// Records the values of a multi-parted counter called "name" immediately. +// The UI will treat value1 and value2 as parts of a whole, displaying their +// values as a stacked-bar chart. +// - category and name strings must have application lifetime (statics or +// literals). They may not include " chars. +// - |id| is used to disambiguate counters with the same name. It must either +// be a pointer or an integer value up to 64 bits. If it's a pointer, the bits +// will be xored with a hash of the process ID so that the same pointer on +// two different processes will not collide. +#define TRACE_COUNTER_ID2(category_group, name, id, value1_name, value1_val, \ + value2_name, value2_val) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_COUNTER, category_group, \ + name, id, TRACE_EVENT_FLAG_NONE, \ + value1_name, static_cast(value1_val), \ + value2_name, static_cast(value2_val)) +#define TRACE_COPY_COUNTER_ID2(category_group, name, id, value1_name, \ + value1_val, value2_name, value2_val) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_COUNTER, category_group, \ + name, id, TRACE_EVENT_FLAG_COPY, \ + value1_name, static_cast(value1_val), \ + value2_name, static_cast(value2_val)) + +// TRACE_EVENT_SAMPLE_* events are injected by the sampling profiler. +#define TRACE_EVENT_SAMPLE_WITH_TID_AND_TIMESTAMP0(category_group, name, \ + thread_id, timestamp) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID_TID_AND_TIMESTAMP( \ + TRACE_EVENT_PHASE_SAMPLE, category_group, name, 0, thread_id, timestamp, \ + TRACE_EVENT_FLAG_NONE) + +#define TRACE_EVENT_SAMPLE_WITH_TID_AND_TIMESTAMP1( \ + category_group, name, thread_id, timestamp, arg1_name, arg1_val) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID_TID_AND_TIMESTAMP( \ + TRACE_EVENT_PHASE_SAMPLE, category_group, name, 0, thread_id, timestamp, \ + TRACE_EVENT_FLAG_NONE, arg1_name, arg1_val) + +#define TRACE_EVENT_SAMPLE_WITH_TID_AND_TIMESTAMP2(category_group, name, \ + thread_id, timestamp, \ + arg1_name, arg1_val, \ + arg2_name, arg2_val) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID_TID_AND_TIMESTAMP( \ + TRACE_EVENT_PHASE_SAMPLE, category_group, name, 0, thread_id, timestamp, \ + TRACE_EVENT_FLAG_NONE, arg1_name, arg1_val, arg2_name, arg2_val) + +// ASYNC_STEP_* APIs should be only used by legacy code. New code should +// consider using NESTABLE_ASYNC_* APIs to describe substeps within an async +// event. +// Records a single ASYNC_BEGIN event called "name" immediately, with 0, 1 or 2 +// associated arguments. If the category is not enabled, then this +// does nothing. +// - category and name strings must have application lifetime (statics or +// literals). They may not include " chars. +// - |id| is used to match the ASYNC_BEGIN event with the ASYNC_END event. ASYNC +// events are considered to match if their category_group, name and id values +// all match. |id| must either be a pointer or an integer value up to 64 bits. +// If it's a pointer, the bits will be xored with a hash of the process ID so +// that the same pointer on two different processes will not collide. +// +// An asynchronous operation can consist of multiple phases. The first phase is +// defined by the ASYNC_BEGIN calls. Additional phases can be defined using the +// ASYNC_STEP_INTO or ASYNC_STEP_PAST macros. The ASYNC_STEP_INTO macro will +// annotate the block following the call. The ASYNC_STEP_PAST macro will +// annotate the block prior to the call. Note that any particular event must use +// only STEP_INTO or STEP_PAST macros; they can not mix and match. When the +// operation completes, call ASYNC_END. +// +// An ASYNC trace typically occurs on a single thread (if not, they will only be +// drawn on the thread defined in the ASYNC_BEGIN event), but all events in that +// operation must use the same |name| and |id|. Each step can have its own +// args. +#define TRACE_EVENT_ASYNC_BEGIN0(category_group, name, id) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_ASYNC_BEGIN, \ + category_group, name, id, \ + TRACE_EVENT_FLAG_NONE) +#define TRACE_EVENT_ASYNC_BEGIN1(category_group, name, id, arg1_name, \ + arg1_val) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_ASYNC_BEGIN, \ + category_group, name, id, \ + TRACE_EVENT_FLAG_NONE, arg1_name, arg1_val) +#define TRACE_EVENT_ASYNC_BEGIN2(category_group, name, id, arg1_name, \ + arg1_val, arg2_name, arg2_val) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID( \ + TRACE_EVENT_PHASE_ASYNC_BEGIN, category_group, name, id, \ + TRACE_EVENT_FLAG_NONE, arg1_name, arg1_val, arg2_name, arg2_val) +#define TRACE_EVENT_COPY_ASYNC_BEGIN0(category_group, name, id) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_ASYNC_BEGIN, \ + category_group, name, id, \ + TRACE_EVENT_FLAG_COPY) +#define TRACE_EVENT_COPY_ASYNC_BEGIN1(category_group, name, id, arg1_name, \ + arg1_val) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_ASYNC_BEGIN, \ + category_group, name, id, \ + TRACE_EVENT_FLAG_COPY, arg1_name, arg1_val) +#define TRACE_EVENT_COPY_ASYNC_BEGIN2(category_group, name, id, arg1_name, \ + arg1_val, arg2_name, arg2_val) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID( \ + TRACE_EVENT_PHASE_ASYNC_BEGIN, category_group, name, id, \ + TRACE_EVENT_FLAG_COPY, arg1_name, arg1_val, arg2_name, arg2_val) + +// Similar to TRACE_EVENT_ASYNC_BEGINx but with a custom |at| timestamp +// provided. +#define TRACE_EVENT_ASYNC_BEGIN_WITH_TIMESTAMP0(category_group, name, id, \ + timestamp) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID_TID_AND_TIMESTAMP( \ + TRACE_EVENT_PHASE_ASYNC_BEGIN, category_group, name, id, \ + TRACE_EVENT_API_CURRENT_THREAD_ID, timestamp, TRACE_EVENT_FLAG_NONE) +#define TRACE_EVENT_ASYNC_BEGIN_WITH_TIMESTAMP1( \ + category_group, name, id, timestamp, arg1_name, arg1_val) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID_TID_AND_TIMESTAMP( \ + TRACE_EVENT_PHASE_ASYNC_BEGIN, category_group, name, id, \ + TRACE_EVENT_API_CURRENT_THREAD_ID, timestamp, TRACE_EVENT_FLAG_NONE, \ + arg1_name, arg1_val) +#define TRACE_EVENT_COPY_ASYNC_BEGIN_WITH_TIMESTAMP0(category_group, name, id, \ + timestamp) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID_TID_AND_TIMESTAMP( \ + TRACE_EVENT_PHASE_ASYNC_BEGIN, category_group, name, id, \ + TRACE_EVENT_API_CURRENT_THREAD_ID, timestamp, TRACE_EVENT_FLAG_COPY) + +// Records a single ASYNC_STEP_INTO event for |step| immediately. If the +// category is not enabled, then this does nothing. The |name| and |id| must +// match the ASYNC_BEGIN event above. The |step| param identifies this step +// within the async event. This should be called at the beginning of the next +// phase of an asynchronous operation. The ASYNC_BEGIN event must not have any +// ASYNC_STEP_PAST events. +#define TRACE_EVENT_ASYNC_STEP_INTO0(category_group, name, id, step) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_ASYNC_STEP_INTO, \ + category_group, name, id, \ + TRACE_EVENT_FLAG_NONE, "step", step) +#define TRACE_EVENT_ASYNC_STEP_INTO1(category_group, name, id, step, \ + arg1_name, arg1_val) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID( \ + TRACE_EVENT_PHASE_ASYNC_STEP_INTO, category_group, name, id, \ + TRACE_EVENT_FLAG_NONE, "step", step, arg1_name, arg1_val) + +// Similar to TRACE_EVENT_ASYNC_STEP_INTOx but with a custom |at| timestamp +// provided. +#define TRACE_EVENT_ASYNC_STEP_INTO_WITH_TIMESTAMP0(category_group, name, id, \ + step, timestamp) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID_TID_AND_TIMESTAMP( \ + TRACE_EVENT_PHASE_ASYNC_STEP_INTO, category_group, name, id, \ + TRACE_EVENT_API_CURRENT_THREAD_ID, timestamp, TRACE_EVENT_FLAG_NONE, \ + "step", step) + +// Records a single ASYNC_STEP_PAST event for |step| immediately. If the +// category is not enabled, then this does nothing. The |name| and |id| must +// match the ASYNC_BEGIN event above. The |step| param identifies this step +// within the async event. This should be called at the beginning of the next +// phase of an asynchronous operation. The ASYNC_BEGIN event must not have any +// ASYNC_STEP_INTO events. +#define TRACE_EVENT_ASYNC_STEP_PAST0(category_group, name, id, step) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_ASYNC_STEP_PAST, \ + category_group, name, id, \ + TRACE_EVENT_FLAG_NONE, "step", step) +#define TRACE_EVENT_ASYNC_STEP_PAST1(category_group, name, id, step, \ + arg1_name, arg1_val) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID( \ + TRACE_EVENT_PHASE_ASYNC_STEP_PAST, category_group, name, id, \ + TRACE_EVENT_FLAG_NONE, "step", step, arg1_name, arg1_val) + +// Records a single ASYNC_END event for "name" immediately. If the category +// is not enabled, then this does nothing. +#define TRACE_EVENT_ASYNC_END0(category_group, name, id) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_ASYNC_END, \ + category_group, name, id, \ + TRACE_EVENT_FLAG_NONE) +#define TRACE_EVENT_ASYNC_END1(category_group, name, id, arg1_name, arg1_val) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_ASYNC_END, \ + category_group, name, id, \ + TRACE_EVENT_FLAG_NONE, arg1_name, arg1_val) +#define TRACE_EVENT_ASYNC_END2(category_group, name, id, arg1_name, arg1_val, \ + arg2_name, arg2_val) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID( \ + TRACE_EVENT_PHASE_ASYNC_END, category_group, name, id, \ + TRACE_EVENT_FLAG_NONE, arg1_name, arg1_val, arg2_name, arg2_val) +#define TRACE_EVENT_COPY_ASYNC_END0(category_group, name, id) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_ASYNC_END, \ + category_group, name, id, \ + TRACE_EVENT_FLAG_COPY) +#define TRACE_EVENT_COPY_ASYNC_END1(category_group, name, id, arg1_name, \ + arg1_val) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_ASYNC_END, \ + category_group, name, id, \ + TRACE_EVENT_FLAG_COPY, arg1_name, arg1_val) +#define TRACE_EVENT_COPY_ASYNC_END2(category_group, name, id, arg1_name, \ + arg1_val, arg2_name, arg2_val) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID( \ + TRACE_EVENT_PHASE_ASYNC_END, category_group, name, id, \ + TRACE_EVENT_FLAG_COPY, arg1_name, arg1_val, arg2_name, arg2_val) + +// Similar to TRACE_EVENT_ASYNC_ENDx but with a custom |at| timestamp provided. +#define TRACE_EVENT_ASYNC_END_WITH_TIMESTAMP0(category_group, name, id, \ + timestamp) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID_TID_AND_TIMESTAMP( \ + TRACE_EVENT_PHASE_ASYNC_END, category_group, name, id, \ + TRACE_EVENT_API_CURRENT_THREAD_ID, timestamp, TRACE_EVENT_FLAG_NONE) +#define TRACE_EVENT_ASYNC_END_WITH_TIMESTAMP1(category_group, name, id, \ + timestamp, arg1_name, arg1_val) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID_TID_AND_TIMESTAMP( \ + TRACE_EVENT_PHASE_ASYNC_END, category_group, name, id, \ + TRACE_EVENT_API_CURRENT_THREAD_ID, timestamp, TRACE_EVENT_FLAG_NONE, \ + arg1_name, arg1_val) + +// NESTABLE_ASYNC_* APIs are used to describe an async operation, which can +// be nested within a NESTABLE_ASYNC event and/or have inner NESTABLE_ASYNC +// events. +// - category and name strings must have application lifetime (statics or +// literals). They may not include " chars. +// - A pair of NESTABLE_ASYNC_BEGIN event and NESTABLE_ASYNC_END event is +// considered as a match if their category_group, name and id all match. +// - |id| must either be a pointer or an integer value up to 64 bits. +// If it's a pointer, the bits will be xored with a hash of the process ID so +// that the same pointer on two different processes will not collide. +// - |id| is used to match a child NESTABLE_ASYNC event with its parent +// NESTABLE_ASYNC event. Therefore, events in the same nested event tree must +// be logged using the same id and category_group. +// +// Unmatched NESTABLE_ASYNC_END event will be parsed as an event that starts +// at the first NESTABLE_ASYNC event of that id, and unmatched +// NESTABLE_ASYNC_BEGIN event will be parsed as an event that ends at the last +// NESTABLE_ASYNC event of that id. Corresponding warning messages for +// unmatched events will be shown in the analysis view. + +// Records a single NESTABLE_ASYNC_BEGIN event called "name" immediately, with +// 0, 1 or 2 associated arguments. If the category is not enabled, then this +// does nothing. +#define TRACE_EVENT_NESTABLE_ASYNC_BEGIN0(category_group, name, id) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_NESTABLE_ASYNC_BEGIN, \ + category_group, name, id, \ + TRACE_EVENT_FLAG_NONE) +#define TRACE_EVENT_NESTABLE_ASYNC_BEGIN1(category_group, name, id, arg1_name, \ + arg1_val) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_NESTABLE_ASYNC_BEGIN, \ + category_group, name, id, \ + TRACE_EVENT_FLAG_NONE, arg1_name, arg1_val) +#define TRACE_EVENT_NESTABLE_ASYNC_BEGIN2(category_group, name, id, arg1_name, \ + arg1_val, arg2_name, arg2_val) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID( \ + TRACE_EVENT_PHASE_NESTABLE_ASYNC_BEGIN, category_group, name, id, \ + TRACE_EVENT_FLAG_NONE, arg1_name, arg1_val, arg2_name, arg2_val) +// Records a single NESTABLE_ASYNC_END event called "name" immediately, with 0 +// or 2 associated arguments. If the category is not enabled, then this does +// nothing. +#define TRACE_EVENT_NESTABLE_ASYNC_END0(category_group, name, id) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_NESTABLE_ASYNC_END, \ + category_group, name, id, \ + TRACE_EVENT_FLAG_NONE) +// Records a single NESTABLE_ASYNC_END event called "name" immediately, with 1 +// associated argument. If the category is not enabled, then this does nothing. +#define TRACE_EVENT_NESTABLE_ASYNC_END1(category_group, name, id, arg1_name, \ + arg1_val) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_NESTABLE_ASYNC_END, \ + category_group, name, id, \ + TRACE_EVENT_FLAG_NONE, arg1_name, arg1_val) +#define TRACE_EVENT_NESTABLE_ASYNC_END2(category_group, name, id, arg1_name, \ + arg1_val, arg2_name, arg2_val) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID( \ + TRACE_EVENT_PHASE_NESTABLE_ASYNC_END, category_group, name, id, \ + TRACE_EVENT_FLAG_NONE, arg1_name, arg1_val, arg2_name, arg2_val) + +// Records a single NESTABLE_ASYNC_INSTANT event called "name" immediately, +// with one associated argument. If the category is not enabled, then this +// does nothing. +#define TRACE_EVENT_NESTABLE_ASYNC_INSTANT1(category_group, name, id, \ + arg1_name, arg1_val) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_NESTABLE_ASYNC_INSTANT, \ + category_group, name, id, \ + TRACE_EVENT_FLAG_NONE, arg1_name, arg1_val) +// Records a single NESTABLE_ASYNC_INSTANT event called "name" immediately, +// with 2 associated arguments. If the category is not enabled, then this +// does nothing. +#define TRACE_EVENT_NESTABLE_ASYNC_INSTANT2( \ + category_group, name, id, arg1_name, arg1_val, arg2_name, arg2_val) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID( \ + TRACE_EVENT_PHASE_NESTABLE_ASYNC_INSTANT, category_group, name, id, \ + TRACE_EVENT_FLAG_NONE, arg1_name, arg1_val, arg2_name, arg2_val) + +#define TRACE_EVENT_COPY_NESTABLE_ASYNC_BEGIN_WITH_TTS2( \ + category_group, name, id, arg1_name, arg1_val, arg2_name, arg2_val) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID( \ + TRACE_EVENT_PHASE_NESTABLE_ASYNC_BEGIN, category_group, name, id, \ + TRACE_EVENT_FLAG_ASYNC_TTS | TRACE_EVENT_FLAG_COPY, arg1_name, arg1_val, \ + arg2_name, arg2_val) +#define TRACE_EVENT_COPY_NESTABLE_ASYNC_END_WITH_TTS2( \ + category_group, name, id, arg1_name, arg1_val, arg2_name, arg2_val) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID( \ + TRACE_EVENT_PHASE_NESTABLE_ASYNC_END, category_group, name, id, \ + TRACE_EVENT_FLAG_ASYNC_TTS | TRACE_EVENT_FLAG_COPY, arg1_name, arg1_val, \ + arg2_name, arg2_val) + +// Similar to TRACE_EVENT_NESTABLE_ASYNC_{BEGIN,END}x but with a custom +// |timestamp| provided. +#define TRACE_EVENT_NESTABLE_ASYNC_BEGIN_WITH_TIMESTAMP0(category_group, name, \ + id, timestamp) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID_TID_AND_TIMESTAMP( \ + TRACE_EVENT_PHASE_NESTABLE_ASYNC_BEGIN, category_group, name, id, \ + TRACE_EVENT_API_CURRENT_THREAD_ID, timestamp, TRACE_EVENT_FLAG_NONE) + +#define TRACE_EVENT_NESTABLE_ASYNC_END_WITH_TIMESTAMP0(category_group, name, \ + id, timestamp) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID_TID_AND_TIMESTAMP( \ + TRACE_EVENT_PHASE_NESTABLE_ASYNC_END, category_group, name, id, \ + TRACE_EVENT_API_CURRENT_THREAD_ID, timestamp, TRACE_EVENT_FLAG_NONE) + +#define TRACE_EVENT_COPY_NESTABLE_ASYNC_BEGIN_WITH_TIMESTAMP0( \ + category_group, name, id, timestamp) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID_TID_AND_TIMESTAMP( \ + TRACE_EVENT_PHASE_NESTABLE_ASYNC_BEGIN, category_group, name, id, \ + TRACE_EVENT_API_CURRENT_THREAD_ID, timestamp, TRACE_EVENT_FLAG_COPY) +#define TRACE_EVENT_COPY_NESTABLE_ASYNC_END_WITH_TIMESTAMP0( \ + category_group, name, id, timestamp) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID_TID_AND_TIMESTAMP( \ + TRACE_EVENT_PHASE_NESTABLE_ASYNC_END, category_group, name, id, \ + TRACE_EVENT_API_CURRENT_THREAD_ID, timestamp, TRACE_EVENT_FLAG_COPY) + +// Records a single NESTABLE_ASYNC_INSTANT event called "name" immediately, +// with 2 associated arguments. If the category is not enabled, then this +// does nothing. +#define TRACE_EVENT_NESTABLE_ASYNC_INSTANT2( \ + category_group, name, id, arg1_name, arg1_val, arg2_name, arg2_val) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID( \ + TRACE_EVENT_PHASE_NESTABLE_ASYNC_INSTANT, category_group, name, id, \ + TRACE_EVENT_FLAG_NONE, arg1_name, arg1_val, arg2_name, arg2_val) + +// Records a single FLOW_BEGIN event called "name" immediately, with 0, 1 or 2 +// associated arguments. If the category is not enabled, then this +// does nothing. +// - category and name strings must have application lifetime (statics or +// literals). They may not include " chars. +// - |id| is used to match the FLOW_BEGIN event with the FLOW_END event. FLOW +// events are considered to match if their category_group, name and id values +// all match. |id| must either be a pointer or an integer value up to 64 bits. +// If it's a pointer, the bits will be xored with a hash of the process ID so +// that the same pointer on two different processes will not collide. +// FLOW events are different from ASYNC events in how they are drawn by the +// tracing UI. A FLOW defines asynchronous data flow, such as posting a task +// (FLOW_BEGIN) and later executing that task (FLOW_END). Expect FLOWs to be +// drawn as lines or arrows from FLOW_BEGIN scopes to FLOW_END scopes. Similar +// to ASYNC, a FLOW can consist of multiple phases. The first phase is defined +// by the FLOW_BEGIN calls. Additional phases can be defined using the FLOW_STEP +// macros. When the operation completes, call FLOW_END. An async operation can +// span threads and processes, but all events in that operation must use the +// same |name| and |id|. Each event can have its own args. +#define TRACE_EVENT_FLOW_BEGIN0(category_group, name, id) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_FLOW_BEGIN, \ + category_group, name, id, \ + TRACE_EVENT_FLAG_NONE) +#define TRACE_EVENT_FLOW_BEGIN1(category_group, name, id, arg1_name, arg1_val) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_FLOW_BEGIN, \ + category_group, name, id, \ + TRACE_EVENT_FLAG_NONE, arg1_name, arg1_val) +#define TRACE_EVENT_FLOW_BEGIN2(category_group, name, id, arg1_name, arg1_val, \ + arg2_name, arg2_val) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID( \ + TRACE_EVENT_PHASE_FLOW_BEGIN, category_group, name, id, \ + TRACE_EVENT_FLAG_NONE, arg1_name, arg1_val, arg2_name, arg2_val) +#define TRACE_EVENT_COPY_FLOW_BEGIN0(category_group, name, id) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_FLOW_BEGIN, \ + category_group, name, id, \ + TRACE_EVENT_FLAG_COPY) +#define TRACE_EVENT_COPY_FLOW_BEGIN1(category_group, name, id, arg1_name, \ + arg1_val) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_FLOW_BEGIN, \ + category_group, name, id, \ + TRACE_EVENT_FLAG_COPY, arg1_name, arg1_val) +#define TRACE_EVENT_COPY_FLOW_BEGIN2(category_group, name, id, arg1_name, \ + arg1_val, arg2_name, arg2_val) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID( \ + TRACE_EVENT_PHASE_FLOW_BEGIN, category_group, name, id, \ + TRACE_EVENT_FLAG_COPY, arg1_name, arg1_val, arg2_name, arg2_val) + +// Records a single FLOW_STEP event for |step| immediately. If the category +// is not enabled, then this does nothing. The |name| and |id| must match the +// FLOW_BEGIN event above. The |step| param identifies this step within the +// async event. This should be called at the beginning of the next phase of an +// asynchronous operation. +#define TRACE_EVENT_FLOW_STEP0(category_group, name, id, step) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_FLOW_STEP, \ + category_group, name, id, \ + TRACE_EVENT_FLAG_NONE, "step", step) +#define TRACE_EVENT_FLOW_STEP1(category_group, name, id, step, arg1_name, \ + arg1_val) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID( \ + TRACE_EVENT_PHASE_FLOW_STEP, category_group, name, id, \ + TRACE_EVENT_FLAG_NONE, "step", step, arg1_name, arg1_val) +#define TRACE_EVENT_COPY_FLOW_STEP0(category_group, name, id, step) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_FLOW_STEP, \ + category_group, name, id, \ + TRACE_EVENT_FLAG_COPY, "step", step) +#define TRACE_EVENT_COPY_FLOW_STEP1(category_group, name, id, step, arg1_name, \ + arg1_val) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID( \ + TRACE_EVENT_PHASE_FLOW_STEP, category_group, name, id, \ + TRACE_EVENT_FLAG_COPY, "step", step, arg1_name, arg1_val) + +// Records a single FLOW_END event for "name" immediately. If the category +// is not enabled, then this does nothing. +#define TRACE_EVENT_FLOW_END0(category_group, name, id) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_FLOW_END, category_group, \ + name, id, TRACE_EVENT_FLAG_NONE) +#define TRACE_EVENT_FLOW_END_BIND_TO_ENCLOSING0(category_group, name, id) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_FLOW_END, category_group, \ + name, id, \ + TRACE_EVENT_FLAG_BIND_TO_ENCLOSING) +#define TRACE_EVENT_FLOW_END1(category_group, name, id, arg1_name, arg1_val) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_FLOW_END, category_group, \ + name, id, TRACE_EVENT_FLAG_NONE, arg1_name, \ + arg1_val) +#define TRACE_EVENT_FLOW_END2(category_group, name, id, arg1_name, arg1_val, \ + arg2_name, arg2_val) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_FLOW_END, category_group, \ + name, id, TRACE_EVENT_FLAG_NONE, arg1_name, \ + arg1_val, arg2_name, arg2_val) +#define TRACE_EVENT_COPY_FLOW_END0(category_group, name, id) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_FLOW_END, category_group, \ + name, id, TRACE_EVENT_FLAG_COPY) +#define TRACE_EVENT_COPY_FLOW_END1(category_group, name, id, arg1_name, \ + arg1_val) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_FLOW_END, category_group, \ + name, id, TRACE_EVENT_FLAG_COPY, arg1_name, \ + arg1_val) +#define TRACE_EVENT_COPY_FLOW_END2(category_group, name, id, arg1_name, \ + arg1_val, arg2_name, arg2_val) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_FLOW_END, category_group, \ + name, id, TRACE_EVENT_FLAG_COPY, arg1_name, \ + arg1_val, arg2_name, arg2_val) + +// Macros to track the life time and value of arbitrary client objects. +// See also TraceTrackableObject. +#define TRACE_EVENT_OBJECT_CREATED_WITH_ID(category_group, name, id) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID( \ + TRACE_EVENT_PHASE_CREATE_OBJECT, category_group, name, \ + TRACE_ID_DONT_MANGLE(id), TRACE_EVENT_FLAG_NONE) + +#define TRACE_EVENT_OBJECT_SNAPSHOT_WITH_ID(category_group, name, id, \ + snapshot) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID( \ + TRACE_EVENT_PHASE_SNAPSHOT_OBJECT, category_group, name, \ + TRACE_ID_DONT_MANGLE(id), TRACE_EVENT_FLAG_NONE, "snapshot", snapshot) + +#define TRACE_EVENT_OBJECT_SNAPSHOT_WITH_ID_AND_TIMESTAMP( \ + category_group, name, id, timestamp, snapshot) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID_TID_AND_TIMESTAMP( \ + TRACE_EVENT_PHASE_SNAPSHOT_OBJECT, category_group, name, \ + TRACE_ID_DONT_MANGLE(id), TRACE_EVENT_API_CURRENT_THREAD_ID, timestamp, \ + TRACE_EVENT_FLAG_NONE, "snapshot", snapshot) + +#define TRACE_EVENT_OBJECT_DELETED_WITH_ID(category_group, name, id) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID( \ + TRACE_EVENT_PHASE_DELETE_OBJECT, category_group, name, \ + TRACE_ID_DONT_MANGLE(id), TRACE_EVENT_FLAG_NONE) + +// Macro to efficiently determine if a given category group is enabled. +#define TRACE_EVENT_CATEGORY_GROUP_ENABLED(category_group, ret) \ + do { \ + INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category_group); \ + if (INTERNAL_TRACE_EVENT_CATEGORY_GROUP_ENABLED_FOR_RECORDING_MODE()) { \ + *ret = true; \ + } else { \ + *ret = false; \ + } \ + } while (0) + +// Macro to explicitly warm up a given category group. This could be useful in +// cases where we want to initialize a category group before any trace events +// for that category group is reported. For example, to have a category group +// always show up in the "record categories" list for manually selecting +// settings in about://tracing. +#define TRACE_EVENT_WARMUP_CATEGORY(category_group) \ + INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category_group) + +// Macro to efficiently determine, through polling, if a new trace has begun. +#define TRACE_EVENT_IS_NEW_TRACE(ret) \ + do { \ + static int INTERNAL_TRACE_EVENT_UID(lastRecordingNumber) = 0; \ + int num_traces_recorded = TRACE_EVENT_API_GET_NUM_TRACES_RECORDED(); \ + if (num_traces_recorded != -1 && \ + num_traces_recorded != \ + INTERNAL_TRACE_EVENT_UID(lastRecordingNumber)) { \ + INTERNAL_TRACE_EVENT_UID(lastRecordingNumber) = num_traces_recorded; \ + *ret = true; \ + } else { \ + *ret = false; \ + } \ + } while (0) + +// Notes regarding the following definitions: +// New values can be added and propagated to third party libraries, but existing +// definitions must never be changed, because third party libraries may use old +// definitions. + +// Phase indicates the nature of an event entry. E.g. part of a begin/end pair. +#define TRACE_EVENT_PHASE_BEGIN ('B') +#define TRACE_EVENT_PHASE_END ('E') +#define TRACE_EVENT_PHASE_COMPLETE ('X') +#define TRACE_EVENT_PHASE_INSTANT ('I') +#define TRACE_EVENT_PHASE_ASYNC_BEGIN ('S') +#define TRACE_EVENT_PHASE_ASYNC_STEP_INTO ('T') +#define TRACE_EVENT_PHASE_ASYNC_STEP_PAST ('p') +#define TRACE_EVENT_PHASE_ASYNC_END ('F') +#define TRACE_EVENT_PHASE_NESTABLE_ASYNC_BEGIN ('b') +#define TRACE_EVENT_PHASE_NESTABLE_ASYNC_END ('e') +#define TRACE_EVENT_PHASE_NESTABLE_ASYNC_INSTANT ('n') +#define TRACE_EVENT_PHASE_FLOW_BEGIN ('s') +#define TRACE_EVENT_PHASE_FLOW_STEP ('t') +#define TRACE_EVENT_PHASE_FLOW_END ('f') +#define TRACE_EVENT_PHASE_METADATA ('M') +#define TRACE_EVENT_PHASE_COUNTER ('C') +#define TRACE_EVENT_PHASE_SAMPLE ('P') +#define TRACE_EVENT_PHASE_CREATE_OBJECT ('N') +#define TRACE_EVENT_PHASE_SNAPSHOT_OBJECT ('O') +#define TRACE_EVENT_PHASE_DELETE_OBJECT ('D') +#define TRACE_EVENT_PHASE_MEMORY_DUMP ('v') +#define TRACE_EVENT_PHASE_MARK ('R') + +// Flags for changing the behavior of TRACE_EVENT_API_ADD_TRACE_EVENT. +#define TRACE_EVENT_FLAG_NONE (static_cast(0)) +#define TRACE_EVENT_FLAG_COPY (static_cast(1 << 0)) +#define TRACE_EVENT_FLAG_HAS_ID (static_cast(1 << 1)) +#define TRACE_EVENT_FLAG_MANGLE_ID (static_cast(1 << 2)) +#define TRACE_EVENT_FLAG_SCOPE_OFFSET (static_cast(1 << 3)) +#define TRACE_EVENT_FLAG_SCOPE_EXTRA (static_cast(1 << 4)) +#define TRACE_EVENT_FLAG_EXPLICIT_TIMESTAMP (static_cast(1 << 5)) +#define TRACE_EVENT_FLAG_ASYNC_TTS (static_cast(1 << 6)) +#define TRACE_EVENT_FLAG_BIND_TO_ENCLOSING (static_cast(1 << 7)) +#define TRACE_EVENT_FLAG_FLOW_IN (static_cast(1 << 8)) +#define TRACE_EVENT_FLAG_FLOW_OUT (static_cast(1 << 9)) +#define TRACE_EVENT_FLAG_HAS_CONTEXT_ID (static_cast(1 << 10)) +#define TRACE_EVENT_FLAG_HAS_PROCESS_ID (static_cast(1 << 11)) + +#define TRACE_EVENT_FLAG_SCOPE_MASK \ + (static_cast(TRACE_EVENT_FLAG_SCOPE_OFFSET | \ + TRACE_EVENT_FLAG_SCOPE_EXTRA)) + +// Type values for identifying types in the TraceValue union. +#define TRACE_VALUE_TYPE_BOOL (static_cast(1)) +#define TRACE_VALUE_TYPE_UINT (static_cast(2)) +#define TRACE_VALUE_TYPE_INT (static_cast(3)) +#define TRACE_VALUE_TYPE_DOUBLE (static_cast(4)) +#define TRACE_VALUE_TYPE_POINTER (static_cast(5)) +#define TRACE_VALUE_TYPE_STRING (static_cast(6)) +#define TRACE_VALUE_TYPE_COPY_STRING (static_cast(7)) +#define TRACE_VALUE_TYPE_CONVERTABLE (static_cast(8)) + +// Enum reflecting the scope of an INSTANT event. Must fit within +// TRACE_EVENT_FLAG_SCOPE_MASK. +#define TRACE_EVENT_SCOPE_GLOBAL (static_cast(0 << 3)) +#define TRACE_EVENT_SCOPE_PROCESS (static_cast(1 << 3)) +#define TRACE_EVENT_SCOPE_THREAD (static_cast(2 << 3)) + +#define TRACE_EVENT_SCOPE_NAME_GLOBAL ('g') +#define TRACE_EVENT_SCOPE_NAME_PROCESS ('p') +#define TRACE_EVENT_SCOPE_NAME_THREAD ('t') diff --git a/deps/v8/build/all.gyp b/deps/v8/build/all.gyp index 0195083b0180ba..0a05a2f02fdb5b 100644 --- a/deps/v8/build/all.gyp +++ b/deps/v8/build/all.gyp @@ -24,6 +24,7 @@ '../test/bot_default.gyp:*', '../test/benchmarks/benchmarks.gyp:*', '../test/default.gyp:*', + '../test/ignition.gyp:*', '../test/intl/intl.gyp:*', '../test/message/message.gyp:*', '../test/mjsunit/mjsunit.gyp:*', @@ -33,6 +34,7 @@ '../test/simdjs/simdjs.gyp:*', '../test/test262/test262.gyp:*', '../test/webkit/webkit.gyp:*', + '../tools/check-static-initializers.gyp:*', ], }], ] diff --git a/deps/v8/build/features.gypi b/deps/v8/build/features.gypi index 03b3072c9b3bae..5a21a63e324f49 100644 --- a/deps/v8/build/features.gypi +++ b/deps/v8/build/features.gypi @@ -67,9 +67,6 @@ # Set to 1 to enable DCHECKs in release builds. 'dcheck_always_on%': 0, - # Set to 1 to enable building with wasm prototype. - 'v8_wasm%': 0, - # Enable/disable JavaScript API accessors. 'v8_js_accessors%': 0, }, @@ -111,12 +108,6 @@ ['dcheck_always_on!=0', { 'defines': ['DEBUG',], }], - ['v8_wasm!=0', { - 'defines': ['V8_WASM',], - }], - ['v8_js_accessors!=0', { - 'defines': ['V8_JS_ACCESSORS'], - }], ], # conditions 'configurations': { 'DebugBaseCommon': { diff --git a/deps/v8/build/get_landmines.py b/deps/v8/build/get_landmines.py index 6e4dbb3468ec25..ea0ae0d415235d 100755 --- a/deps/v8/build/get_landmines.py +++ b/deps/v8/build/get_landmines.py @@ -25,6 +25,7 @@ def main(): print 'Remove build/android.gypi' print 'Cleanup after windows ninja switch attempt.' print 'Switching to pinned msvs toolchain.' + print 'Clobbering to hopefully resolve problem with mksnapshot' return 0 diff --git a/deps/v8/build/standalone.gypi b/deps/v8/build/standalone.gypi index fa4d45d4eb42f7..273d72b744e2b0 100644 --- a/deps/v8/build/standalone.gypi +++ b/deps/v8/build/standalone.gypi @@ -42,8 +42,7 @@ 'v8_enable_backtrace%': 0, 'v8_enable_i18n_support%': 1, 'v8_deprecation_warnings': 1, - # TODO(jochen): Turn this on. - 'v8_imminent_deprecation_warnings%': 0, + 'v8_imminent_deprecation_warnings': 1, 'msvs_multi_core_compile%': '1', 'mac_deployment_target%': '10.5', 'release_extra_cflags%': '', @@ -68,11 +67,15 @@ 'host_arch%': '<(host_arch)', 'target_arch%': '<(host_arch)', 'base_dir%': ' -``` -The simulator will start the debugger after executing n instructions. - -``` -$ out/arm.debug/d8 --stop_at -``` - -The simulator will stop at the given JavaScript function. - -Also you can directly generate 'stop' instructions in the ARM code. Stops are generated with - -``` -Assembler::stop(const char* msg, Condition cond, int32_t code) -``` - -When the Simulator hits a stop, it will print msg and start the debugger. - - -### Debugging commands. - -**Usual commands:** - -Enter `help` in the debugger prompt to get details on available commands. These include usual gdb-like commands, such as stepi, cont, disasm, etc. If the Simulator is run under gdb, the “gdb” debugger command will give control to gdb. You can then use cont from gdb to go back to the debugger. - - -**Debugger specific commands:** - -Here's a list of the ARM debugger specific commands, along with examples. -The JavaScript file “func.js” used below contains: - -``` -function test() { - print(“In function test.”); -} -test(); -``` - - * **printobject** `<`register`>` (alias po), will describe an object held in a register. - -``` -$ out/arm.debug/d8 func.js --stop_at test - -Simulator hit stop-at - 0xb544d6a8 e92d4902 stmdb sp!, {r1, r8, fp, lr} -sim> print r0 -r0: 0xb547ec15 -1253577707 -sim> printobject r0 -r0: -0xb547ec15: [Function] - - map = 0x0xb540ff01 - - initial_map = - - shared_info = 0xb547eb2d - - name = #test - - context = 0xb60083f1 - - code = 0xb544d681 - #arguments: 0xb545a15d (callback) - #length: 0xb545a14d (callback) - #name: 0xb545a155 (callback) - #prototype: 0xb545a145 (callback) - #caller: 0xb545a165 (callback) -``` - - * **break** `<`address`>`, will insert a breakpoint at the specified address. - - * **del**, will delete the current breakpoint. - -You can have only one such breakpoint. This is useful if you want to insert a breakpoint at runtime. -``` -$ out/arm.debug/d8 func.js --stop_at test - -Simulator hit stop-at - 0xb53a1ee8 e92d4902 stmdb sp!, {r1, r8, fp, lr} -sim> disasm 5 - 0xb53a1ee8 e92d4902 stmdb sp!, {r1, r8, fp, lr} - 0xb53a1eec e28db008 add fp, sp, #8 - 0xb53a1ef0 e59a200c ldr r2, [r10, #+12] - 0xb53a1ef4 e28fe004 add lr, pc, #4 - 0xb53a1ef8 e15d0002 cmp sp, r2 -sim> break 0xb53a1ef8 -sim> cont - 0xb53a1ef8 e15d0002 cmp sp, r2 -sim> disasm 5 - 0xb53a1ef8 e15d0002 cmp sp, r2 - 0xb53a1efc 359ff034 ldrcc pc, [pc, #+52] - 0xb53a1f00 e5980017 ldr r0, [r8, #+23] - 0xb53a1f04 e59f1030 ldr r1, [pc, #+48] - 0xb53a1f08 e52d0004 str r0, [sp, #-4]! -sim> break 0xb53a1f08 -setting breakpoint failed -sim> del -sim> break 0xb53a1f08 -sim> cont - 0xb53a1f08 e52d0004 str r0, [sp, #-4]! -sim> del -sim> cont -In function test. -``` - - * Generated `stop` instuctions, will work as breakpoints with a few additional features. - -The first argument is a help message, the second is the condition, and the third is the stop code. If a code is specified, and is less than 256, the stop is said to be “watched”, and can be disabled/enabled; a counter also keeps track of how many times the Simulator hits this code. - -If we are working on this v8 C++ code, which is reached when running our JavaScript file. - -``` -__ stop("My stop.", al, 123); -__ mov(r0, r0); -__ mov(r0, r0); -__ mov(r0, r0); -__ mov(r0, r0); -__ mov(r0, r0); -__ stop("My second stop.", al, 0x1); -__ mov(r1, r1); -__ mov(r1, r1); -__ mov(r1, r1); -__ mov(r1, r1); -__ mov(r1, r1); -``` - -Here's a sample debugging session: - -We hit the first stop. - -``` -Simulator hit My stop. - 0xb53559e8 e1a00000 mov r0, r0 -``` - -We can see the following stop using disasm. The address of the message string is inlined in the code after the svc stop instruction. - -``` -sim> disasm - 0xb53559e8 e1a00000 mov r0, r0 - 0xb53559ec e1a00000 mov r0, r0 - 0xb53559f0 e1a00000 mov r0, r0 - 0xb53559f4 e1a00000 mov r0, r0 - 0xb53559f8 e1a00000 mov r0, r0 - 0xb53559fc ef800001 stop 1 - 0x1 - 0xb5355a00 08338a97 stop message: My second stop - 0xb5355a04 e1a00000 mov r1, r1 - 0xb5355a08 e1a00000 mov r1, r1 - 0xb5355a0c e1a00000 mov r1, r1 -``` - -Information can be printed for all (watched) stops which were hit at least once. - -``` -sim> stop info all -Stop information: -stop 123 - 0x7b: Enabled, counter = 1, My stop. -sim> cont -Simulator hit My second stop - 0xb5355a04 e1a00000 mov r1, r1 -sim> stop info all -Stop information: -stop 1 - 0x1: Enabled, counter = 1, My second stop -stop 123 - 0x7b: Enabled, counter = 1, My stop. -``` - -Stops can be disabled or enabled. (Only available for watched stops.) - -``` -sim> stop disable 1 -sim> cont -Simulator hit My stop. - 0xb5356808 e1a00000 mov r0, r0 -sim> cont -Simulator hit My stop. - 0xb5356c28 e1a00000 mov r0, r0 -sim> stop info all -Stop information: -stop 1 - 0x1: Disabled, counter = 2, My second stop -stop 123 - 0x7b: Enabled, counter = 3, My stop. -sim> stop enable 1 -sim> cont -Simulator hit My second stop - 0xb5356c44 e1a00000 mov r1, r1 -sim> stop disable all -sim> con -In function test. -``` \ No newline at end of file diff --git a/deps/v8/docs/becoming_v8_committer.md b/deps/v8/docs/becoming_v8_committer.md deleted file mode 100644 index 0a927b3ca9f72d..00000000000000 --- a/deps/v8/docs/becoming_v8_committer.md +++ /dev/null @@ -1,40 +0,0 @@ -# Becoming a V8 committer - -## What is a committer? - -Technically, a committer is someone who has write access to the V8 Git repository. A committer can submit his or her own patches or patches from others. - -This privilege is granted with some expectation of responsibility: committers are people who care about the V8 project and want to help meet its goals. A committer is not just someone who can make changes, but someone who has demonstrated his or her ability to collaborate with the team, get the most knowledgeable people to review code, contribute high-quality code, and follow through to fix issues (in code or tests). - -A committer is a contributor to the V8 projects' success and a citizen helping the projects succeed. See V8CommittersResponsibility. - -## How do I become a committer? - -In a nutshell, contribute 20 non-trivial patches and get at least three different people to review them (you'll need three people to support you). Then ask someone to nominate you. You're demonstrating your: - - * commitment to the project (20 good patches requires a lot of your valuable time), - * ability to collaborate with the team, - * understanding of how the team works (policies, processes for testing and code review, etc), - * understanding of the projects' code base and coding style, and - * ability to write good code (last but certainly not least) - -A current committer nominates you by sending email to v8-committers@googlegroups.com containing: - - * your first and last name - * your Google Code email address - * an explanation of why you should be a committer, - * embedded list of links to revisions (about top 10) containing your patches - -Two other committers need to second your nomination. If no one objects in 5 working days (U.S.), you're a committer. If anyone objects or wants more information, the committers discuss and usually come to a consensus (within the 5 working days). If issues cannot be resolved, there's a vote among current committers. - -Once you get approval from the existing committers, we'll send you instructions for write access to SVN or Git. You'll also be added to v8-committers@googlegroups.com. - -In the worst case, this can drag out for two weeks. Keep writing patches! Even in the rare cases where a nomination fails, the objection is usually something easy to address like "more patches" or "not enough people are familiar with this person's work." - -## Maintaining committer status - -You don't really need to do much to maintain committer status: just keep being awesome and helping the V8 project! - -In the unhappy event that a committer continues to disregard good citizenship (or actively disrupts the project), we may need to revoke that person's status. The process is the same as for nominating a new committer: someone suggests the revocation with a good reason, two people second the motion, and a vote may be called if consensus cannot be reached. I hope that's simple enough, and that we never have to test it in practice. - -(Source: inspired by http://dev.chromium.org/getting-involved/become-a-committer ) diff --git a/deps/v8/docs/building_with_gyp.md b/deps/v8/docs/building_with_gyp.md deleted file mode 100644 index 0183fd2de519f2..00000000000000 --- a/deps/v8/docs/building_with_gyp.md +++ /dev/null @@ -1,260 +0,0 @@ -**Build issues? File a bug at code.google.com/p/v8/issues or ask for help on v8-users@googlegroups.com.** - -# Building V8 - -V8 is built with the help of [GYP](http://code.google.com/p/gyp/). GYP is a meta build system of sorts, as it generates build files for a number of other build systems. How you build therefore depends on what "back-end" build system and compiler you're using. -The instructions below assume that you already have a [checkout of V8](using_git.md) but haven't yet installed the build dependencies. - -If you intend to develop on V8, i.e., send patches and work with changelists, you will need to install the dependencies as described [here](using_git.md). - - -## Prerequisite: Installing GYP - -First, you need GYP itself. GYP is fetched together with the other dependencies by running: - -``` -gclient sync -``` - -## Building - -### GCC + make - -Requires GNU make 3.81 or later. Should work with any GCC >= 4.8 or any recent clang (3.5 highly recommended). - -#### Build instructions - - -The top-level Makefile defines a number of targets for each target architecture (`ia32`, `x64`, `arm`, `arm64`) and mode (`debug`, `optdebug`, or `release`). So your basic command for building is: -``` -make ia32.release -``` - -or analogously for the other architectures and modes. You can build both debug and release binaries with just one command: -``` -make ia32 -``` - -To automatically build in release mode for the host architecture: -``` -make native -``` - -You can also can build all architectures in a given mode at once: -``` -make release -``` - -Or everything: -``` -make -``` - -#### Optional parameters - - * `-j` specifies the number of parallel build processes. Set it (roughly) to the number of CPU cores your machine has. The GYP/make based V8 build also supports distcc, so you can compile with `-j100` or so, provided you have enough machines around. - - * `OUTDIR=foo` specifies where the compiled binaries go. It defaults to `./out/`. In this directory, a subdirectory will be created for each architecture and mode. You will find the d8 shell's binary in `foo/ia32.release/d8`, for example. - - * `library=shared` or `component=shared_library` (the two are completely equivalent) builds V8 as a shared library (`libv8.so`). - - * `soname_version=1.2.3` is only relevant for shared library builds and configures the SONAME of the library. Both the SONAME and the filename of the library will be `libv8.so.1.2.3` if you specify this. Due to a peculiarity in GYP, if you specify a custom SONAME, the library's path will no longer be encoded in the binaries, so you'll have to run d8 as follows: -``` -LD_LIBRARY_PATH=out/ia32.release/lib.target out/ia32.release/d8 -``` - - * `console=readline` enables readline support for the d8 shell. You need readline development headers for this (`libreadline-dev` on Ubuntu). - - * `disassembler=on` enables the disassembler for release mode binaries (it's always enabled for debug binaries). This is useful if you want to inspect generated machine code. - - * `snapshot=off` disables building with a heap snapshot. Compiling will be a little faster, but V8’s start up will be slightly slower. - - * `gdbjit=on` enables GDB JIT support. - - * `liveobjectlist=on` enables the Live Object List feature. - - * `vfp3=off` is only relevant for ARM builds with snapshot and disables the use of VFP3 instructions in the snapshot. - - * `debuggersupport=off` disables the javascript debugger. - - * `werror=no` omits the -Werror flag. This is especially useful for not officially supported C++ compilers (e.g. newer versions of the GCC) so that compile warnings are ignored. - - * `strictaliasing=off` passes the -fno-strict-aliasing flag to GCC. This may help to work around build failures on officially unsupported platforms and/or GCC versions. - - * `regexp=interpreted` chooses the interpreted mode of the irregexp regular expression engine instead of the native code mode. - - * `hardfp=on` creates "hardfp" binaries on ARM. - -### Ninja - -To build d8: -``` -export GYP_GENERATORS=ninja -build/gyp_v8 -ninja -C out/Debug d8 -``` - -Specify `out/Release` for a release build. I recommend setting up an alias so that you don't need to type out that build directory path. - -If you want to build all targets, use `ninja -C out/Debug all`. It's faster to build only the target you're working on, like `d8` or `unittests`. - -Note: You need to set `v8_target_arch` if you want a non-native build, i.e. either -``` -export GYP_DEFINES="v8_target_arch=arm" -build/gyp_v8 ... -``` -or -``` -build/gyp_v8 -Dv8_target_arch=arm ... -``` - - -#### Using goma (Googlers only) - -To use goma you need to set the `use_goma` gyp define, either by passing it to `gyp_v8`, i.e. -``` -build/gyp_v8 -Duse_goma=1 -``` -or by setting the environment variable `$GYP_DEFINES` appropriately: -``` -export GYP_DEFINES="use_goma=1" -``` -Note: You may need to also set `gomadir` to point to the directory where you installed goma, if it's not in the default location. - -If you are using goma, you'll also want to bump the job limit, i.e. -``` -ninja -j 100 -C out/Debug d8 -``` - - -### Cross-compiling - -Similar to building with Clang, you can also use a cross-compiler. Just export your toolchain (`CXX`/`LINK` environment variables should be enough) and compile. For example: -``` -export CXX=/path/to/cross-compile-g++ -export LINK=/path/to/cross-compile-g++ -make arm.release -``` - - -### Xcode - -From the root of your V8 checkout, run either of: -``` -build/gyp_v8 -Dtarget_arch=ia32 -build/gyp_v8 -Dtarget_arch=x64 -``` - -This will generate Xcode project files in `build/` that you can then either open with Xcode or compile directly from the command line: -``` -xcodebuild -project build/all.xcodeproj -configuration Release -xcodebuild -project build/all.xcodeproj -``` - -Note: If you have configured your `GYP_GENERATORS` environment variable, either unset it, or set it to `xcode` for this to work. - - -#### Custom build settings - -You can export the `GYP_DEFINES` environment variable in your shell to configure custom build options. The syntax is `GYP_DEFINES="-Dvariable1=value1 -Dvariable2=value2"` and so on for as many variables as you wish. Possibly interesting options include: - * `-Dcomponent=shared_library` (see `library=shared` in the [GCC + make](#Optional_parameters.md) section above) - * `-Dconsole=readline` (see `console=readline`) - * `-Dv8_enable_disassembler=1` (see `disassembler=on`) - * `-Dv8_use_snapshot='false'` (see `snapshot=off`) - * `-Dv8_enable_gdbjit=1` (see `gdbjit=on`) - * `-Dv8_use_liveobjectlist=true` (see `liveobjectlist=on`) - - -### Visual Studio - -You need Visual Studio 2013, older versions might still work at the moment, but this will probably change soon because we intend to use C++11 features. - -#### Prerequisites - -After you created [checkout of V8](using_git.md), all dependencies will be already installed. - -If you are getting errors during build mentioning that 'python' could not be found, add the 'python.exe' to PATH. - -If you have Visual Studio 2013 and 2015 installed side-by-side and set the environment variable GYP\_MSVS\_VERSION to '2013'. In that case the right project files are going to be created. - -#### Building - * If you use the command prompt: - 1. Generate project files: -``` -python build\gyp_v8 -``` -> > > Specify the path to `python.exe` if you don't have it in your PATH. -> > > Append `-Dtarget_arch=x64` if you want to build 64bit binaries. If you switch between ia32 and x64 targets, you may have to manually delete the generated .vcproj/.sln files before regenerating them. -> > > Example: -``` -third_party/python_26/python.exe build\gyp_v8 -Dtarget_arch=x64 -``` - 1. Build: -> > > Either open `build\All.sln` in Visual Studio, or compile on the command line as follows (adapt the path as necessary, or simply put `devenv.com` in your PATH): -``` -"c:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\devenv.com" /build Release build\All.sln -``` -> > > Replace `Release` with `Debug` to build in Debug mode. -> > > The built binaries will be in build\Release\ or build\Debug\. - - * If you use cygwin, the workflow is the same, but the syntax is slightly different: - 1. Generate project files: -``` -build/gyp_v8 -``` -> > > This will spit out a bunch of warnings about missing input files, but it seems to be OK to ignore them. (If you have time to figure this out, we'd happily accept a patch that makes the warnings go away!) - 1. Build: -``` -/cygdrive/c/Program\ Files\ (x86)/Microsoft\ Visual\ Studio\ 9.0/Common7/IDE/devenv.com /build Release build/all.sln -``` - - -#### Custom build settings - -See the "custom build settings" section for [Xcode](#Xcode) above. - - -#### Running tests - -You can abuse the test driver's --buildbot flag to make it find the executables where MSVC puts them: -``` -python tools/run-tests.py --buildbot --outdir build --arch ia32 --mode Release -``` - - -### MinGW - -Building on MinGW is not officially supported, but it is possible. You even have two options: - -#### Option 1: With Cygwin Installed - -Requirements: - * MinGW - * Cygwin, including Python - * Python from www.python.org _(yes, you need two Python installations!)_ - -Building: - 1. Open a MinGW shell - 1. `export PATH=$PATH:/c/cygwin/bin` _(or wherever you installed Cygwin)_ - 1. `make ia32.release -j8` - -Running tests: - 1. Open a MinGW shell - 1. `export PATH=/c/Python27:$PATH` _(or wherever you installed Python)_ - 1. `make ia32.release.check -j8` - -#### Option 2: Without Cygwin, just MinGW - -Requirements: - * MinGW - * Python from www.python.org - -Building and testing: - 1. Open a MinGW shell - 1. `tools/mingw-generate-makefiles.sh` _(re-run this any time a `*`.gyp`*` file changed, such as after updating your checkout)_ - 1. `make ia32.release` _(unfortunately -jX doesn't seem to work here)_ - 1. `make ia32.release.check -j8` - - -# Final Note -If you have problems or questions, please file bugs at code.google.com/p/v8/issues or send mail to v8-users@googlegroups.com. Comments on this page are likely to go unnoticed and unanswered. \ No newline at end of file diff --git a/deps/v8/docs/contributing.md b/deps/v8/docs/contributing.md deleted file mode 100644 index aa8e6659762d38..00000000000000 --- a/deps/v8/docs/contributing.md +++ /dev/null @@ -1,32 +0,0 @@ -Here you will find information that you'll need to be able to contribute to V8. Be sure to read the whole thing before sending us a contribution, including the small print at the end. - -## Before you contribute - -Before you start working on a larger contribution V8 you should get in touch with us first through the V8 [contributor mailing list](http://groups.google.com/group/v8-dev) so we can help out and possibly guide you; coordinating up front makes it much easier to avoid frustration later on. - -## Getting the code - -See [UsingGit](using_git.md). - -## Submitting code - -The source code of V8 follows the [Google C++ Style Guide](http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml) so you should familiarize yourself with those guidelines. Before submitting code you must pass all our [tests](http://code.google.com/p/v8-wiki/wiki/Testing), and have to successfully run the presubmit checks: - -> `tools/presubmit.py` - -The presubmit script uses a linter from Google, `cpplint.py`. External contributors can get this from [here](http://google-styleguide.googlecode.com/svn/trunk/cpplint/cpplint.py) and place it in their path. - -All submissions, including submissions by project members, require review. We use the same code-review tools and process as the chromium project. In order to submit a patch, you need to get the [depot\_tools](http://dev.chromium.org/developers/how-tos/install-depot-tools) and follow these instructions on [requesting a review](http://dev.chromium.org/developers/contributing-code) (using your V8 workspace instead of a chromium workspace). - -### Look out for breakage or regressions - -Before submitting your code please check the [buildbot console](http://build.chromium.org/p/client.v8/console) to see that the columns are mostly green before checking in your changes. Otherwise you will not know if your changes break the build or not. When your change is committed watch the [buildbot console](http://build.chromium.org/p/client.v8/console) until the bots turn green after your change. - - -## The small print - -Before we can use your code you have to sign the [Google Individual Contributor License Agreement](http://code.google.com/legal/individual-cla-v1.0.html), which you can do online. This is mainly because you own the copyright to your changes, even after your contribution becomes part of our codebase, so we need your permission to use and distribute your code. We also need to be sure of various other things, for instance that you'll tell us if you know that your code infringes on other people's patents. You don't have to do this until after you've submitted your code for review and a member has approved it, but you will have to do it before we can put your code into our codebase. - -Contributions made by corporations are covered by a different agreement than the one above, the [Software Grant and Corporate Contributor License Agreement](http://code.google.com/legal/corporate-cla-v1.0.html). - -Sign them online [here](https://cla.developers.google.com/) \ No newline at end of file diff --git a/deps/v8/docs/cross_compiling_for_arm.md b/deps/v8/docs/cross_compiling_for_arm.md deleted file mode 100644 index 68464eff1f5568..00000000000000 --- a/deps/v8/docs/cross_compiling_for_arm.md +++ /dev/null @@ -1,151 +0,0 @@ -

Building V8 with SCons is no longer supported. See BuildingWithGYP.

- ---- - - -# Using Sourcery G++ Lite - -The Sourcery G++ Lite cross compiler suite is a free version of Sourcery G++ from [CodeSourcery](http://www.codesourcery.com). There is a page for the [GNU Toolchain for ARM Processors](http://www.codesourcery.com/sgpp/lite/arm). Determine the version you need for your host/target combination. - -The following instructions uses [2009q1-203 for ARM GNU/Linux](http://www.codesourcery.com/sgpp/lite/arm/portal/release858), and if using a different version please change the URLs and `TOOL_PREFIX` below accordingly. - -## Installing on host and target - -The simplest way of setting this up is to install the full Sourcery G++ Lite package on both the host and target at the same location. This will ensure that all the libraries required are available on both sides. If you want to use the default libraries on the host there is no need the install anything on the target. - -The following script will install in `/opt/codesourcery`: - -``` -#!/bin/sh - -sudo mkdir /opt/codesourcery -cd /opt/codesourcery -sudo chown $USERNAME . -chmod g+ws . -umask 2 -wget http://www.codesourcery.com/sgpp/lite/arm/portal/package4571/public/arm-none-linux-gnueabi/arm-2009q1-203-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 -tar -xvf arm-2009q1-203-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 -``` - - -## Building using scons without snapshot - -The simplest way to build is without snapshot, as that does no involve using the simulator to generate the snapshot. The following script will build the sample shell without snapshot for ARM v7. - -``` -#!/bin/sh - -export TOOL_PREFIX=/opt/codesourcery/arm-2009q1/bin/arm-none-linux-gnueabi -export CXX=$TOOL_PREFIX-g++ -export AR=$TOOL_PREFIX-ar -export RANLIB=$TOOL_PREFIX-ranlib -export CC=$TOOL_PREFIX-gcc -export LD=$TOOL_PREFIX-ld - -export CCFLAGS="-march=armv7-a -mtune=cortex-a8 -mfpu=vfp" -export ARM_TARGET_LIB=/opt/codesourcery/arm-2009q1/arm-none-linux-gnueabi/libc - -scons wordsize=32 snapshot=off arch=arm sample=shell -``` - -If the processor is not Cortex A8 or does not have VFP enabled the `-mtune=cortex-a8` and `-mfpu=vfp` part of `CCFLAGS` needs to be changed accordingly. By default the V8 SCons build adds `-mfloat-abi=softfp`. - -If using the default libraries on the target just leave out the setting of `ARM_TARGET_LIB` and if the target libraies are in a different location ARM\_TARGET\_LIB` needs to be adjusted accordingly. - -The default for Sourcery G++ Lite is ARM v5te with software floating point emulation, so if testing building for ARM v5te the setting of `CCFLAGS` and `ARM_TARGET_LIB` should be changed to: - -``` -CCFLAGS="" -ARM_TARGET_LIB=/opt/codesourcery/arm-2009q1/arm-none-linux-gnueabi/libc - -scons armeabi=soft ... -``` - -Relying on defaults in the tool chain might lead to surprises, so for ARM v5te with software floating point emulation the following is more explicit: - -``` -CCFLAGS="-march=armv5te" -ARM_TARGET_LIB=/opt/codesourcery/arm-2009q1/arm-none-linux-gnueabi/libc - -scons armeabi=soft ... -``` - -If the target has an VFP unit use the following: - -``` -CCFLAGS="-mfpu=vfpv3" -ARM_TARGET_LIB=/opt/codesourcery/arm-2009q1/arm-none-linux-gnueabi/libc -``` - -To allow G++ to use Thumb2 instructions and the VFP unit when compiling the C/C++ code use: - -``` -CCFLAGS="-mthumb -mfpu=vfpv3" -ARM_TARGET_LIB=/opt/codesourcery/arm-2009q1/arm-none-linux-gnueabi/libc/thumb2 -``` - -_Note:_ V8 will not use Thumb2 instructions in its generated code it always uses the full ARM instruction set. - -For other ARM versions please check the Sourcery G++ Lite documentation. - -As mentioned above the default for Sourcery G++ Lite used here is ARM v5te with software floating point emulation. However beware that this default might change between versions and that there is no unique defaults for ARM tool chains in general, so always passing `-march` and possibly `-mfpu` is recommended. Passing `-mfloat-abi` is not required as this is controlled by the SCons option `armeabi`. - -## Building using scons with snapshot - -When building with snapshot the simulator is used to build the snapshot on the host and then building for the target with that snapshot. The following script will accomplish that (using both Thumb2 and VFP instructions): - -``` -#!/bin/sh - -V8DIR=.. - -cd host - -scons -Y$V8DIR simulator=arm snapshot=on -mv obj/release/snapshot.cc $V8DIR/src/snapshot.cc - -cd .. - -export TOOL_PREFIX=/opt/codesourcery/arm-2010.09-103/bin/arm-none-linux-gnueabi -export CXX=$TOOL_PREFIX-g++ -export AR=$TOOL_PREFIX-ar -export RANLIB=$TOOL_PREFIX-ranlib -export CC=$TOOL_PREFIX-gcc -export LD=$TOOL_PREFIX-ld - -export CCFLAGS="-mthumb -march=armv7-a -mfpu=vfpv3" -export ARM_TARGET_LIB=/opt/codesourcery/arm-2010.09-103/arm-none-linux-gnueabi/libc/thumb2 - -cd target - -scons -Y$V8DIR wordsize=32 snapshot=nobuild arch=armsample=shell -rm $V8DIR/src/snapshot.cc - -cd .. -``` - -This script required the two subdirectories `host` and `target`. V8 is first build for the host with the ARM simulator which supports running ARM code on the host. This is used to build a snapshot file which is then used for the actual cross compilation of V8. - -## Building for target which supports unaligned access - -The default when building V8 for an ARM target (either cross compiling or compiling on an ARM machine) is to disable unaligned memory access. However in some situations (most noticeably handling of regular expressions) performance will be better if unaligned memory access is used on processors which supports it. To enable unaligned memory access set `unalignedaccesses` to `on` when building: - -``` -scons unalignedaccesses=on ... -``` - -When running in the simulator the default is to enable unaligned memory access, so to test in the simulator with unaligned memory access disabled set `unalignedaccesses` to `off` when building: - -``` -scons unalignedaccesses=off simulator=arm ... -``` - -## Using V8 with hardfp calling convention - -By default V8 uses the softfp calling convention when calling C functions from generated code. However it is possible to use hardfp as well. To enable this set `armeabi` to `hardfp` when building: - -``` -scons armeabi=hardfp ... -``` - -Passing `armeabi=hardfp` to SCons will automatically set the compiler flag `-mfloat-abi=hardfp`. If using snapshots remember to pass `armeabi=hardfp` when building V8 on the host for generating the snapshot as well. \ No newline at end of file diff --git a/deps/v8/docs/d8_on_android.md b/deps/v8/docs/d8_on_android.md deleted file mode 100644 index eda641934593ff..00000000000000 --- a/deps/v8/docs/d8_on_android.md +++ /dev/null @@ -1,101 +0,0 @@ -# Prerequisites - * a Linux/Mac workstation - * v8 r12178 (on Google Code) or later - * an Android emulator or device with matching USB cable - * make sure [building with GYP](http://code.google.com/p/v8-wiki/wiki/BuildingWithGYP) works - - -# Get the code - - * Use the instructions from https://code.google.com/p/v8-wiki/wiki/UsingGit to get the code - * Once you need to add the android dependencies: -``` -v8$ echo "target_os = ['android']" >> ../.gclient && gclient sync --nohooks -``` - * The sync will take a while the first time as it downloads the Android NDK to v8/third\_party - * If you want to use a different NDK, you need to set the gyp variable android\_ndk\_root - - -# Get the Android SDK - * tested version: `r15` - * download the SDK from http://developer.android.com/sdk/index.html - * extract it - * install the "Platform tools" using the SDK manager that you can start by running `tools/android` - * now you have a `platform_tools/adb` binary which will be used later; put it in your `PATH` or remember where it is - - -# Set up your device - * Enable USB debugging (Gingerbread: Settings > Applications > Development > USB debugging; Ice Cream Sandwich: Settings > Developer Options > USB debugging) - * connect your device to your workstation - * make sure `adb devices` shows it; you may have to edit `udev` rules to give yourself proper permissions - * run `adb shell` to get an ssh-like shell on the device. In that shell, do: -``` -cd /data/local/tmp -mkdir v8 -cd v8 -``` - - -# Push stuff onto the device - * make sure your device is connected - * from your workstation's shell: -``` -adb push /file/you/want/to/push /data/local/tmp/v8/ -``` - - -# Compile V8 for Android -Currently two architectures (`android_arm` and `android_ia32`) are supported, each in `debug` or `release` mode. The following steps work equally well for both ARM and ia32, on either the emulator or real devices. - * compile: -``` -make android_arm.release -j16 -``` - * push the resulting binary to the device: -``` -adb push out/android_arm.release/d8 /data/local/tmp/v8/d8 -``` - * the most comfortable way to run it is from your workstation's shell as a one-off command (rather than starting an interactive shell session on the device), that way you can use pipes or whatever to process the output as necessary: -``` -adb shell /data/local/tmp/v8/d8 -``` - * warning: when you cancel such an "adb shell whatever" command using Ctrl+C, the process on the phone will sometimes keep running. - * Alternatively, use the `.check` suffix to automatically push test binaries and test cases onto the device and run them. -``` -make android_arm.release.check -``` - - -# Profile - * compile a binary, push it to the device, keep a copy of it on the host -``` -make android_arm.release -j16 -adb push out/android_arm.release/d8 /data/local/tmp/v8/d8-version.under.test -cp out/android_arm.release/d8 ./d8-version.under.test -``` - * get a profiling log and copy it to the host: -``` -adb shell /data/local/tmp/v8/d8-version.under.test benchmark.js --prof -adb pull /data/local/tmp/v8/v8.log ./ -``` - * open `v8.log` in your favorite editor and edit the first line to match the full path of the `d8-version.under.test` binary on your workstation (instead of the `/data/local/tmp/v8/` path it had on the device) - * run the tick processor with the host's `d8` and an appropriate `nm` binary: -``` -cp out/ia32.release/d8 ./d8 # only required once -tools/linux-tick-processor --nm=$ANDROID_NDK_ROOT/toolchain/bin/arm-linux-androideabi-nm -``` - -# Compile SpiderMonkey for Lollipop -``` -cd firefox/js/src -autoconf2.13 -./configure \ - --target=arm-linux-androideabi \ - --with-android-ndk=$ANDROID_NDK_ROOT \ - --with-android-version=21 \ - --without-intl-api \ - --disable-tests \ - --enable-android-libstdcxx \ - --enable-pie -make -adb push -p js/src/shell/js /data/local/tmp/js -``` \ No newline at end of file diff --git a/deps/v8/docs/debugger_protocol.md b/deps/v8/docs/debugger_protocol.md deleted file mode 100644 index 6b6b448a0f8cde..00000000000000 --- a/deps/v8/docs/debugger_protocol.md +++ /dev/null @@ -1,934 +0,0 @@ -# Introduction - -V8 has support for debugging the JavaScript code running in it. There are two API's for this a function based API using JavaScript objects and a message based API using a JSON based protocol. The function based API can be used by an in-process debugger agent, whereas the message based API can be used out of process as well. -**> The message based API is no longer maintained. Please ask in v8-users@googlegroups.com if you want to attach a debugger to the run-time.** - -The debugger protocol is based on [JSON](http://www.json.org/)). Each protocol packet is defined in terms of JSON and is transmitted as a string value. All packets have two basic elements `seq` and `type`. - -``` -{ "seq" : , - "type" : , - ... -} -``` - -The element `seq` holds the sequence number of the packet. And element type is the type of the packet. The type is a string value with one of the following values `"request"`, `"response"` or `"event"`. - -A `"request"` packet has the following structure: - -``` -{ "seq" : , - "type" : "request", - "command" : - "arguments" : ... -} -``` - -A `"response"` packet has the following structure. If `success` is true `body` will contain the response data. If `success` is false `message` will contain an error message. - -``` -{ "seq" : , - "type" : "response", - "request_seq" : , - "command" : - "body" : ... - "running" : - "success" : - "message" : -} -``` - -An `"event"` packet has the following structure: - -``` -{ "seq" : , - "type" : "event", - "event" : - body : ... -} -``` - -# Request/response pairs - -## Request `continue` - -The request `continue` is a request from the debugger to start the VM running again. As part of the `continue` request the debugger can specify if it wants the VM to perform a single step action. - -``` -{ "seq" : , - "type" : "request", - "command" : "continue", - "arguments" : { "stepaction" : <"in", "next" or "out">, - "stepcount" : - } -} -``` - -In the response the property `running` will always be true as the VM will be running after executing the `continue` command. If a single step action is requested the VM will respond with a `break` event after running the step. - -``` -{ "seq" : , - "type" : "response", - "request_seq" : , - "command" : "continue", - "running" : true - "success" : true -} -``` - - -Here are a couple of examples. - -``` -{"seq":117,"type":"request","command":"continue"} -{"seq":118,"type":"request","command":"continue","arguments":{"stepaction":"out"}} -{"seq":119,"type":"request","command":"continue","arguments":{"stepaction":"next","stepcount":5}} -``` - -## Request `evaluate` - -The request `evaluate` is used to evaluate an expression. The body of the result is as described in response object serialization below. - -``` -{ "seq" : , - "type" : "request", - "command" : "evaluate", - "arguments" : { "expression" : , - "frame" : , - "global" : , - "disable_break" : , - "additional_context" : [ - { "name" : , "handle" : }, - { "name" : , "handle" : }, - ... - ] - } -} -``` - -Optional argument `additional_context` specifies handles that will be visible from the expression under corresponding names (see example below). - -Response: - -``` -{ "seq" : , - "type" : "response", - "request_seq" : , - "command" : "evaluate", - "body" : ... - "running" : - "success" : true -} -``` - -Here are a couple of examples. - -``` -{"seq":117,"type":"request","command":"evaluate","arguments":{"expression":"1+2"}} -{"seq":118,"type":"request","command":"evaluate","arguments":{"expression":"a()","frame":3,"disable_break":false}} -{"seq":119,"type":"request","command":"evaluate","arguments":{"expression":"[o.a,o.b,o.c]","global":true,"disable_break":true}} -{"seq":120,"type":"request","command":"evaluate","arguments":{"expression":"obj.toString()", "additional_context": [{ "name":"obj","handle":25 }] }} -``` - -## Request `lookup` - -The request `lookup` is used to lookup objects based on their handle. The individual array elements of the body of the result is as described in response object serialization below. - -``` -{ "seq" : , - "type" : "request", - "command" : "lookup", - "arguments" : { "handles" : , - "includeSource" : , - } -} -``` - -Response: - -``` -{ "seq" : , - "type" : "response", - "request_seq" : , - "command" : "lookup", - "body" : - "running" : - "success" : true -} -``` - -Here are a couple of examples. - -``` -{"seq":117,"type":"request","command":"lookup","arguments":{"handles":"[1]"}} -{"seq":118,"type":"request","command":"lookup","arguments":{"handles":"[7,12]"}} -``` - -## Request `backtrace` - -The request `backtrace` returns a backtrace (or stacktrace) from the current execution state. When issuing a request a range of frames can be supplied. The top frame is frame number 0. If no frame range is supplied data for 10 frames will be returned. - -``` -{ "seq" : , - "type" : "request", - "command" : "backtrace", - "arguments" : { "fromFrame" : - "toFrame" : - "bottom" : - } -} -``` - -The response contains the frame data together with the actual frames returned and the toalt frame count. - -``` -{ "seq" : , - "type" : "response", - "request_seq" : , - "command" : "backtrace", - "body" : { "fromFrame" : - "toFrame" : - "totalFrames" : - "frames" : - } - "running" : - "success" : true -} -``` - -If there are no stack frames the result body only contains `totalFrames` with a value of `0`. When an exception event is generated due to compilation failures it is possible that there are no stack frames. - -Here are a couple of examples. - -``` -{"seq":117,"type":"request","command":"backtrace"} -{"seq":118,"type":"request","command":"backtrace","arguments":{"toFrame":2}} -{"seq":119,"type":"request","command":"backtrace","arguments":{"fromFrame":0,"toFrame":9}} -``` - -## Request `frame` - -The request frame selects a new selected frame and returns information for that. If no frame number is specified the selected frame is returned. - -``` -{ "seq" : , - "type" : "request", - "command" : "frame", - "arguments" : { "number" : - } -} -``` - -Response: - -``` -{ "seq" : , - "type" : "response", - "request_seq" : , - "command" : "frame", - "body" : { "index" : , - "receiver" : , - "func" : , - "script" :