mustang 0.0.1 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.rspec +1 -0
- data/Isolate +9 -0
- data/README.md +6 -12
- data/Rakefile +30 -4
- data/TODO.md +9 -0
- data/ext/v8/extconf.rb +56 -0
- data/ext/v8/v8.cpp +37 -0
- data/ext/v8/v8_array.cpp +161 -0
- data/ext/v8/v8_array.h +17 -0
- data/ext/v8/v8_base.cpp +147 -0
- data/ext/v8/v8_base.h +23 -0
- data/ext/v8/v8_cast.cpp +151 -0
- data/ext/v8/v8_cast.h +64 -0
- data/ext/v8/v8_context.cpp +174 -0
- data/ext/v8/v8_context.h +12 -0
- data/ext/v8/v8_date.cpp +61 -0
- data/ext/v8/v8_date.h +16 -0
- data/ext/v8/v8_errors.cpp +147 -0
- data/ext/v8/v8_errors.h +19 -0
- data/ext/v8/v8_external.cpp +66 -0
- data/ext/v8/v8_external.h +16 -0
- data/ext/v8/v8_function.cpp +182 -0
- data/ext/v8/v8_function.h +14 -0
- data/ext/v8/v8_integer.cpp +70 -0
- data/ext/v8/v8_integer.h +16 -0
- data/ext/v8/v8_macros.h +30 -0
- data/ext/v8/v8_main.cpp +53 -0
- data/ext/v8/v8_main.h +13 -0
- data/ext/v8/v8_number.cpp +62 -0
- data/ext/v8/v8_number.h +16 -0
- data/ext/v8/v8_object.cpp +172 -0
- data/ext/v8/v8_object.h +17 -0
- data/ext/v8/v8_ref.cpp +72 -0
- data/ext/v8/v8_ref.h +43 -0
- data/ext/v8/v8_regexp.cpp +148 -0
- data/ext/v8/v8_regexp.h +16 -0
- data/ext/v8/v8_string.cpp +78 -0
- data/ext/v8/v8_string.h +16 -0
- data/ext/v8/v8_value.cpp +370 -0
- data/ext/v8/v8_value.h +19 -0
- data/gemspec.yml +2 -1
- data/lib/core_ext/class.rb +14 -0
- data/lib/core_ext/object.rb +12 -0
- data/lib/core_ext/symbol.rb +23 -0
- data/lib/mustang.rb +44 -0
- data/lib/mustang/context.rb +69 -0
- data/lib/mustang/errors.rb +36 -0
- data/lib/support/delegated.rb +25 -0
- data/lib/v8/array.rb +21 -0
- data/lib/v8/context.rb +13 -0
- data/lib/v8/date.rb +20 -0
- data/lib/v8/error.rb +15 -0
- data/lib/v8/external.rb +16 -0
- data/lib/v8/function.rb +11 -0
- data/lib/v8/integer.rb +16 -0
- data/lib/v8/number.rb +16 -0
- data/lib/v8/object.rb +66 -0
- data/lib/v8/regexp.rb +23 -0
- data/lib/v8/string.rb +27 -0
- data/mustang.gemspec +3 -0
- data/spec/core_ext/class_spec.rb +19 -0
- data/spec/core_ext/object_spec.rb +19 -0
- data/spec/core_ext/symbol_spec.rb +27 -0
- data/spec/fixtures/test1.js +2 -0
- data/spec/fixtures/test2.js +2 -0
- data/spec/spec_helper.rb +20 -0
- data/spec/v8/array_spec.rb +88 -0
- data/spec/v8/cast_spec.rb +151 -0
- data/spec/v8/context_spec.rb +78 -0
- data/spec/v8/data_spec.rb +39 -0
- data/spec/v8/date_spec.rb +45 -0
- data/spec/v8/empty_spec.rb +27 -0
- data/spec/v8/errors_spec.rb +142 -0
- data/spec/v8/external_spec.rb +44 -0
- data/spec/v8/function_spec.rb +170 -0
- data/spec/v8/integer_spec.rb +41 -0
- data/spec/v8/main_spec.rb +18 -0
- data/spec/v8/null_spec.rb +27 -0
- data/spec/v8/number_spec.rb +40 -0
- data/spec/v8/object_spec.rb +79 -0
- data/spec/v8/primitive_spec.rb +9 -0
- data/spec/v8/regexp_spec.rb +65 -0
- data/spec/v8/string_spec.rb +48 -0
- data/spec/v8/undefined_spec.rb +27 -0
- data/spec/v8/value_spec.rb +215 -0
- data/vendor/v8/.gitignore +2 -0
- data/vendor/v8/AUTHORS +3 -1
- data/vendor/v8/ChangeLog +117 -0
- data/vendor/v8/SConstruct +334 -53
- data/vendor/v8/include/v8-debug.h +21 -11
- data/vendor/v8/include/v8-preparser.h +1 -1
- data/vendor/v8/include/v8-profiler.h +122 -43
- data/vendor/v8/include/v8-testing.h +5 -0
- data/vendor/v8/include/v8.h +171 -17
- data/vendor/v8/preparser/SConscript +38 -0
- data/vendor/v8/preparser/preparser-process.cc +77 -114
- data/vendor/v8/samples/shell.cc +232 -46
- data/vendor/v8/src/SConscript +29 -5
- data/vendor/v8/src/accessors.cc +70 -211
- data/vendor/v8/{test/cctest/test-mips.cc → src/allocation-inl.h} +15 -18
- data/vendor/v8/src/allocation.cc +0 -82
- data/vendor/v8/src/allocation.h +9 -42
- data/vendor/v8/src/api.cc +1645 -1156
- data/vendor/v8/src/api.h +76 -12
- data/vendor/v8/src/apiutils.h +0 -7
- data/vendor/v8/src/arguments.h +15 -4
- data/vendor/v8/src/arm/assembler-arm-inl.h +10 -9
- data/vendor/v8/src/arm/assembler-arm.cc +62 -23
- data/vendor/v8/src/arm/assembler-arm.h +76 -11
- data/vendor/v8/src/arm/builtins-arm.cc +39 -33
- data/vendor/v8/src/arm/code-stubs-arm.cc +1182 -402
- data/vendor/v8/src/arm/code-stubs-arm.h +20 -54
- data/vendor/v8/src/arm/codegen-arm.cc +159 -106
- data/vendor/v8/src/arm/codegen-arm.h +6 -6
- data/vendor/v8/src/arm/constants-arm.h +16 -1
- data/vendor/v8/src/arm/cpu-arm.cc +7 -5
- data/vendor/v8/src/arm/debug-arm.cc +6 -4
- data/vendor/v8/src/arm/deoptimizer-arm.cc +51 -14
- data/vendor/v8/src/arm/disasm-arm.cc +47 -15
- data/vendor/v8/src/arm/frames-arm.h +1 -1
- data/vendor/v8/src/arm/full-codegen-arm.cc +724 -408
- data/vendor/v8/src/arm/ic-arm.cc +90 -85
- data/vendor/v8/src/arm/lithium-arm.cc +140 -69
- data/vendor/v8/src/arm/lithium-arm.h +161 -46
- data/vendor/v8/src/arm/lithium-codegen-arm.cc +567 -297
- data/vendor/v8/src/arm/lithium-codegen-arm.h +21 -9
- data/vendor/v8/src/arm/lithium-gap-resolver-arm.cc +2 -0
- data/vendor/v8/src/arm/macro-assembler-arm.cc +457 -96
- data/vendor/v8/src/arm/macro-assembler-arm.h +115 -18
- data/vendor/v8/src/arm/regexp-macro-assembler-arm.cc +20 -13
- data/vendor/v8/src/arm/regexp-macro-assembler-arm.h +1 -0
- data/vendor/v8/src/arm/simulator-arm.cc +184 -101
- data/vendor/v8/src/arm/simulator-arm.h +26 -21
- data/vendor/v8/src/arm/stub-cache-arm.cc +450 -467
- data/vendor/v8/src/arm/virtual-frame-arm.cc +14 -12
- data/vendor/v8/src/arm/virtual-frame-arm.h +11 -8
- data/vendor/v8/src/array.js +35 -18
- data/vendor/v8/src/assembler.cc +186 -92
- data/vendor/v8/src/assembler.h +106 -69
- data/vendor/v8/src/ast-inl.h +5 -0
- data/vendor/v8/src/ast.cc +46 -35
- data/vendor/v8/src/ast.h +107 -50
- data/vendor/v8/src/atomicops.h +2 -0
- data/vendor/v8/src/atomicops_internals_mips_gcc.h +169 -0
- data/vendor/v8/src/bootstrapper.cc +649 -399
- data/vendor/v8/src/bootstrapper.h +94 -27
- data/vendor/v8/src/builtins.cc +359 -227
- data/vendor/v8/src/builtins.h +157 -123
- data/vendor/v8/src/checks.cc +2 -2
- data/vendor/v8/src/checks.h +4 -0
- data/vendor/v8/src/code-stubs.cc +27 -17
- data/vendor/v8/src/code-stubs.h +38 -17
- data/vendor/v8/src/codegen-inl.h +5 -1
- data/vendor/v8/src/codegen.cc +27 -17
- data/vendor/v8/src/codegen.h +9 -9
- data/vendor/v8/src/compilation-cache.cc +92 -206
- data/vendor/v8/src/compilation-cache.h +205 -30
- data/vendor/v8/src/compiler.cc +107 -120
- data/vendor/v8/src/compiler.h +17 -2
- data/vendor/v8/src/contexts.cc +22 -15
- data/vendor/v8/src/contexts.h +14 -8
- data/vendor/v8/src/conversions.cc +86 -30
- data/vendor/v8/src/counters.cc +19 -4
- data/vendor/v8/src/counters.h +28 -16
- data/vendor/v8/src/cpu-profiler-inl.h +4 -3
- data/vendor/v8/src/cpu-profiler.cc +123 -72
- data/vendor/v8/src/cpu-profiler.h +33 -19
- data/vendor/v8/src/cpu.h +2 -0
- data/vendor/v8/src/d8-debug.cc +3 -3
- data/vendor/v8/src/d8-debug.h +7 -6
- data/vendor/v8/src/d8-posix.cc +2 -0
- data/vendor/v8/src/d8.cc +22 -12
- data/vendor/v8/src/d8.gyp +3 -0
- data/vendor/v8/src/d8.js +618 -0
- data/vendor/v8/src/data-flow.h +3 -3
- data/vendor/v8/src/dateparser.h +4 -2
- data/vendor/v8/src/debug-agent.cc +10 -9
- data/vendor/v8/src/debug-agent.h +9 -11
- data/vendor/v8/src/debug-debugger.js +121 -0
- data/vendor/v8/src/debug.cc +331 -227
- data/vendor/v8/src/debug.h +248 -219
- data/vendor/v8/src/deoptimizer.cc +173 -62
- data/vendor/v8/src/deoptimizer.h +119 -19
- data/vendor/v8/src/disasm.h +3 -0
- data/vendor/v8/src/disassembler.cc +10 -9
- data/vendor/v8/src/execution.cc +185 -129
- data/vendor/v8/src/execution.h +47 -78
- data/vendor/v8/src/extensions/experimental/break-iterator.cc +250 -0
- data/vendor/v8/src/extensions/experimental/break-iterator.h +89 -0
- data/vendor/v8/src/extensions/experimental/experimental.gyp +2 -0
- data/vendor/v8/src/extensions/experimental/i18n-extension.cc +22 -2
- data/vendor/v8/src/extensions/externalize-string-extension.cc +2 -2
- data/vendor/v8/src/extensions/gc-extension.cc +1 -1
- data/vendor/v8/src/factory.cc +261 -154
- data/vendor/v8/src/factory.h +162 -158
- data/vendor/v8/src/flag-definitions.h +17 -11
- data/vendor/v8/src/frame-element.cc +0 -5
- data/vendor/v8/src/frame-element.h +9 -13
- data/vendor/v8/src/frames-inl.h +7 -0
- data/vendor/v8/src/frames.cc +56 -46
- data/vendor/v8/src/frames.h +36 -25
- data/vendor/v8/src/full-codegen.cc +15 -24
- data/vendor/v8/src/full-codegen.h +13 -41
- data/vendor/v8/src/func-name-inferrer.cc +7 -6
- data/vendor/v8/src/func-name-inferrer.h +1 -1
- data/vendor/v8/src/gdb-jit.cc +1 -0
- data/vendor/v8/src/global-handles.cc +118 -56
- data/vendor/v8/src/global-handles.h +98 -40
- data/vendor/v8/src/globals.h +2 -2
- data/vendor/v8/src/handles-inl.h +106 -9
- data/vendor/v8/src/handles.cc +220 -157
- data/vendor/v8/src/handles.h +38 -59
- data/vendor/v8/src/hashmap.h +3 -3
- data/vendor/v8/src/heap-inl.h +141 -25
- data/vendor/v8/src/heap-profiler.cc +117 -63
- data/vendor/v8/src/heap-profiler.h +38 -21
- data/vendor/v8/src/heap.cc +805 -564
- data/vendor/v8/src/heap.h +640 -594
- data/vendor/v8/src/hydrogen-instructions.cc +216 -73
- data/vendor/v8/src/hydrogen-instructions.h +259 -124
- data/vendor/v8/src/hydrogen.cc +996 -1171
- data/vendor/v8/src/hydrogen.h +163 -144
- data/vendor/v8/src/ia32/assembler-ia32-inl.h +12 -11
- data/vendor/v8/src/ia32/assembler-ia32.cc +85 -39
- data/vendor/v8/src/ia32/assembler-ia32.h +82 -16
- data/vendor/v8/src/ia32/builtins-ia32.cc +64 -58
- data/vendor/v8/src/ia32/code-stubs-ia32.cc +248 -324
- data/vendor/v8/src/ia32/code-stubs-ia32.h +3 -44
- data/vendor/v8/src/ia32/codegen-ia32.cc +217 -165
- data/vendor/v8/src/ia32/codegen-ia32.h +3 -0
- data/vendor/v8/src/ia32/cpu-ia32.cc +6 -5
- data/vendor/v8/src/ia32/debug-ia32.cc +8 -5
- data/vendor/v8/src/ia32/deoptimizer-ia32.cc +124 -14
- data/vendor/v8/src/ia32/disasm-ia32.cc +85 -62
- data/vendor/v8/src/ia32/frames-ia32.h +1 -1
- data/vendor/v8/src/ia32/full-codegen-ia32.cc +348 -435
- data/vendor/v8/src/ia32/ic-ia32.cc +91 -91
- data/vendor/v8/src/ia32/lithium-codegen-ia32.cc +500 -255
- data/vendor/v8/src/ia32/lithium-codegen-ia32.h +13 -4
- data/vendor/v8/src/ia32/lithium-gap-resolver-ia32.cc +6 -0
- data/vendor/v8/src/ia32/lithium-ia32.cc +122 -45
- data/vendor/v8/src/ia32/lithium-ia32.h +128 -41
- data/vendor/v8/src/ia32/macro-assembler-ia32.cc +109 -84
- data/vendor/v8/src/ia32/macro-assembler-ia32.h +18 -9
- data/vendor/v8/src/ia32/regexp-macro-assembler-ia32.cc +26 -15
- data/vendor/v8/src/ia32/regexp-macro-assembler-ia32.h +1 -0
- data/vendor/v8/src/ia32/register-allocator-ia32.cc +30 -30
- data/vendor/v8/src/ia32/simulator-ia32.h +4 -4
- data/vendor/v8/src/ia32/stub-cache-ia32.cc +383 -400
- data/vendor/v8/src/ia32/virtual-frame-ia32.cc +36 -13
- data/vendor/v8/src/ia32/virtual-frame-ia32.h +11 -5
- data/vendor/v8/src/ic-inl.h +12 -2
- data/vendor/v8/src/ic.cc +304 -221
- data/vendor/v8/src/ic.h +115 -58
- data/vendor/v8/src/interpreter-irregexp.cc +25 -21
- data/vendor/v8/src/interpreter-irregexp.h +2 -1
- data/vendor/v8/src/isolate.cc +883 -0
- data/vendor/v8/src/isolate.h +1304 -0
- data/vendor/v8/src/json.js +10 -10
- data/vendor/v8/src/jsregexp.cc +111 -80
- data/vendor/v8/src/jsregexp.h +6 -7
- data/vendor/v8/src/jump-target-heavy.cc +5 -8
- data/vendor/v8/src/jump-target-heavy.h +0 -6
- data/vendor/v8/src/jump-target-inl.h +1 -1
- data/vendor/v8/src/jump-target-light.cc +3 -3
- data/vendor/v8/src/lithium-allocator-inl.h +2 -0
- data/vendor/v8/src/lithium-allocator.cc +42 -30
- data/vendor/v8/src/lithium-allocator.h +8 -22
- data/vendor/v8/src/lithium.cc +1 -0
- data/vendor/v8/src/liveedit.cc +141 -99
- data/vendor/v8/src/liveedit.h +7 -2
- data/vendor/v8/src/liveobjectlist-inl.h +90 -0
- data/vendor/v8/src/liveobjectlist.cc +2537 -1
- data/vendor/v8/src/liveobjectlist.h +245 -35
- data/vendor/v8/src/log-utils.cc +122 -35
- data/vendor/v8/src/log-utils.h +33 -36
- data/vendor/v8/src/log.cc +299 -241
- data/vendor/v8/src/log.h +177 -110
- data/vendor/v8/src/mark-compact.cc +612 -470
- data/vendor/v8/src/mark-compact.h +153 -80
- data/vendor/v8/src/messages.cc +16 -14
- data/vendor/v8/src/messages.js +30 -7
- data/vendor/v8/src/mips/assembler-mips-inl.h +155 -35
- data/vendor/v8/src/mips/assembler-mips.cc +1093 -219
- data/vendor/v8/src/mips/assembler-mips.h +552 -153
- data/vendor/v8/src/mips/builtins-mips.cc +43 -100
- data/vendor/v8/src/mips/code-stubs-mips.cc +752 -0
- data/vendor/v8/src/mips/code-stubs-mips.h +511 -0
- data/vendor/v8/src/mips/codegen-mips-inl.h +8 -14
- data/vendor/v8/src/mips/codegen-mips.cc +672 -896
- data/vendor/v8/src/mips/codegen-mips.h +271 -69
- data/vendor/v8/src/mips/constants-mips.cc +44 -20
- data/vendor/v8/src/mips/constants-mips.h +238 -40
- data/vendor/v8/src/mips/cpu-mips.cc +20 -3
- data/vendor/v8/src/mips/debug-mips.cc +35 -7
- data/vendor/v8/src/mips/deoptimizer-mips.cc +91 -0
- data/vendor/v8/src/mips/disasm-mips.cc +329 -93
- data/vendor/v8/src/mips/frames-mips.cc +2 -50
- data/vendor/v8/src/mips/frames-mips.h +24 -9
- data/vendor/v8/src/mips/full-codegen-mips.cc +473 -23
- data/vendor/v8/src/mips/ic-mips.cc +81 -45
- data/vendor/v8/src/mips/jump-target-mips.cc +11 -106
- data/vendor/v8/src/mips/lithium-codegen-mips.h +65 -0
- data/vendor/v8/src/mips/lithium-mips.h +304 -0
- data/vendor/v8/src/mips/macro-assembler-mips.cc +2391 -390
- data/vendor/v8/src/mips/macro-assembler-mips.h +718 -121
- data/vendor/v8/src/mips/regexp-macro-assembler-mips.cc +478 -0
- data/vendor/v8/src/mips/regexp-macro-assembler-mips.h +250 -0
- data/vendor/v8/src/mips/register-allocator-mips-inl.h +0 -3
- data/vendor/v8/src/mips/register-allocator-mips.h +3 -2
- data/vendor/v8/src/mips/simulator-mips.cc +1009 -221
- data/vendor/v8/src/mips/simulator-mips.h +119 -36
- data/vendor/v8/src/mips/stub-cache-mips.cc +331 -148
- data/vendor/v8/src/mips/{fast-codegen-mips.cc → virtual-frame-mips-inl.h} +11 -30
- data/vendor/v8/src/mips/virtual-frame-mips.cc +137 -149
- data/vendor/v8/src/mips/virtual-frame-mips.h +294 -312
- data/vendor/v8/src/mirror-debugger.js +9 -8
- data/vendor/v8/src/mksnapshot.cc +2 -2
- data/vendor/v8/src/objects-debug.cc +16 -16
- data/vendor/v8/src/objects-inl.h +421 -195
- data/vendor/v8/src/objects-printer.cc +7 -7
- data/vendor/v8/src/objects-visiting.cc +1 -1
- data/vendor/v8/src/objects-visiting.h +33 -12
- data/vendor/v8/src/objects.cc +935 -658
- data/vendor/v8/src/objects.h +234 -139
- data/vendor/v8/src/parser.cc +484 -439
- data/vendor/v8/src/parser.h +35 -14
- data/vendor/v8/src/platform-cygwin.cc +173 -107
- data/vendor/v8/src/platform-freebsd.cc +224 -72
- data/vendor/v8/src/platform-linux.cc +234 -95
- data/vendor/v8/src/platform-macos.cc +215 -82
- data/vendor/v8/src/platform-nullos.cc +9 -3
- data/vendor/v8/src/platform-openbsd.cc +22 -7
- data/vendor/v8/src/platform-posix.cc +30 -5
- data/vendor/v8/src/platform-solaris.cc +120 -38
- data/vendor/v8/src/platform-tls-mac.h +62 -0
- data/vendor/v8/src/platform-tls-win32.h +62 -0
- data/vendor/v8/src/platform-tls.h +50 -0
- data/vendor/v8/src/platform-win32.cc +195 -97
- data/vendor/v8/src/platform.h +72 -15
- data/vendor/v8/src/preparse-data.cc +2 -0
- data/vendor/v8/src/preparser-api.cc +8 -2
- data/vendor/v8/src/preparser.cc +1 -1
- data/vendor/v8/src/prettyprinter.cc +43 -52
- data/vendor/v8/src/prettyprinter.h +1 -1
- data/vendor/v8/src/profile-generator-inl.h +0 -28
- data/vendor/v8/src/profile-generator.cc +942 -685
- data/vendor/v8/src/profile-generator.h +210 -176
- data/vendor/v8/src/property.cc +6 -0
- data/vendor/v8/src/property.h +14 -3
- data/vendor/v8/src/regexp-macro-assembler-irregexp.cc +1 -1
- data/vendor/v8/src/regexp-macro-assembler.cc +28 -19
- data/vendor/v8/src/regexp-macro-assembler.h +11 -6
- data/vendor/v8/src/regexp-stack.cc +18 -10
- data/vendor/v8/src/regexp-stack.h +45 -21
- data/vendor/v8/src/regexp.js +3 -3
- data/vendor/v8/src/register-allocator-inl.h +3 -3
- data/vendor/v8/src/register-allocator.cc +1 -7
- data/vendor/v8/src/register-allocator.h +5 -15
- data/vendor/v8/src/rewriter.cc +2 -1
- data/vendor/v8/src/runtime-profiler.cc +158 -128
- data/vendor/v8/src/runtime-profiler.h +131 -15
- data/vendor/v8/src/runtime.cc +2409 -1692
- data/vendor/v8/src/runtime.h +93 -17
- data/vendor/v8/src/safepoint-table.cc +3 -0
- data/vendor/v8/src/safepoint-table.h +9 -3
- data/vendor/v8/src/scanner-base.cc +21 -28
- data/vendor/v8/src/scanner-base.h +22 -11
- data/vendor/v8/src/scanner.cc +3 -5
- data/vendor/v8/src/scanner.h +4 -2
- data/vendor/v8/src/scopeinfo.cc +11 -16
- data/vendor/v8/src/scopeinfo.h +26 -15
- data/vendor/v8/src/scopes.cc +67 -37
- data/vendor/v8/src/scopes.h +26 -12
- data/vendor/v8/src/serialize.cc +193 -154
- data/vendor/v8/src/serialize.h +41 -36
- data/vendor/v8/src/small-pointer-list.h +163 -0
- data/vendor/v8/src/snapshot-common.cc +1 -1
- data/vendor/v8/src/snapshot.h +3 -1
- data/vendor/v8/src/spaces-inl.h +30 -25
- data/vendor/v8/src/spaces.cc +263 -370
- data/vendor/v8/src/spaces.h +178 -166
- data/vendor/v8/src/string-search.cc +4 -3
- data/vendor/v8/src/string-search.h +21 -20
- data/vendor/v8/src/string-stream.cc +32 -24
- data/vendor/v8/src/string.js +7 -7
- data/vendor/v8/src/stub-cache.cc +324 -248
- data/vendor/v8/src/stub-cache.h +181 -155
- data/vendor/v8/src/token.cc +3 -3
- data/vendor/v8/src/token.h +3 -3
- data/vendor/v8/src/top.cc +218 -390
- data/vendor/v8/src/type-info.cc +98 -32
- data/vendor/v8/src/type-info.h +10 -3
- data/vendor/v8/src/unicode.cc +1 -1
- data/vendor/v8/src/unicode.h +1 -1
- data/vendor/v8/src/utils.h +3 -0
- data/vendor/v8/src/v8-counters.cc +18 -11
- data/vendor/v8/src/v8-counters.h +34 -13
- data/vendor/v8/src/v8.cc +66 -121
- data/vendor/v8/src/v8.h +7 -4
- data/vendor/v8/src/v8globals.h +18 -12
- data/vendor/v8/src/{memory.h → v8memory.h} +0 -0
- data/vendor/v8/src/v8natives.js +59 -18
- data/vendor/v8/src/v8threads.cc +127 -114
- data/vendor/v8/src/v8threads.h +42 -35
- data/vendor/v8/src/v8utils.h +2 -39
- data/vendor/v8/src/variables.h +1 -1
- data/vendor/v8/src/version.cc +26 -5
- data/vendor/v8/src/version.h +4 -0
- data/vendor/v8/src/virtual-frame-heavy-inl.h +2 -4
- data/vendor/v8/src/virtual-frame-light-inl.h +5 -4
- data/vendor/v8/src/vm-state-inl.h +21 -17
- data/vendor/v8/src/vm-state.h +7 -5
- data/vendor/v8/src/win32-headers.h +1 -0
- data/vendor/v8/src/x64/assembler-x64-inl.h +12 -11
- data/vendor/v8/src/x64/assembler-x64.cc +80 -40
- data/vendor/v8/src/x64/assembler-x64.h +67 -17
- data/vendor/v8/src/x64/builtins-x64.cc +34 -33
- data/vendor/v8/src/x64/code-stubs-x64.cc +636 -377
- data/vendor/v8/src/x64/code-stubs-x64.h +14 -48
- data/vendor/v8/src/x64/codegen-x64-inl.h +1 -1
- data/vendor/v8/src/x64/codegen-x64.cc +158 -136
- data/vendor/v8/src/x64/codegen-x64.h +4 -1
- data/vendor/v8/src/x64/cpu-x64.cc +7 -5
- data/vendor/v8/src/x64/debug-x64.cc +8 -6
- data/vendor/v8/src/x64/deoptimizer-x64.cc +195 -20
- data/vendor/v8/src/x64/disasm-x64.cc +42 -23
- data/vendor/v8/src/x64/frames-x64.cc +1 -1
- data/vendor/v8/src/x64/frames-x64.h +2 -2
- data/vendor/v8/src/x64/full-codegen-x64.cc +780 -218
- data/vendor/v8/src/x64/ic-x64.cc +77 -79
- data/vendor/v8/src/x64/jump-target-x64.cc +1 -1
- data/vendor/v8/src/x64/lithium-codegen-x64.cc +698 -181
- data/vendor/v8/src/x64/lithium-codegen-x64.h +31 -6
- data/vendor/v8/src/x64/lithium-x64.cc +136 -54
- data/vendor/v8/src/x64/lithium-x64.h +142 -51
- data/vendor/v8/src/x64/macro-assembler-x64.cc +456 -187
- data/vendor/v8/src/x64/macro-assembler-x64.h +166 -34
- data/vendor/v8/src/x64/regexp-macro-assembler-x64.cc +44 -28
- data/vendor/v8/src/x64/regexp-macro-assembler-x64.h +8 -4
- data/vendor/v8/src/x64/register-allocator-x64-inl.h +3 -3
- data/vendor/v8/src/x64/register-allocator-x64.cc +12 -8
- data/vendor/v8/src/x64/simulator-x64.h +5 -5
- data/vendor/v8/src/x64/stub-cache-x64.cc +299 -344
- data/vendor/v8/src/x64/virtual-frame-x64.cc +37 -13
- data/vendor/v8/src/x64/virtual-frame-x64.h +13 -7
- data/vendor/v8/src/zone-inl.h +49 -3
- data/vendor/v8/src/zone.cc +42 -41
- data/vendor/v8/src/zone.h +37 -34
- data/vendor/v8/test/benchmarks/testcfg.py +100 -0
- data/vendor/v8/test/cctest/SConscript +5 -4
- data/vendor/v8/test/cctest/cctest.h +3 -2
- data/vendor/v8/test/cctest/cctest.status +6 -11
- data/vendor/v8/test/cctest/test-accessors.cc +3 -3
- data/vendor/v8/test/cctest/test-alloc.cc +39 -33
- data/vendor/v8/test/cctest/test-api.cc +1092 -205
- data/vendor/v8/test/cctest/test-assembler-arm.cc +39 -25
- data/vendor/v8/test/cctest/test-assembler-ia32.cc +36 -37
- data/vendor/v8/test/cctest/test-assembler-mips.cc +1098 -40
- data/vendor/v8/test/cctest/test-assembler-x64.cc +32 -25
- data/vendor/v8/test/cctest/test-ast.cc +1 -0
- data/vendor/v8/test/cctest/test-circular-queue.cc +8 -5
- data/vendor/v8/test/cctest/test-compiler.cc +24 -24
- data/vendor/v8/test/cctest/test-cpu-profiler.cc +140 -5
- data/vendor/v8/test/cctest/test-dataflow.cc +1 -0
- data/vendor/v8/test/cctest/test-debug.cc +136 -77
- data/vendor/v8/test/cctest/test-decls.cc +1 -1
- data/vendor/v8/test/cctest/test-deoptimization.cc +25 -24
- data/vendor/v8/test/cctest/test-disasm-arm.cc +9 -4
- data/vendor/v8/test/cctest/test-disasm-ia32.cc +10 -8
- data/vendor/v8/test/cctest/test-func-name-inference.cc +10 -4
- data/vendor/v8/test/cctest/test-heap-profiler.cc +226 -164
- data/vendor/v8/test/cctest/test-heap.cc +240 -217
- data/vendor/v8/test/cctest/test-liveedit.cc +1 -0
- data/vendor/v8/test/cctest/test-log-stack-tracer.cc +18 -20
- data/vendor/v8/test/cctest/test-log.cc +114 -108
- data/vendor/v8/test/cctest/test-macro-assembler-x64.cc +247 -177
- data/vendor/v8/test/cctest/test-mark-compact.cc +129 -90
- data/vendor/v8/test/cctest/test-parsing.cc +15 -14
- data/vendor/v8/test/cctest/test-platform-linux.cc +1 -0
- data/vendor/v8/test/cctest/test-platform-tls.cc +66 -0
- data/vendor/v8/test/cctest/test-platform-win32.cc +1 -0
- data/vendor/v8/test/cctest/test-profile-generator.cc +1 -1
- data/vendor/v8/test/cctest/test-regexp.cc +53 -41
- data/vendor/v8/test/cctest/test-reloc-info.cc +18 -11
- data/vendor/v8/test/cctest/test-serialize.cc +44 -43
- data/vendor/v8/test/cctest/test-sockets.cc +8 -3
- data/vendor/v8/test/cctest/test-spaces.cc +47 -29
- data/vendor/v8/test/cctest/test-strings.cc +20 -20
- data/vendor/v8/test/cctest/test-thread-termination.cc +8 -3
- data/vendor/v8/test/cctest/test-threads.cc +5 -3
- data/vendor/v8/test/cctest/test-utils.cc +5 -4
- data/vendor/v8/test/cctest/testcfg.py +7 -3
- data/vendor/v8/test/es5conform/es5conform.status +2 -77
- data/vendor/v8/test/es5conform/testcfg.py +1 -1
- data/vendor/v8/test/message/testcfg.py +1 -1
- data/vendor/v8/test/mjsunit/accessors-on-global-object.js +3 -3
- data/vendor/v8/test/mjsunit/array-concat.js +43 -1
- data/vendor/v8/test/mjsunit/array-join.js +25 -0
- data/vendor/v8/test/mjsunit/bitops-info.js +7 -1
- data/vendor/v8/test/mjsunit/compiler/array-length.js +2 -2
- data/vendor/v8/test/mjsunit/compiler/global-accessors.js +47 -0
- data/vendor/v8/test/mjsunit/compiler/pic.js +1 -1
- data/vendor/v8/test/mjsunit/compiler/regress-loadfield.js +65 -0
- data/vendor/v8/test/mjsunit/math-sqrt.js +5 -1
- data/vendor/v8/test/mjsunit/mjsunit.js +59 -8
- data/vendor/v8/test/mjsunit/mjsunit.status +0 -12
- data/vendor/v8/test/mjsunit/mul-exhaustive.js +129 -11
- data/vendor/v8/test/mjsunit/negate-zero.js +1 -1
- data/vendor/v8/test/mjsunit/object-freeze.js +5 -13
- data/vendor/v8/test/mjsunit/object-prevent-extensions.js +9 -50
- data/vendor/v8/test/mjsunit/object-seal.js +4 -13
- data/vendor/v8/test/mjsunit/override-eval-with-non-function.js +36 -0
- data/vendor/v8/test/mjsunit/regress/regress-1145.js +54 -0
- data/vendor/v8/test/mjsunit/regress/regress-1172-bis.js +37 -0
- data/vendor/v8/test/mjsunit/regress/regress-1181.js +54 -0
- data/vendor/v8/test/mjsunit/regress/regress-1207.js +35 -0
- data/vendor/v8/test/mjsunit/regress/regress-1209.js +34 -0
- data/vendor/v8/test/mjsunit/regress/regress-1210.js +48 -0
- data/vendor/v8/test/mjsunit/regress/regress-1213.js +43 -0
- data/vendor/v8/test/mjsunit/regress/regress-1218.js +29 -0
- data/vendor/v8/test/mjsunit/regress/regress-1229.js +79 -0
- data/vendor/v8/test/mjsunit/regress/regress-1233.js +47 -0
- data/vendor/v8/test/mjsunit/regress/regress-1236.js +34 -0
- data/vendor/v8/test/mjsunit/regress/regress-1237.js +36 -0
- data/vendor/v8/test/mjsunit/regress/regress-1240.js +39 -0
- data/vendor/v8/test/mjsunit/regress/regress-1257.js +58 -0
- data/vendor/v8/test/mjsunit/regress/regress-1278.js +69 -0
- data/vendor/v8/test/mjsunit/regress/regress-create-exception.js +1 -0
- data/vendor/v8/test/mjsunit/regress/regress-lazy-deopt-reloc.js +52 -0
- data/vendor/v8/test/mjsunit/sin-cos.js +15 -10
- data/vendor/v8/test/mjsunit/smi-negative-zero.js +2 -2
- data/vendor/v8/test/mjsunit/str-to-num.js +1 -1
- data/vendor/v8/test/mjsunit/strict-mode.js +435 -0
- data/vendor/v8/test/mjsunit/testcfg.py +23 -6
- data/vendor/v8/test/mozilla/mozilla.status +0 -2
- data/vendor/v8/test/mozilla/testcfg.py +1 -1
- data/vendor/v8/test/preparser/empty.js +28 -0
- data/vendor/v8/test/preparser/functions-only.js +38 -0
- data/vendor/v8/test/preparser/non-alphanum.js +34 -0
- data/vendor/v8/test/preparser/symbols-only.js +49 -0
- data/vendor/v8/test/preparser/testcfg.py +90 -0
- data/vendor/v8/test/sputnik/testcfg.py +1 -1
- data/vendor/v8/test/test262/README +16 -0
- data/vendor/v8/test/test262/harness-adapt.js +80 -0
- data/vendor/v8/test/test262/test262.status +1506 -0
- data/vendor/v8/test/test262/testcfg.py +123 -0
- data/vendor/v8/tools/freebsd-tick-processor +10 -0
- data/vendor/v8/tools/gyp/v8.gyp +8 -33
- data/vendor/v8/tools/linux-tick-processor +5 -3
- data/vendor/v8/tools/test.py +37 -14
- data/vendor/v8/tools/tickprocessor.js +22 -8
- data/vendor/v8/tools/visual_studio/v8_base.vcproj +13 -1
- data/vendor/v8/tools/visual_studio/v8_base_arm.vcproj +5 -1
- data/vendor/v8/tools/visual_studio/v8_base_x64.vcproj +5 -1
- data/vendor/v8/tools/visual_studio/x64.vsprops +1 -0
- metadata +1495 -1341
- data/ext/extconf.rb +0 -22
- data/ext/mustang.cpp +0 -58
- data/vendor/v8/src/top.h +0 -608
@@ -72,14 +72,14 @@ JSObjectsCluster Clusterizer::Clusterize(HeapObject* obj, bool fine_grain) {
|
|
72
72
|
String* constructor = GetConstructorNameForHeapProfile(
|
73
73
|
JSObject::cast(js_obj));
|
74
74
|
// Differentiate Object and Array instances.
|
75
|
-
if (fine_grain && (constructor ==
|
76
|
-
constructor ==
|
75
|
+
if (fine_grain && (constructor == HEAP->Object_symbol() ||
|
76
|
+
constructor == HEAP->Array_symbol())) {
|
77
77
|
return JSObjectsCluster(constructor, obj);
|
78
78
|
} else {
|
79
79
|
return JSObjectsCluster(constructor);
|
80
80
|
}
|
81
81
|
} else if (obj->IsString()) {
|
82
|
-
return JSObjectsCluster(
|
82
|
+
return JSObjectsCluster(HEAP->String_symbol());
|
83
83
|
} else if (obj->IsJSGlobalPropertyCell()) {
|
84
84
|
return JSObjectsCluster(JSObjectsCluster::GLOBAL_PROPERTY);
|
85
85
|
} else if (obj->IsCode() || obj->IsSharedFunctionInfo() || obj->IsScript()) {
|
@@ -112,10 +112,10 @@ int Clusterizer::CalculateNetworkSize(JSObject* obj) {
|
|
112
112
|
int size = obj->Size();
|
113
113
|
// If 'properties' and 'elements' are non-empty (thus, non-shared),
|
114
114
|
// take their size into account.
|
115
|
-
if (obj->properties() !=
|
115
|
+
if (obj->properties() != HEAP->empty_fixed_array()) {
|
116
116
|
size += obj->properties()->Size();
|
117
117
|
}
|
118
|
-
if (obj->elements() !=
|
118
|
+
if (obj->elements() != HEAP->empty_fixed_array()) {
|
119
119
|
size += obj->elements()->Size();
|
120
120
|
}
|
121
121
|
// For functions, also account non-empty context and literals sizes.
|
@@ -174,7 +174,8 @@ class RetainersPrinter : public RetainerHeapProfile::Printer {
|
|
174
174
|
HeapStringAllocator allocator;
|
175
175
|
StringStream stream(&allocator);
|
176
176
|
cluster.Print(&stream);
|
177
|
-
LOG(
|
177
|
+
LOG(ISOLATE,
|
178
|
+
HeapSampleJSRetainersEvent(
|
178
179
|
*(stream.ToCString()), *(retainers.ToCString())));
|
179
180
|
}
|
180
181
|
};
|
@@ -315,8 +316,6 @@ void RetainerTreeAggregator::Call(const JSObjectsCluster& cluster,
|
|
315
316
|
}
|
316
317
|
|
317
318
|
|
318
|
-
HeapProfiler* HeapProfiler::singleton_ = NULL;
|
319
|
-
|
320
319
|
HeapProfiler::HeapProfiler()
|
321
320
|
: snapshots_(new HeapSnapshotsCollection()),
|
322
321
|
next_snapshot_uid_(1) {
|
@@ -327,12 +326,20 @@ HeapProfiler::~HeapProfiler() {
|
|
327
326
|
delete snapshots_;
|
328
327
|
}
|
329
328
|
|
329
|
+
|
330
|
+
void HeapProfiler::ResetSnapshots() {
|
331
|
+
delete snapshots_;
|
332
|
+
snapshots_ = new HeapSnapshotsCollection();
|
333
|
+
}
|
334
|
+
|
335
|
+
|
330
336
|
#endif // ENABLE_LOGGING_AND_PROFILING
|
331
337
|
|
332
338
|
void HeapProfiler::Setup() {
|
333
339
|
#ifdef ENABLE_LOGGING_AND_PROFILING
|
334
|
-
|
335
|
-
|
340
|
+
Isolate* isolate = Isolate::Current();
|
341
|
+
if (isolate->heap_profiler() == NULL) {
|
342
|
+
isolate->set_heap_profiler(new HeapProfiler());
|
336
343
|
}
|
337
344
|
#endif
|
338
345
|
}
|
@@ -340,8 +347,9 @@ void HeapProfiler::Setup() {
|
|
340
347
|
|
341
348
|
void HeapProfiler::TearDown() {
|
342
349
|
#ifdef ENABLE_LOGGING_AND_PROFILING
|
343
|
-
|
344
|
-
|
350
|
+
Isolate* isolate = Isolate::Current();
|
351
|
+
delete isolate->heap_profiler();
|
352
|
+
isolate->set_heap_profiler(NULL);
|
345
353
|
#endif
|
346
354
|
}
|
347
355
|
|
@@ -351,16 +359,39 @@ void HeapProfiler::TearDown() {
|
|
351
359
|
HeapSnapshot* HeapProfiler::TakeSnapshot(const char* name,
|
352
360
|
int type,
|
353
361
|
v8::ActivityControl* control) {
|
354
|
-
ASSERT(
|
355
|
-
return
|
362
|
+
ASSERT(Isolate::Current()->heap_profiler() != NULL);
|
363
|
+
return Isolate::Current()->heap_profiler()->TakeSnapshotImpl(name,
|
364
|
+
type,
|
365
|
+
control);
|
356
366
|
}
|
357
367
|
|
358
368
|
|
359
369
|
HeapSnapshot* HeapProfiler::TakeSnapshot(String* name,
|
360
370
|
int type,
|
361
371
|
v8::ActivityControl* control) {
|
362
|
-
ASSERT(
|
363
|
-
return
|
372
|
+
ASSERT(Isolate::Current()->heap_profiler() != NULL);
|
373
|
+
return Isolate::Current()->heap_profiler()->TakeSnapshotImpl(name,
|
374
|
+
type,
|
375
|
+
control);
|
376
|
+
}
|
377
|
+
|
378
|
+
|
379
|
+
void HeapProfiler::DefineWrapperClass(
|
380
|
+
uint16_t class_id, v8::HeapProfiler::WrapperInfoCallback callback) {
|
381
|
+
ASSERT(class_id != v8::HeapProfiler::kPersistentHandleNoClassId);
|
382
|
+
if (wrapper_callbacks_.length() <= class_id) {
|
383
|
+
wrapper_callbacks_.AddBlock(
|
384
|
+
NULL, class_id - wrapper_callbacks_.length() + 1);
|
385
|
+
}
|
386
|
+
wrapper_callbacks_[class_id] = callback;
|
387
|
+
}
|
388
|
+
|
389
|
+
|
390
|
+
v8::RetainedObjectInfo* HeapProfiler::ExecuteWrapperClassCallback(
|
391
|
+
uint16_t class_id, Object** wrapper) {
|
392
|
+
if (wrapper_callbacks_.length() <= class_id) return NULL;
|
393
|
+
return wrapper_callbacks_[class_id](
|
394
|
+
class_id, Utils::ToLocal(Handle<Object>(wrapper)));
|
364
395
|
}
|
365
396
|
|
366
397
|
|
@@ -373,13 +404,13 @@ HeapSnapshot* HeapProfiler::TakeSnapshotImpl(const char* name,
|
|
373
404
|
bool generation_completed = true;
|
374
405
|
switch (s_type) {
|
375
406
|
case HeapSnapshot::kFull: {
|
376
|
-
|
407
|
+
HEAP->CollectAllGarbage(true);
|
377
408
|
HeapSnapshotGenerator generator(result, control);
|
378
409
|
generation_completed = generator.GenerateSnapshot();
|
379
410
|
break;
|
380
411
|
}
|
381
412
|
case HeapSnapshot::kAggregated: {
|
382
|
-
|
413
|
+
HEAP->CollectAllGarbage(true);
|
383
414
|
AggregatedHeapSnapshot agg_snapshot;
|
384
415
|
AggregatedHeapSnapshotGenerator generator(&agg_snapshot);
|
385
416
|
generator.GenerateSnapshot();
|
@@ -401,31 +432,40 @@ HeapSnapshot* HeapProfiler::TakeSnapshotImpl(const char* name,
|
|
401
432
|
HeapSnapshot* HeapProfiler::TakeSnapshotImpl(String* name,
|
402
433
|
int type,
|
403
434
|
v8::ActivityControl* control) {
|
404
|
-
return TakeSnapshotImpl(snapshots_->GetName(name), type, control);
|
435
|
+
return TakeSnapshotImpl(snapshots_->names()->GetName(name), type, control);
|
405
436
|
}
|
406
437
|
|
407
438
|
|
408
439
|
int HeapProfiler::GetSnapshotsCount() {
|
409
|
-
|
410
|
-
|
440
|
+
HeapProfiler* profiler = Isolate::Current()->heap_profiler();
|
441
|
+
ASSERT(profiler != NULL);
|
442
|
+
return profiler->snapshots_->snapshots()->length();
|
411
443
|
}
|
412
444
|
|
413
445
|
|
414
446
|
HeapSnapshot* HeapProfiler::GetSnapshot(int index) {
|
415
|
-
|
416
|
-
|
447
|
+
HeapProfiler* profiler = Isolate::Current()->heap_profiler();
|
448
|
+
ASSERT(profiler != NULL);
|
449
|
+
return profiler->snapshots_->snapshots()->at(index);
|
417
450
|
}
|
418
451
|
|
419
452
|
|
420
453
|
HeapSnapshot* HeapProfiler::FindSnapshot(unsigned uid) {
|
421
|
-
|
422
|
-
|
454
|
+
HeapProfiler* profiler = Isolate::Current()->heap_profiler();
|
455
|
+
ASSERT(profiler != NULL);
|
456
|
+
return profiler->snapshots_->GetSnapshot(uid);
|
457
|
+
}
|
458
|
+
|
459
|
+
|
460
|
+
void HeapProfiler::DeleteAllSnapshots() {
|
461
|
+
HeapProfiler* profiler = Isolate::Current()->heap_profiler();
|
462
|
+
ASSERT(profiler != NULL);
|
463
|
+
profiler->ResetSnapshots();
|
423
464
|
}
|
424
465
|
|
425
466
|
|
426
467
|
void HeapProfiler::ObjectMoveEvent(Address from, Address to) {
|
427
|
-
|
428
|
-
singleton_->snapshots_->ObjectMoveEvent(from, to);
|
468
|
+
snapshots_->ObjectMoveEvent(from, to);
|
429
469
|
}
|
430
470
|
|
431
471
|
|
@@ -443,7 +483,8 @@ void ConstructorHeapProfile::Call(const JSObjectsCluster& cluster,
|
|
443
483
|
HeapStringAllocator allocator;
|
444
484
|
StringStream stream(&allocator);
|
445
485
|
cluster.Print(&stream);
|
446
|
-
LOG(
|
486
|
+
LOG(ISOLATE,
|
487
|
+
HeapSampleJSConstructorEvent(*(stream.ToCString()),
|
447
488
|
number_and_size.number(),
|
448
489
|
number_and_size.bytes()));
|
449
490
|
}
|
@@ -662,7 +703,7 @@ RetainerHeapProfile::RetainerHeapProfile()
|
|
662
703
|
aggregator_(NULL) {
|
663
704
|
JSObjectsCluster roots(JSObjectsCluster::ROOTS);
|
664
705
|
ReferencesExtractor extractor(roots, this);
|
665
|
-
|
706
|
+
HEAP->IterateRoots(&extractor, VISIT_ONLY_STRONG);
|
666
707
|
}
|
667
708
|
|
668
709
|
|
@@ -732,15 +773,18 @@ static void PrintProducerStackTrace(Object* obj, void* trace) {
|
|
732
773
|
String* constructor = GetConstructorNameForHeapProfile(JSObject::cast(obj));
|
733
774
|
SmartPointer<char> s_name(
|
734
775
|
constructor->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL));
|
735
|
-
LOG(
|
776
|
+
LOG(ISOLATE,
|
777
|
+
HeapSampleJSProducerEvent(GetConstructorName(*s_name),
|
736
778
|
reinterpret_cast<Address*>(trace)));
|
737
779
|
}
|
738
780
|
|
739
781
|
|
740
782
|
void HeapProfiler::WriteSample() {
|
741
|
-
|
742
|
-
LOG(
|
743
|
-
|
783
|
+
Isolate* isolate = Isolate::Current();
|
784
|
+
LOG(isolate, HeapSampleBeginEvent("Heap", "allocated"));
|
785
|
+
LOG(isolate,
|
786
|
+
HeapSampleStats(
|
787
|
+
"Heap", "allocated", HEAP->CommittedMemory(), HEAP->SizeOfObjects()));
|
744
788
|
|
745
789
|
AggregatedHeapSnapshot snapshot;
|
746
790
|
AggregatedHeapSnapshotGenerator generator(&snapshot);
|
@@ -751,7 +795,8 @@ void HeapProfiler::WriteSample() {
|
|
751
795
|
i <= AggregatedHeapSnapshotGenerator::kAllStringsType;
|
752
796
|
++i) {
|
753
797
|
if (info[i].bytes() > 0) {
|
754
|
-
LOG(
|
798
|
+
LOG(isolate,
|
799
|
+
HeapSampleItemEvent(info[i].name(), info[i].number(),
|
755
800
|
info[i].bytes()));
|
756
801
|
}
|
757
802
|
}
|
@@ -759,10 +804,10 @@ void HeapProfiler::WriteSample() {
|
|
759
804
|
snapshot.js_cons_profile()->PrintStats();
|
760
805
|
snapshot.js_retainer_profile()->PrintStats();
|
761
806
|
|
762
|
-
|
763
|
-
|
807
|
+
isolate->global_handles()->IterateWeakRoots(PrintProducerStackTrace,
|
808
|
+
StackWeakReferenceCallback);
|
764
809
|
|
765
|
-
LOG(HeapSampleEndEvent("Heap", "allocated"));
|
810
|
+
LOG(isolate, HeapSampleEndEvent("Heap", "allocated"));
|
766
811
|
}
|
767
812
|
|
768
813
|
|
@@ -872,7 +917,8 @@ class AllocatingConstructorHeapProfileIterator {
|
|
872
917
|
const NumberAndSizeInfo& number_and_size) {
|
873
918
|
const char* name = cluster.GetSpecialCaseName();
|
874
919
|
if (name == NULL) {
|
875
|
-
name = snapshot_->collection()->GetFunctionName(
|
920
|
+
name = snapshot_->collection()->names()->GetFunctionName(
|
921
|
+
cluster.constructor());
|
876
922
|
}
|
877
923
|
AddEntryFromAggregatedSnapshot(snapshot_,
|
878
924
|
root_child_index_,
|
@@ -911,22 +957,27 @@ static JSObjectsCluster HeapObjectAsCluster(HeapObject* object) {
|
|
911
957
|
class CountingRetainersIterator {
|
912
958
|
public:
|
913
959
|
CountingRetainersIterator(const JSObjectsCluster& child_cluster,
|
960
|
+
HeapEntriesAllocator* allocator,
|
914
961
|
HeapEntriesMap* map)
|
915
|
-
: child_(ClusterAsHeapObject(child_cluster)),
|
962
|
+
: child_(ClusterAsHeapObject(child_cluster)),
|
963
|
+
allocator_(allocator),
|
964
|
+
map_(map) {
|
916
965
|
if (map_->Map(child_) == NULL)
|
917
|
-
map_->Pair(child_, HeapEntriesMap::kHeapEntryPlaceholder);
|
966
|
+
map_->Pair(child_, allocator_, HeapEntriesMap::kHeapEntryPlaceholder);
|
918
967
|
}
|
919
968
|
|
920
969
|
void Call(const JSObjectsCluster& cluster,
|
921
970
|
const NumberAndSizeInfo& number_and_size) {
|
922
971
|
if (map_->Map(ClusterAsHeapObject(cluster)) == NULL)
|
923
972
|
map_->Pair(ClusterAsHeapObject(cluster),
|
973
|
+
allocator_,
|
924
974
|
HeapEntriesMap::kHeapEntryPlaceholder);
|
925
975
|
map_->CountReference(ClusterAsHeapObject(cluster), child_);
|
926
976
|
}
|
927
977
|
|
928
978
|
private:
|
929
979
|
HeapObject* child_;
|
980
|
+
HeapEntriesAllocator* allocator_;
|
930
981
|
HeapEntriesMap* map_;
|
931
982
|
};
|
932
983
|
|
@@ -934,6 +985,7 @@ class CountingRetainersIterator {
|
|
934
985
|
class AllocatingRetainersIterator {
|
935
986
|
public:
|
936
987
|
AllocatingRetainersIterator(const JSObjectsCluster& child_cluster,
|
988
|
+
HeapEntriesAllocator*,
|
937
989
|
HeapEntriesMap* map)
|
938
990
|
: child_(ClusterAsHeapObject(child_cluster)), map_(map) {
|
939
991
|
child_entry_ = map_->Map(child_);
|
@@ -966,8 +1018,9 @@ template<class RetainersIterator>
|
|
966
1018
|
class AggregatingRetainerTreeIterator {
|
967
1019
|
public:
|
968
1020
|
explicit AggregatingRetainerTreeIterator(ClustersCoarser* coarser,
|
1021
|
+
HeapEntriesAllocator* allocator,
|
969
1022
|
HeapEntriesMap* map)
|
970
|
-
: coarser_(coarser), map_(map) {
|
1023
|
+
: coarser_(coarser), allocator_(allocator), map_(map) {
|
971
1024
|
}
|
972
1025
|
|
973
1026
|
void Call(const JSObjectsCluster& cluster, JSObjectsClusterTree* tree) {
|
@@ -981,29 +1034,33 @@ class AggregatingRetainerTreeIterator {
|
|
981
1034
|
tree->ForEach(&retainers_aggregator);
|
982
1035
|
tree_to_iterate = &dest_tree_;
|
983
1036
|
}
|
984
|
-
RetainersIterator iterator(cluster, map_);
|
1037
|
+
RetainersIterator iterator(cluster, allocator_, map_);
|
985
1038
|
tree_to_iterate->ForEach(&iterator);
|
986
1039
|
}
|
987
1040
|
|
988
1041
|
private:
|
989
1042
|
ClustersCoarser* coarser_;
|
1043
|
+
HeapEntriesAllocator* allocator_;
|
990
1044
|
HeapEntriesMap* map_;
|
991
1045
|
};
|
992
1046
|
|
993
1047
|
|
994
|
-
class AggregatedRetainerTreeAllocator {
|
1048
|
+
class AggregatedRetainerTreeAllocator : public HeapEntriesAllocator {
|
995
1049
|
public:
|
996
1050
|
AggregatedRetainerTreeAllocator(HeapSnapshot* snapshot,
|
997
1051
|
int* root_child_index)
|
998
1052
|
: snapshot_(snapshot), root_child_index_(root_child_index) {
|
999
1053
|
}
|
1054
|
+
~AggregatedRetainerTreeAllocator() { }
|
1000
1055
|
|
1001
|
-
HeapEntry*
|
1002
|
-
|
1056
|
+
HeapEntry* AllocateEntry(
|
1057
|
+
HeapThing ptr, int children_count, int retainers_count) {
|
1058
|
+
HeapObject* obj = reinterpret_cast<HeapObject*>(ptr);
|
1003
1059
|
JSObjectsCluster cluster = HeapObjectAsCluster(obj);
|
1004
1060
|
const char* name = cluster.GetSpecialCaseName();
|
1005
1061
|
if (name == NULL) {
|
1006
|
-
name = snapshot_->collection()->GetFunctionName(
|
1062
|
+
name = snapshot_->collection()->names()->GetFunctionName(
|
1063
|
+
cluster.constructor());
|
1007
1064
|
}
|
1008
1065
|
return AddEntryFromAggregatedSnapshot(
|
1009
1066
|
snapshot_, root_child_index_, HeapEntry::kObject, name,
|
@@ -1018,12 +1075,13 @@ class AggregatedRetainerTreeAllocator {
|
|
1018
1075
|
|
1019
1076
|
template<class Iterator>
|
1020
1077
|
void AggregatedHeapSnapshotGenerator::IterateRetainers(
|
1021
|
-
HeapEntriesMap* entries_map) {
|
1078
|
+
HeapEntriesAllocator* allocator, HeapEntriesMap* entries_map) {
|
1022
1079
|
RetainerHeapProfile* p = agg_snapshot_->js_retainer_profile();
|
1023
1080
|
AggregatingRetainerTreeIterator<Iterator> agg_ret_iter_1(
|
1024
|
-
p->coarser(), entries_map);
|
1081
|
+
p->coarser(), allocator, entries_map);
|
1025
1082
|
p->retainers_tree()->ForEach(&agg_ret_iter_1);
|
1026
|
-
AggregatingRetainerTreeIterator<Iterator> agg_ret_iter_2(
|
1083
|
+
AggregatingRetainerTreeIterator<Iterator> agg_ret_iter_2(
|
1084
|
+
NULL, allocator, entries_map);
|
1027
1085
|
p->aggregator()->output_tree().ForEach(&agg_ret_iter_2);
|
1028
1086
|
}
|
1029
1087
|
|
@@ -1042,7 +1100,9 @@ void AggregatedHeapSnapshotGenerator::FillHeapSnapshot(HeapSnapshot* snapshot) {
|
|
1042
1100
|
agg_snapshot_->js_cons_profile()->ForEach(&counting_cons_iter);
|
1043
1101
|
histogram_entities_count += counting_cons_iter.entities_count();
|
1044
1102
|
HeapEntriesMap entries_map;
|
1045
|
-
|
1103
|
+
int root_child_index = 0;
|
1104
|
+
AggregatedRetainerTreeAllocator allocator(snapshot, &root_child_index);
|
1105
|
+
IterateRetainers<CountingRetainersIterator>(&allocator, &entries_map);
|
1046
1106
|
histogram_entities_count += entries_map.entries_count();
|
1047
1107
|
histogram_children_count += entries_map.total_children_count();
|
1048
1108
|
histogram_retainers_count += entries_map.total_retainers_count();
|
@@ -1056,10 +1116,7 @@ void AggregatedHeapSnapshotGenerator::FillHeapSnapshot(HeapSnapshot* snapshot) {
|
|
1056
1116
|
snapshot->AllocateEntries(histogram_entities_count,
|
1057
1117
|
histogram_children_count,
|
1058
1118
|
histogram_retainers_count);
|
1059
|
-
snapshot->
|
1060
|
-
root_children_count,
|
1061
|
-
0);
|
1062
|
-
int root_child_index = 0;
|
1119
|
+
snapshot->AddRootEntry(root_children_count);
|
1063
1120
|
for (int i = FIRST_NONSTRING_TYPE; i <= kAllStringsType; ++i) {
|
1064
1121
|
if (agg_snapshot_->info()[i].bytes() > 0) {
|
1065
1122
|
AddEntryFromAggregatedSnapshot(snapshot,
|
@@ -1075,18 +1132,15 @@ void AggregatedHeapSnapshotGenerator::FillHeapSnapshot(HeapSnapshot* snapshot) {
|
|
1075
1132
|
AllocatingConstructorHeapProfileIterator alloc_cons_iter(
|
1076
1133
|
snapshot, &root_child_index);
|
1077
1134
|
agg_snapshot_->js_cons_profile()->ForEach(&alloc_cons_iter);
|
1078
|
-
|
1079
|
-
entries_map.UpdateEntries(&allocator);
|
1135
|
+
entries_map.AllocateEntries();
|
1080
1136
|
|
1081
1137
|
// Fill up references.
|
1082
|
-
IterateRetainers<AllocatingRetainersIterator>(&entries_map);
|
1138
|
+
IterateRetainers<AllocatingRetainersIterator>(&allocator, &entries_map);
|
1083
1139
|
|
1084
1140
|
snapshot->SetDominatorsToSelf();
|
1085
1141
|
}
|
1086
1142
|
|
1087
1143
|
|
1088
|
-
bool ProducerHeapProfile::can_log_ = false;
|
1089
|
-
|
1090
1144
|
void ProducerHeapProfile::Setup() {
|
1091
1145
|
can_log_ = true;
|
1092
1146
|
}
|
@@ -1106,10 +1160,10 @@ void ProducerHeapProfile::DoRecordJSObjectAllocation(Object* obj) {
|
|
1106
1160
|
stack[i++] = it.frame()->pc();
|
1107
1161
|
}
|
1108
1162
|
stack[i] = NULL;
|
1109
|
-
Handle<Object> handle =
|
1110
|
-
|
1111
|
-
|
1112
|
-
|
1163
|
+
Handle<Object> handle = isolate_->global_handles()->Create(obj);
|
1164
|
+
isolate_->global_handles()->MakeWeak(handle.location(),
|
1165
|
+
static_cast<void*>(stack.start()),
|
1166
|
+
StackWeakReferenceCallback);
|
1113
1167
|
}
|
1114
1168
|
|
1115
1169
|
|
@@ -28,6 +28,7 @@
|
|
28
28
|
#ifndef V8_HEAP_PROFILER_H_
|
29
29
|
#define V8_HEAP_PROFILER_H_
|
30
30
|
|
31
|
+
#include "isolate.h"
|
31
32
|
#include "zone-inl.h"
|
32
33
|
|
33
34
|
namespace v8 {
|
@@ -38,14 +39,15 @@ namespace internal {
|
|
38
39
|
class HeapSnapshot;
|
39
40
|
class HeapSnapshotsCollection;
|
40
41
|
|
41
|
-
#define HEAP_PROFILE(
|
42
|
-
do {
|
43
|
-
|
44
|
-
|
45
|
-
|
42
|
+
#define HEAP_PROFILE(heap, call) \
|
43
|
+
do { \
|
44
|
+
v8::internal::HeapProfiler* profiler = heap->isolate()->heap_profiler(); \
|
45
|
+
if (profiler != NULL && profiler->is_profiling()) { \
|
46
|
+
profiler->call; \
|
47
|
+
} \
|
46
48
|
} while (false)
|
47
49
|
#else
|
48
|
-
#define HEAP_PROFILE(
|
50
|
+
#define HEAP_PROFILE(heap, call) ((void) 0)
|
49
51
|
#endif // ENABLE_LOGGING_AND_PROFILING
|
50
52
|
|
51
53
|
// The HeapProfiler writes data to the log files, which can be postprocessed
|
@@ -65,11 +67,17 @@ class HeapProfiler {
|
|
65
67
|
static int GetSnapshotsCount();
|
66
68
|
static HeapSnapshot* GetSnapshot(int index);
|
67
69
|
static HeapSnapshot* FindSnapshot(unsigned uid);
|
70
|
+
static void DeleteAllSnapshots();
|
68
71
|
|
69
|
-
|
72
|
+
void ObjectMoveEvent(Address from, Address to);
|
70
73
|
|
71
|
-
|
72
|
-
|
74
|
+
void DefineWrapperClass(
|
75
|
+
uint16_t class_id, v8::HeapProfiler::WrapperInfoCallback callback);
|
76
|
+
|
77
|
+
v8::RetainedObjectInfo* ExecuteWrapperClassCallback(uint16_t class_id,
|
78
|
+
Object** wrapper);
|
79
|
+
INLINE(bool is_profiling()) {
|
80
|
+
return snapshots_->is_tracking_objects();
|
73
81
|
}
|
74
82
|
|
75
83
|
// Obsolete interface.
|
@@ -85,11 +93,12 @@ class HeapProfiler {
|
|
85
93
|
HeapSnapshot* TakeSnapshotImpl(String* name,
|
86
94
|
int type,
|
87
95
|
v8::ActivityControl* control);
|
96
|
+
void ResetSnapshots();
|
88
97
|
|
89
98
|
HeapSnapshotsCollection* snapshots_;
|
90
99
|
unsigned next_snapshot_uid_;
|
100
|
+
List<v8::HeapProfiler::WrapperInfoCallback> wrapper_callbacks_;
|
91
101
|
|
92
|
-
static HeapProfiler* singleton_;
|
93
102
|
#endif // ENABLE_LOGGING_AND_PROFILING
|
94
103
|
};
|
95
104
|
|
@@ -148,10 +157,10 @@ class JSObjectsCluster BASE_EMBEDDED {
|
|
148
157
|
// We use symbols that are illegal JS identifiers to identify special cases.
|
149
158
|
// Their actual value is irrelevant for us.
|
150
159
|
switch (special) {
|
151
|
-
case ROOTS: return
|
152
|
-
case GLOBAL_PROPERTY: return
|
153
|
-
case CODE: return
|
154
|
-
case SELF: return
|
160
|
+
case ROOTS: return HEAP->result_symbol();
|
161
|
+
case GLOBAL_PROPERTY: return HEAP->code_symbol();
|
162
|
+
case CODE: return HEAP->arguments_shadow_symbol();
|
163
|
+
case SELF: return HEAP->catch_var_symbol();
|
155
164
|
default:
|
156
165
|
UNREACHABLE();
|
157
166
|
return NULL;
|
@@ -340,7 +349,7 @@ class AggregatedHeapSnapshot {
|
|
340
349
|
|
341
350
|
|
342
351
|
class HeapEntriesMap;
|
343
|
-
class
|
352
|
+
class HeapEntriesAllocator;
|
344
353
|
|
345
354
|
class AggregatedHeapSnapshotGenerator {
|
346
355
|
public:
|
@@ -354,22 +363,30 @@ class AggregatedHeapSnapshotGenerator {
|
|
354
363
|
void CalculateStringsStats();
|
355
364
|
void CollectStats(HeapObject* obj);
|
356
365
|
template<class Iterator>
|
357
|
-
void IterateRetainers(
|
366
|
+
void IterateRetainers(
|
367
|
+
HeapEntriesAllocator* allocator, HeapEntriesMap* entries_map);
|
358
368
|
|
359
369
|
AggregatedHeapSnapshot* agg_snapshot_;
|
360
370
|
};
|
361
371
|
|
362
372
|
|
363
|
-
class ProducerHeapProfile
|
373
|
+
class ProducerHeapProfile {
|
364
374
|
public:
|
365
|
-
|
366
|
-
|
375
|
+
void Setup();
|
376
|
+
void RecordJSObjectAllocation(Object* obj) {
|
367
377
|
if (FLAG_log_producers) DoRecordJSObjectAllocation(obj);
|
368
378
|
}
|
369
379
|
|
370
380
|
private:
|
371
|
-
|
372
|
-
|
381
|
+
ProducerHeapProfile() : can_log_(false) { }
|
382
|
+
|
383
|
+
void DoRecordJSObjectAllocation(Object* obj);
|
384
|
+
Isolate* isolate_;
|
385
|
+
bool can_log_;
|
386
|
+
|
387
|
+
friend class Isolate;
|
388
|
+
|
389
|
+
DISALLOW_COPY_AND_ASSIGN(ProducerHeapProfile);
|
373
390
|
};
|
374
391
|
|
375
392
|
#endif // ENABLE_LOGGING_AND_PROFILING
|