From b5ce9cda0dfaed4afcb85d71c2c49c82b2fe3401 Mon Sep 17 00:00:00 2001 From: Nathan Whitaker <17734409+nathanwhit@users.noreply.github.com> Date: Fri, 19 Apr 2024 10:11:17 -0700 Subject: perf(lsp): Avoid passing struct into op_resolve (#23452) Going through serde_v8 is slow, so just pass the args separately. `op_resolve` is especially hot, so any speedups are good. --- cli/tsc/mod.rs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'cli/tsc/mod.rs') diff --git a/cli/tsc/mod.rs b/cli/tsc/mod.rs index 81ea1642d..57e7dff56 100644 --- a/cli/tsc/mod.rs +++ b/cli/tsc/mod.rs @@ -412,9 +412,13 @@ struct EmitArgs { file_name: String, } -#[op2] -fn op_emit(state: &mut OpState, #[serde] args: EmitArgs) -> bool { - op_emit_inner(state, args) +#[op2(fast)] +fn op_emit( + state: &mut OpState, + #[string] data: String, + #[string] file_name: String, +) -> bool { + op_emit_inner(state, EmitArgs { data, file_name }) } #[inline] @@ -590,9 +594,10 @@ pub struct ResolveArgs { #[serde] fn op_resolve( state: &mut OpState, - #[serde] args: ResolveArgs, + #[string] base: String, + #[serde] specifiers: Vec, ) -> Result, AnyError> { - op_resolve_inner(state, args) + op_resolve_inner(state, ResolveArgs { base, specifiers }) } #[inline] -- cgit v1.2.3