Skip to content

Commit 4c07451

Browse files
camillobruniCommit Bot
authored andcommitted
[promises] Fix slow path when context promise hooks are present
Bug: chromium:1201936 Change-Id: I1ee545e33587ddf4a5c7e1cbd64b53d36c75a146 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2850936 Reviewed-by: Marja Hölttä <[email protected]> Reviewed-by: Jakob Gruber <[email protected]> Commit-Queue: Camillo Bruni <[email protected]> Cr-Commit-Position: refs/heads/master@{#74267}
1 parent c85723a commit 4c07451

3 files changed

Lines changed: 9 additions & 10 deletions

File tree

src/builtins/promise-jobs.tq

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
// https://tc39.es/ecma262/#sec-promise-jobs
88
namespace promise {
99
extern macro IsJSPromiseMap(Map): bool;
10+
extern macro NeedsAnyPromiseHooks(): bool;
1011

1112
// https://tc39.es/ecma262/#sec-promiseresolvethenablejob
1213
transitioning builtin
@@ -25,7 +26,7 @@ PromiseResolveThenableJob(implicit context: Context)(
2526
const promiseThen = *NativeContextSlot(ContextSlot::PROMISE_THEN_INDEX);
2627
const thenableMap = thenable.map;
2728
if (TaggedEqual(then, promiseThen) && IsJSPromiseMap(thenableMap) &&
28-
!IsIsolatePromiseHookEnabledOrDebugIsActiveOrHasAsyncEventDelegate() &&
29+
!NeedsAnyPromiseHooks() &&
2930
IsPromiseSpeciesLookupChainIntact(nativeContext, thenableMap)) {
3031
// We know that the {thenable} is a JSPromise, which doesn't require
3132
// any special treatment and that {then} corresponds to the initial

src/codegen/code-stub-assembler.cc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13900,11 +13900,11 @@ TNode<BoolT> CodeStubAssembler::
1390013900
return Word32NotEqual(flags, Int32Constant(0));
1390113901
}
1390213902

13903-
TNode<BoolT> CodeStubAssembler::
13904-
IsAnyPromiseHookEnabledOrHasAsyncEventDelegate(TNode<Uint32T> flags) {
13903+
TNode<BoolT> CodeStubAssembler::NeedsAnyPromiseHooks(TNode<Uint32T> flags) {
1390513904
uint32_t mask = Isolate::PromiseHookFields::HasContextPromiseHook::kMask |
1390613905
Isolate::PromiseHookFields::HasIsolatePromiseHook::kMask |
13907-
Isolate::PromiseHookFields::HasAsyncEventDelegate::kMask;
13906+
Isolate::PromiseHookFields::HasAsyncEventDelegate::kMask |
13907+
Isolate::PromiseHookFields::IsDebugActive::kMask;
1390813908
return IsSetWord32(flags, mask);
1390913909
}
1391013910

src/codegen/code-stub-assembler.h

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3565,12 +3565,10 @@ class V8_EXPORT_PRIVATE CodeStubAssembler
35653565
return IsAnyPromiseHookEnabledOrDebugIsActiveOrHasAsyncEventDelegate(
35663566
PromiseHookFlags());
35673567
}
3568-
TNode<BoolT> IsAnyPromiseHookEnabledOrHasAsyncEventDelegate(
3569-
TNode<Uint32T> flags);
3570-
TNode<BoolT>
3571-
IsAnyPromiseHookEnabledOrHasAsyncEventDelegate() {
3572-
return IsAnyPromiseHookEnabledOrHasAsyncEventDelegate(
3573-
PromiseHookFlags());
3568+
3569+
TNode<BoolT> NeedsAnyPromiseHooks(TNode<Uint32T> flags);
3570+
TNode<BoolT> NeedsAnyPromiseHooks() {
3571+
return NeedsAnyPromiseHooks(PromiseHookFlags());
35743572
}
35753573

35763574
// for..in helpers

0 commit comments

Comments
 (0)