Promises: Make PromiseSet operation monomorphic
The PromiseSet operation is called with two types of promises 1) A newly created promise object with no properties 2) Promise object with callbacks and other properties PromiseSet is called with the first type of promise (with no properties) from multiple call sites. PromiseSet is called with the second type of promise object only from FulfillPromise. Furthermore, this call only sets the value and status of the promise, the rest of the values are reset to UNDEFINED (which isn't necessary). This patch inlines the calls to set the value and status of the promise in FulfillPromise, instead of calling out to PromiseSet. This patch also reduces the number of symbol lookups, as we only set the value and status of the promise, and don't change the callback or deferred symbols. This patch results in a performance improvement of 2.8% over 5 runs in the bluebird benchmark. BUG=v8:5046 Review-Url: https://codereview.chromium.org/2025073002 Cr-Commit-Position: refs/heads/master@{#36688}
This commit is contained in:
parent
9bba1494f4
commit
df4f8a2b9e
@ -149,7 +149,8 @@ function FulfillPromise(promise, status, value, promiseQueue) {
|
||||
var deferreds = GET_PRIVATE(promise, promiseDeferredReactionsSymbol);
|
||||
PromiseEnqueue(value, tasks, deferreds, status);
|
||||
}
|
||||
PromiseSet(promise, status, value);
|
||||
SET_PRIVATE(promise, promiseStateSymbol, status);
|
||||
SET_PRIVATE(promise, promiseResultSymbol, value);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user