From de630b9b78ad09d3092e6fff4629d8503693bdff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Thu, 6 Jul 2023 13:05:10 +0200 Subject: perf(node/async_hooks): optimize AsyncLocalStorage (#19729) This makes the implementation of "AsyncLocalStorage" from "node:async_hooks" 3.5x faster than before for noop benchmark (measuring baseline overhead). It's still 3.5x slower than not using `AsyncLocalStorage` and 1.64x slower than using noop promise hooks. --- ext/node/lib.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'ext/node/lib.rs') diff --git a/ext/node/lib.rs b/ext/node/lib.rs index 6d496f001..a623eac11 100644 --- a/ext/node/lib.rs +++ b/ext/node/lib.rs @@ -138,6 +138,15 @@ fn op_is_any_arraybuffer(value: serde_v8::Value) -> bool { value.v8_value.is_array_buffer() || value.v8_value.is_shared_array_buffer() } +#[op(fast)] +fn op_node_is_promise_rejected(value: serde_v8::Value) -> bool { + let Ok(promise) = v8::Local::::try_from(value.v8_value) else { + return false; + }; + + promise.state() == v8::PromiseState::Rejected +} + deno_core::extension!(deno_node, deps = [ deno_io, deno_fs ], parameters = [P: NodePermissions], @@ -233,6 +242,7 @@ deno_core::extension!(deno_node, ops::http::op_node_http_request

, op_node_build_os, op_is_any_arraybuffer, + op_node_is_promise_rejected, ops::require::op_require_init_paths, ops::require::op_require_node_module_paths

, ops::require::op_require_proxy_path, -- cgit v1.2.3