50f713c9a2
This CL introduces a new fast-path for `Promise.all(a)` for the case that elements in `a` are native promises, and the Promise.prototype and Promise function itself are intact. If so, we can skip the lookups of "resolve" on Promise and "then" on the result of invoking "resolve", which are both quite expensive, and we can instead directly call the PerformPromiseThen() operation on the element of `a`. In addition to that we don't need to create and chain a result promise, since this is only used when either async_hooks or DevTools are enabled. Otherwise it's a "throwaway promise" only used to satisfy the operation parameter signature (see https://github.com/tc39/ecma262/pull/1146). This results in a significant performance improvement on `Promise.all()` heavy code. For example the parallel-promises-es2015-native test goes from around 84ms to roughly 68ms, which is almost a 20% improvement. Bug: v8:7253 Ref: tc39/ecma262#1146 Change-Id: Iab9c57edb26d13a467b0653fd8de6149c382efc6 Reviewed-on: https://chromium-review.googlesource.com/c/1293374 Reviewed-by: Sathya Gunasekaran <gsathya@chromium.org> Reviewed-by: Maya Lekova <mslekova@chromium.org> Commit-Queue: Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#56858} |
||
---|---|---|
benchmarks | ||
build_overrides | ||
custom_deps | ||
docs | ||
gni | ||
include | ||
infra | ||
samples | ||
src | ||
test | ||
testing | ||
third_party | ||
tools | ||
.clang-format | ||
.clang-tidy | ||
.editorconfig | ||
.git-blame-ignore-revs | ||
.gitattributes | ||
.gitignore | ||
.gn | ||
.vpython | ||
.ycm_extra_conf.py | ||
AUTHORS | ||
BUILD.gn | ||
ChangeLog | ||
CODE_OF_CONDUCT.md | ||
codereview.settings | ||
DEPS | ||
LICENSE | ||
LICENSE.fdlibm | ||
LICENSE.strongtalk | ||
LICENSE.v8 | ||
LICENSE.valgrind | ||
OWNERS | ||
PRESUBMIT.py | ||
README.md | ||
snapshot_toolchain.gni | ||
WATCHLISTS |
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://github.com/v8/v8/wiki
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 on the V8 wiki.