[wasm] Enter CallDepthScope after compilation to execute microtasks
When async compilation finishes for WebAssembly, the promise returned by `WebAssembly.compile()` gets resolved. Resolving the promise creates a microtask that should get executed automatically when the call stack empties up when MicrotasksPolicy::kAuto is used. However, this policy requires a CallDepthScope to work, but there is no CallDepthScope when WebAssembly compilation finishes. This CL adds this CallDepthScope. R=jkummerow@chromium.org Bug: chromium:1297672 Change-Id: I1bd607dec9daf08b3dbb1294393a8af255d222ff Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3679579 Auto-Submit: Andreas Haas <ahaas@chromium.org> Reviewed-by: Jakob Kummerow <jkummerow@chromium.org> Commit-Queue: Jakob Kummerow <jkummerow@chromium.org> Cr-Commit-Position: refs/heads/main@{#80872}
This commit is contained in:
parent
efcbd13355
commit
b1f896337d
@ -2326,6 +2326,14 @@ void AsyncCompileJob::AsyncCompileSucceeded(Handle<WasmModuleObject> result) {
|
||||
// the module's start function calls out to Blink.
|
||||
Local<v8::Context> backup_incumbent_context =
|
||||
Utils::ToLocal(incumbent_context_);
|
||||
// We have to enter a MicrotasksScope here, because the
|
||||
// CompilationResultResolver potentially creates a Microtask below in
|
||||
// {OnCompilationSucceeded}.
|
||||
MicrotasksScope microtasks_scope(reinterpret_cast<v8::Isolate*>(isolate()),
|
||||
MicrotasksScope::kRunMicrotasks);
|
||||
// Enter a {CallDepthScope} explicitly, because we did not go through
|
||||
// {ENTER_V8}, and otherwise MicrotasksPolicy::kAuto does not work.
|
||||
CallDepthScope<true> call_depth_scope(isolate(), backup_incumbent_context);
|
||||
v8::Context::BackupIncumbentScope incumbent(backup_incumbent_context);
|
||||
resolver_->OnCompilationSucceeded(result);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user