35c0931420
After concurrent OSR was enabled, JS execution may stop not at OSR entry when concurrent OSR compilation finish. If no more feedback change, without reset profiler ticks, OSR urgency is increased from 0 by 1 per profiler tick after concurrent OSR compilation finish, it makes new OSR compilation can be quickly triggered, reset profiler ticks after OSR compilation for triggering the later OSR compilation under the same condition with the first OSR compilation. For example: for (;;) { for (;;) { } // OSR entry for (;;) { <- Executing JS code here when the OSR compilation finish } } 1. We start executing the nesting loop. 2. We reset profiler ticks once feedback change. 3. If the first inner loop happens to be executing after accumulating enough no feedback change profiler ticks, we start concurrent OSR whose entry belongs to the first inner loop. 4. We continue executing the nesting loop, if no new feedback change, increasing profiler ticks again. 5. Concurrent OSR whose entry belongs to the first inner loop completes. 6. If the second inner loop happens to be executing, without reset profiler ticks, we immediately start concurrent OSR whose entry belongs to the second inner loop. The second OSR code is almost same quality with the first OSR code. This CL can reduce OSR compilation amount by ~3.9% (2311 -> 2224) when running JetStream2.1. Change-Id: I4d64cd8963fd2b99d88a3c218841fe5d7c4dc34f Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3819421 Commit-Queue: Tao Pan <tao.pan@intel.com> Reviewed-by: Leszek Swirski <leszeks@chromium.org> Cr-Commit-Position: refs/heads/main@{#83944} |
||
---|---|---|
.github | ||
bazel | ||
build_overrides | ||
custom_deps | ||
docs | ||
gni | ||
include | ||
infra | ||
samples | ||
src | ||
test | ||
testing | ||
third_party | ||
tools | ||
.bazelrc | ||
.clang-format | ||
.clang-tidy | ||
.editorconfig | ||
.flake8 | ||
.git-blame-ignore-revs | ||
.gitattributes | ||
.gitignore | ||
.gn | ||
.mailmap | ||
.style.yapf | ||
.vpython3 | ||
.ycm_extra_conf.py | ||
AUTHORS | ||
BUILD.bazel | ||
BUILD.gn | ||
CODE_OF_CONDUCT.md | ||
codereview.settings | ||
COMMON_OWNERS | ||
DEPS | ||
DIR_METADATA | ||
ENG_REVIEW_OWNERS | ||
INFRA_OWNERS | ||
INTL_OWNERS | ||
LICENSE | ||
LICENSE.fdlibm | ||
LICENSE.strongtalk | ||
LICENSE.v8 | ||
LOONG_OWNERS | ||
MIPS_OWNERS | ||
OWNERS | ||
PPC_OWNERS | ||
PRESUBMIT.py | ||
README.md | ||
RISCV_OWNERS | ||
S390_OWNERS | ||
WATCHLISTS | ||
WORKSPACE |
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.