Go to file
Seth Brenith d937a0bb0c Add verifier for retaining paths in heap snapshots
The web app owner who notified me about bugs v8:12112 and v8:12126 asked
me a reasonable question: "how am I ever supposed to trust the retaining
paths in the devtools, if the heap snapshot is generated by a different
component than the actual marking code?". This change is my attempt to
answer that question. If verification is enabled, the heap snapshot
generator will visit each heap object with a realistic marking visitor
to find all references from that object. It will then check that those
references match the HeapGraphEdges in the snapshot.

I also considered the idea that we could collect retaining information
during the last GC cycle before taking the heap snapshot, or during an
extra GC cycle immediately after. However, running the full GC provides
the embedder with the opportunity to run arbitrary code (including JS)
both before and after PerformGarbageCollection, so there is no clear
guarantee that the heap state during the snapshot actually matches the
heap state during marking.

Bug: v8:12112, v8:12126
Change-Id: Id29e75ecf9eee19e35daedbdb4a3e1df64785380
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3299590
Reviewed-by: Michael Lippautz <mlippautz@chromium.org>
Reviewed-by: Camillo Bruni <cbruni@chromium.org>
Commit-Queue: Seth Brenith <seth.brenith@microsoft.com>
Cr-Commit-Position: refs/heads/main@{#78952}
2022-02-04 15:47:55 +00:00
.github [github] Close PRs created on the V8 GitHub mirror automatically 2021-01-12 08:39:59 +00:00
bazel [bazel] Adds v8_enable_shared_ro_heap to v8_build_config 2022-01-28 10:00:56 +00:00
build_overrides [build] Remove obsolete gn flag 2021-01-11 15:50:59 +00:00
custom_deps Use relative paths to OWNERS files 2019-08-12 13:52:52 +00:00
docs Add OWNERS for docs/ 2019-05-15 12:06:15 +00:00
gni cppgc: young-gen: Prepare infra for young generation 2022-02-02 10:29:55 +00:00
include api: Deprecate v8::TracedGlobal 2022-02-04 15:38:17 +00:00
infra [infra] Add python3 trybot 2022-01-28 18:18:38 +00:00
samples cppgc: Fix hello world 2022-01-25 16:34:14 +00:00
src Add verifier for retaining paths in heap snapshots 2022-02-04 15:47:55 +00:00
test api: Deprecate v8::TracedGlobal 2022-02-04 15:38:17 +00:00
testing [test][cleanup] Fix -Wshadow warnings in unittests 2021-09-27 08:59:01 +00:00
third_party Update V8 DEPS. 2022-01-26 12:51:01 +00:00
tools [tools] Add basic pointer compression to grokdump 2022-02-04 14:35:26 +00:00
.bazelrc [bazel] Use v8_enable_handle_zapping only in debug builds. 2022-01-11 11:32:39 +00:00
.clang-format [clang-format] Don't derive pointer alignment 2017-01-17 09:28:19 +00:00
.clang-tidy [tool] Remove unfixed clang-tidy warnings to ease use. 2018-10-26 07:40:32 +00:00
.editorconfig Add .editorconfig 2017-07-28 13:39:24 +00:00
.flake8 remove swarming_client 2021-08-24 10:39:33 +00:00
.git-blame-ignore-revs [infra] Update .git-blame-ignore-revs 2020-03-03 12:59:13 +00:00
.gitattributes .gitattributes: Mark minified emscripten js files as -diff 2018-09-19 16:27:10 +00:00
.gitignore remove swarming_client 2021-08-24 10:39:33 +00:00
.gn Revert "[build] Separate out inspector as a shared library" 2021-07-02 16:15:20 +00:00
.mailmap Restore consistency between .mailmap and AUTHORS 2021-06-24 08:58:04 +00:00
.style.yapf [tools] Add basic pointer compression to grokdump 2022-02-04 14:35:26 +00:00
.vpython Verify mac-arm64 wheels for v8/.vpython spec. 2021-09-15 21:11:50 +00:00
.vpython3 [infra] Make various scripts compatible with Python3 2022-02-04 07:17:24 +00:00
.ycm_extra_conf.py [ycm] Fix python script 2021-07-29 09:48:32 +00:00
AUTHORS [snapshot] The length of the snapshot version string is 64 bytes 2022-01-10 14:46:58 +00:00
BUILD.bazel api: Deprecate v8::TracedGlobal 2022-02-04 15:38:17 +00:00
BUILD.gn Add verifier for retaining paths in heap snapshots 2022-02-04 15:47:55 +00:00
CODE_OF_CONDUCT.md Explicitly state that the Chromium Code of Conduct also applies to V8 2016-03-02 09:51:24 +00:00
codereview.settings Make Gerrit the default code review for V8 2017-06-30 17:37:37 +00:00
COMMON_OWNERS [owners] Add nikolaos@ to common owners 2022-01-12 09:37:27 +00:00
DEPS Update V8 DEPS. 2022-02-04 09:15:54 +00:00
DIR_METADATA Add DIR_METADATA files to v8. 2020-10-20 22:12:28 +00:00
ENG_REVIEW_OWNERS Add verwaest@ to ENG_REVIEW_OWNERS. 2021-09-16 15:00:57 +00:00
INFRA_OWNERS Add team members as owners 2020-08-18 08:29:04 +00:00
INTL_OWNERS add ftang as owner 2020-04-24 19:19:36 +00:00
LICENSE [wasm] Draft version of C/C++ Wasm API 2019-04-17 16:00:26 +00:00
LICENSE.fdlibm Add LICENSE.fdlibm for all the fdlibm imported sources. 2016-06-09 07:17:03 +00:00
LICENSE.strongtalk Add LICENSE.v8, LICENSE.strongtalk and LICENSE.valgrind to the v8 2011-02-03 07:10:06 +00:00
LICENSE.v8 Add LICENSE.v8, LICENSE.strongtalk and LICENSE.valgrind to the v8 2011-02-03 07:10:06 +00:00
LOONG_OWNERS [LOONG64] Add LoongArch64 backend 2021-08-16 13:05:19 +00:00
MIPS_OWNERS [mips] Add LiuYu to MIPS_OWNERS 2021-09-08 01:38:52 +00:00
OWNERS Let infra owners own all dot files 2021-11-05 18:57:18 +00:00
PPC_OWNERS Adding myself to relevant OWNERS files. 2020-11-02 16:37:28 +00:00
PRESUBMIT.py [bigint] Move multiplication to src/bigint/ 2021-04-19 15:40:43 +00:00
README.md [docs] Change links from old wiki to v8.dev 2019-03-07 12:13:30 +00:00
RISCV_OWNERS Add Lu Yahan to RISC-V owners list 2021-09-13 16:35:00 +00:00
S390_OWNERS Adding myself to relevant OWNERS files. 2020-11-02 16:37:28 +00:00
WATCHLISTS Add myself to heap/ watchlist 2021-11-08 16:58:14 +00:00
WORKSPACE [bazel] Cleanup style with Buildifier. 2022-01-11 10:00:36 +00:00

V8 JavaScript Engine

V8 is Google's open source JavaScript engine.

V8 implements ECMAScript as specified in ECMA-262.

V8 is written in C++ and is used in Google Chrome, the open source browser from Google.

V8 can run standalone, or can be embedded into any C++ application.

V8 Project page: https://v8.dev/docs

Getting the Code

Checkout depot tools, and run

    fetch v8

This will checkout V8 into the directory v8 and fetch all of its dependencies. To stay up to date, run

    git pull origin
    gclient sync

For fetching all branches, add the following into your remote configuration in .git/config:

    fetch = +refs/branch-heads/*:refs/remotes/branch-heads/*
    fetch = +refs/tags/*:refs/tags/*

Contributing

Please follow the instructions mentioned at v8.dev/docs/contribute.