From 5b9620df7ac655449abd2cce5292bd4669b1f211 Mon Sep 17 00:00:00 2001 From: Divy Srivastava Date: Fri, 11 Nov 2022 05:44:53 -0800 Subject: feat(ops): implement fast lazy async ops (#16579) Implements fast scheduling of deferred op futures. ```rs #[op(fast)] async fn op_read( state: Rc>, rid: ResourceId, buf: &mut [u8], ) -> Result { // ... } ``` The future is scheduled via a fast API call and polled by the event loop after being woken up by its waker. --- ops/optimizer_tests/op_state_warning.out | 40 ++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 ops/optimizer_tests/op_state_warning.out (limited to 'ops/optimizer_tests/op_state_warning.out') diff --git a/ops/optimizer_tests/op_state_warning.out b/ops/optimizer_tests/op_state_warning.out new file mode 100644 index 000000000..2c40b0f71 --- /dev/null +++ b/ops/optimizer_tests/op_state_warning.out @@ -0,0 +1,40 @@ +struct op_listen_fast { + _phantom: ::std::marker::PhantomData<()>, +} +impl<'scope> deno_core::v8::fast_api::FastFunction for op_listen_fast { + fn function(&self) -> *const ::std::ffi::c_void { + op_listen_fast_fn as *const ::std::ffi::c_void + } + fn args(&self) -> &'static [deno_core::v8::fast_api::Type] { + use deno_core::v8::fast_api::Type::*; + use deno_core::v8::fast_api::CType; + &[V8Value, CallbackOptions] + } + fn return_type(&self) -> deno_core::v8::fast_api::CType { + deno_core::v8::fast_api::CType::Uint32 + } +} +fn op_listen_fast_fn<'scope>( + _: deno_core::v8::Local, + fast_api_callback_options: *mut deno_core::v8::fast_api::FastApiCallbackOptions, +) -> u32 { + use deno_core::v8; + use deno_core::_ops; + let __opts: &mut v8::fast_api::FastApiCallbackOptions = unsafe { + &mut *fast_api_callback_options + }; + let __ctx = unsafe { + &*(v8::Local::::cast(unsafe { __opts.data.data }).value() + as *const _ops::OpCtx) + }; + let state = &mut ::std::cell::RefCell::borrow_mut(&__ctx.state); + let result = op_listen::call(state); + match result { + Ok(result) => result, + Err(err) => { + state.last_fast_op_error.replace(err); + __opts.fallback = true; + Default::default() + } + } +} -- cgit v1.2.3