Commit df4f8a2b authored by gsathya's avatar gsathya Committed by Commit bot

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}
parent 9bba1494
......@@ -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);
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment