• Benedikt Meurer's avatar
    [promises] Add fast-path for native promises to Promise.all. · 50f713c9
    Benedikt Meurer authored
    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/1293374Reviewed-by: 's avatarSathya Gunasekaran <gsathya@chromium.org>
    Reviewed-by: 's avatarMaya Lekova <mslekova@chromium.org>
    Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#56858}
    50f713c9
Name
Last commit
Last update
benchmarks Loading commit data...
build_overrides Loading commit data...
custom_deps Loading commit data...
docs Loading commit data...
gni Loading commit data...
include Loading commit data...
infra Loading commit data...
samples Loading commit data...
src Loading commit data...
test Loading commit data...
testing Loading commit data...
third_party Loading commit data...
tools Loading commit data...
.clang-format Loading commit data...
.clang-tidy Loading commit data...
.editorconfig Loading commit data...
.git-blame-ignore-revs Loading commit data...
.gitattributes Loading commit data...
.gitignore Loading commit data...
.gn Loading commit data...
.vpython Loading commit data...
.ycm_extra_conf.py Loading commit data...
AUTHORS Loading commit data...
BUILD.gn Loading commit data...
CODE_OF_CONDUCT.md Loading commit data...
ChangeLog Loading commit data...
DEPS Loading commit data...
LICENSE Loading commit data...
LICENSE.fdlibm Loading commit data...
LICENSE.strongtalk Loading commit data...
LICENSE.v8 Loading commit data...
LICENSE.valgrind Loading commit data...
OWNERS Loading commit data...
PRESUBMIT.py Loading commit data...
README.md Loading commit data...
WATCHLISTS Loading commit data...
codereview.settings Loading commit data...
snapshot_toolchain.gni Loading commit data...