summaryrefslogtreecommitdiff
path: root/cli/ops.rs
diff options
context:
space:
mode:
authorRyan Dahl <ry@tinyclouds.org>2019-05-03 00:06:43 -0400
committerGitHub <noreply@github.com>2019-05-03 00:06:43 -0400
commit00ac871607a7aeff1f6ac90f10090f07be9ccf73 (patch)
treee1c82a9ebc1895f67adebd53de7c9ec8b7a8b764 /cli/ops.rs
parentcfff8a9c1bcf7406b5c597280cdfa34fcc68115e (diff)
Optimize read and write ops (#2259)
Diffstat (limited to 'cli/ops.rs')
-rw-r--r--cli/ops.rs24
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, ()> {