1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-12-25 00:29:09 -05:00

perf: lazily retrieve ppid (#18940)

This is very apparent on Windows.

Before: 45.74ms (Hello world)
After: 33.92ms

Closes #18939
This commit is contained in:
David Sherret 2023-05-01 14:21:27 -04:00 committed by Levente Kurusa
parent 016b43441b
commit 2fed39ebf9
No known key found for this signature in database
GPG key ID: 9F72F3C05BA137C4
4 changed files with 29 additions and 28 deletions

View file

@ -26,7 +26,6 @@ const UNSTABLE_DENO_PROPS: &[&str] = &[
"listen", "listen",
"listenDatagram", "listenDatagram",
"dlopen", "dlopen",
"ppid",
"removeSignalListener", "removeSignalListener",
"shutdown", "shutdown",
"umask", "umask",

View file

@ -427,12 +427,11 @@ function bootstrapMainRuntime(runtimeOptions) {
8: tsVersion, 8: tsVersion,
9: unstableFlag, 9: unstableFlag,
10: pid, 10: pid,
11: ppid, 11: target,
12: target, 12: v8Version,
13: v8Version, 13: userAgent,
14: userAgent, 14: inspectFlag,
15: inspectFlag, // 15: enableTestingFeaturesFlag
// 16: enableTestingFeaturesFlag
} = runtimeOptions; } = runtimeOptions;
performance.setTimeOrigin(DateNow()); performance.setTimeOrigin(DateNow());
@ -495,9 +494,16 @@ function bootstrapMainRuntime(runtimeOptions) {
setUserAgent(userAgent); setUserAgent(userAgent);
setLanguage(locale); setLanguage(locale);
let ppid = undefined;
ObjectDefineProperties(finalDenoNs, { ObjectDefineProperties(finalDenoNs, {
pid: util.readOnly(pid), pid: util.readOnly(pid),
ppid: util.readOnly(ppid), ppid: util.getterOnly(() => {
// lazy because it's expensive
if (ppid === undefined) {
ppid = ops.op_ppid();
}
return ppid;
}),
noColor: util.readOnly(noColor), noColor: util.readOnly(noColor),
args: util.readOnly(ObjectFreeze(args)), args: util.readOnly(ObjectFreeze(args)),
mainModule: util.getterOnly(opMainModule), mainModule: util.getterOnly(opMainModule),
@ -535,12 +541,11 @@ function bootstrapWorkerRuntime(
8: tsVersion, 8: tsVersion,
9: unstableFlag, 9: unstableFlag,
10: pid, 10: pid,
// 11: ppid, 11: target,
12: target, 12: v8Version,
13: v8Version, // 13: userAgent,
// 14: userAgent, // 14: inspectFlag,
// 15: inspectFlag, 15: enableTestingFeaturesFlag,
16: enableTestingFeaturesFlag,
} = runtimeOptions; } = runtimeOptions;
performance.setTimeOrigin(DateNow()); performance.setTimeOrigin(DateNow());

View file

@ -8,7 +8,7 @@ use deno_core::OpState;
deno_core::extension!( deno_core::extension!(
deno_runtime, deno_runtime,
ops = [op_main_module], ops = [op_main_module, op_ppid],
options = { main_module: ModuleSpecifier }, options = { main_module: ModuleSpecifier },
state = |state, options| { state = |state, options| {
state.put::<ModuleSpecifier>(options.main_module); state.put::<ModuleSpecifier>(options.main_module);
@ -31,7 +31,10 @@ fn op_main_module(state: &mut OpState) -> Result<String, AnyError> {
Ok(main_path) Ok(main_path)
} }
pub fn ppid() -> i64 { /// This is an op instead of being done at initialization time because
/// it's expensive to retreive the ppid on Windows.
#[op]
pub fn op_ppid() -> i64 {
#[cfg(windows)] #[cfg(windows)]
{ {
// Adopted from rustup: // Adopted from rustup:

View file

@ -5,7 +5,6 @@ use deno_core::ModuleSpecifier;
use std::thread; use std::thread;
use crate::colors; use crate::colors;
use crate::ops::runtime::ppid;
/// Common bootstrap options for MainWorker & WebWorker /// Common bootstrap options for MainWorker & WebWorker
#[derive(Clone)] #[derive(Clone)]
@ -61,7 +60,7 @@ impl BootstrapOptions {
&self, &self,
scope: &mut v8::HandleScope<'s>, scope: &mut v8::HandleScope<'s>,
) -> v8::Local<'s, v8::Array> { ) -> v8::Local<'s, v8::Array> {
let array = v8::Array::new(scope, 17); let array = v8::Array::new(scope, 16);
{ {
let args = v8::Array::new(scope, self.args.len() as i32); let args = v8::Array::new(scope, self.args.len() as i32);
@ -142,18 +141,13 @@ impl BootstrapOptions {
array.set_index(scope, 10, val.into()); array.set_index(scope, 10, val.into());
} }
{
let val = v8::Integer::new(scope, ppid() as i32);
array.set_index(scope, 11, val.into());
}
{ {
let val = v8::String::new_external_onebyte_static( let val = v8::String::new_external_onebyte_static(
scope, scope,
env!("TARGET").as_bytes(), env!("TARGET").as_bytes(),
) )
.unwrap(); .unwrap();
array.set_index(scope, 12, val.into()); array.set_index(scope, 11, val.into());
} }
{ {
@ -163,7 +157,7 @@ impl BootstrapOptions {
v8::NewStringType::Normal, v8::NewStringType::Normal,
) )
.unwrap(); .unwrap();
array.set_index(scope, 13, val.into()); array.set_index(scope, 12, val.into());
} }
{ {
@ -173,17 +167,17 @@ impl BootstrapOptions {
v8::NewStringType::Normal, v8::NewStringType::Normal,
) )
.unwrap(); .unwrap();
array.set_index(scope, 14, val.into()); array.set_index(scope, 13, val.into());
} }
{ {
let val = v8::Boolean::new(scope, self.inspect); let val = v8::Boolean::new(scope, self.inspect);
array.set_index(scope, 15, val.into()); array.set_index(scope, 14, val.into());
} }
{ {
let val = v8::Boolean::new(scope, self.enable_testing_features); let val = v8::Boolean::new(scope, self.enable_testing_features);
array.set_index(scope, 16, val.into()); array.set_index(scope, 15, val.into());
} }
array array