• 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
builtins-promise-gen.cc 95 KB