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:
gsathya 2016-06-06 15:06:09 -07:00 committed by Commit bot
parent 41c875a69e
commit 9b606523b5

View File

@ -149,8 +149,7 @@ function FulfillPromise(promise, status, value, promiseQueue) {
var deferreds = GET_PRIVATE(promise, promiseDeferredReactionsSymbol); var deferreds = GET_PRIVATE(promise, promiseDeferredReactionsSymbol);
PromiseEnqueue(value, tasks, deferreds, status); PromiseEnqueue(value, tasks, deferreds, status);
} }
SET_PRIVATE(promise, promiseStateSymbol, status); PromiseSet(promise, status, value);
SET_PRIVATE(promise, promiseResultSymbol, value);
} }
} }