diff options
author | Ryan Dahl <ry@tinyclouds.org> | 2019-05-03 00:06:43 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-05-03 00:06:43 -0400 |
commit | 00ac871607a7aeff1f6ac90f10090f07be9ccf73 (patch) | |
tree | e1c82a9ebc1895f67adebd53de7c9ec8b7a8b764 /cli/ops.rs | |
parent | cfff8a9c1bcf7406b5c597280cdfa34fcc68115e (diff) |
Optimize read and write ops (#2259)
Diffstat (limited to 'cli/ops.rs')
-rw-r--r-- | cli/ops.rs | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/cli/ops.rs b/cli/ops.rs index 4c644714f..b75140dcc 100644 --- a/cli/ops.rs +++ b/cli/ops.rs @@ -2,6 +2,8 @@ use atty; use crate::ansi; use crate::compiler::get_compiler_config; +use crate::dispatch_minimal::dispatch_minimal; +use crate::dispatch_minimal::parse_min_record; use crate::errors; use crate::errors::{DenoError, DenoResult, ErrorKind}; use crate::fs as deno_fs; @@ -74,18 +76,33 @@ fn empty_buf() -> Buf { Box::new([]) } +pub fn dispatch_all( + state: &ThreadSafeState, + control: &[u8], + zero_copy: Option<PinnedBuf>, + op_selector: OpSelector, +) -> Op { + let bytes_sent_control = control.len(); + let bytes_sent_zero_copy = zero_copy.as_ref().map(|b| b.len()).unwrap_or(0); + let op = if let Some(min_record) = parse_min_record(control) { + dispatch_minimal(state, min_record, zero_copy) + } else { + dispatch_all_legacy(state, control, zero_copy, op_selector) + }; + state.metrics_op_dispatched(bytes_sent_control, bytes_sent_zero_copy); + op +} + /// Processes raw messages from JavaScript. /// This functions invoked every time Deno.core.dispatch() is called. /// control corresponds to the first argument of Deno.core.dispatch(). /// data corresponds to the second argument of Deno.core.dispatch(). -pub fn dispatch_all( +pub fn dispatch_all_legacy( state: &ThreadSafeState, control: &[u8], zero_copy: Option<PinnedBuf>, op_selector: OpSelector, ) -> Op { - let bytes_sent_control = control.len(); - let bytes_sent_zero_copy = zero_copy.as_ref().map(|b| b.len()).unwrap_or(0); let base = msg::get_root_as_base(&control); let is_sync = base.sync(); let inner_type = base.inner_type(); @@ -99,7 +116,6 @@ pub fn dispatch_all( let op: Box<OpWithError> = op_func(state, &base, zero_copy); let state = state.clone(); - state.metrics_op_dispatched(bytes_sent_control, bytes_sent_zero_copy); let fut = Box::new( op.or_else(move |err: DenoError| -> Result<Buf, ()> { |