[promises] Add fast-path for native promises to Promise.all.
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: 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}
Showing
Please
register
or
sign in
to comment