Revert of Promises: Make PromiseSet operation monomorphic (patchset #1 id:1 of https://codereview.chromium.org/2025073002/ )
Reason for revert: As a side effect of calling PromiseSet from FulfillPromise, clears the deferred symbol and the resolve/reject callback symbols. Although this isn't strictly necessary, not doing this seems to result in a leak as seen in -- https://bugs.chromium.org/p/chromium/issues/detail?id=617137#c10 Original issue's description: > 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 > > Committed: https://crrev.com/df4f8a2b9ee9e474e674301718d19b63650a0ba5 > Cr-Commit-Position: refs/heads/master@{#36688} TBR=littledan@chromium.org,adamk@chromium.org # Not skipping CQ checks because original CL landed more than 1 days ago. BUG=v8:5046 Review-Url: https://codereview.chromium.org/2047553002 Cr-Commit-Position: refs/heads/master@{#36766}
This commit is contained in:
parent
41c875a69e
commit
9b606523b5
@ -149,8 +149,7 @@ function FulfillPromise(promise, status, value, promiseQueue) {
|
||||
var deferreds = GET_PRIVATE(promise, promiseDeferredReactionsSymbol);
|
||||
PromiseEnqueue(value, tasks, deferreds, status);
|
||||
}
|
||||
SET_PRIVATE(promise, promiseStateSymbol, status);
|
||||
SET_PRIVATE(promise, promiseResultSymbol, value);
|
||||
PromiseSet(promise, status, value);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user