1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-12-24 08:09:08 -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",
"listenDatagram",
"dlopen",
"ppid",
"removeSignalListener",
"shutdown",
"umask",

View file

@ -427,12 +427,11 @@ function bootstrapMainRuntime(runtimeOptions) {
8: tsVersion,
9: unstableFlag,
10: pid,
11: ppid,
12: target,
13: v8Version,
14: userAgent,
15: inspectFlag,
// 16: enableTestingFeaturesFlag
11: target,
12: v8Version,
13: userAgent,
14: inspectFlag,
// 15: enableTestingFeaturesFlag
} = runtimeOptions;
performance.setTimeOrigin(DateNow());
@ -495,9 +494,16 @@ function bootstrapMainRuntime(runtimeOptions) {
setUserAgent(userAgent);
setLanguage(locale);
let ppid = undefined;
ObjectDefineProperties(finalDenoNs, {
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),
args: util.readOnly(ObjectFreeze(args)),
mainModule: util.getterOnly(opMainModule),
@ -535,12 +541,11 @@ function bootstrapWorkerRuntime(
8: tsVersion,
9: unstableFlag,
10: pid,
// 11: ppid,
12: target,
13: v8Version,
// 14: userAgent,
// 15: inspectFlag,
16: enableTestingFeaturesFlag,
11: target,
12: v8Version,
// 13: userAgent,
// 14: inspectFlag,
15: enableTestingFeaturesFlag,
} = runtimeOptions;
performance.setTimeOrigin(DateNow());

View file

@ -8,7 +8,7 @@ use deno_core::OpState;
deno_core::extension!(
deno_runtime,
ops = [op_main_module],
ops = [op_main_module, op_ppid],
options = { main_module: ModuleSpecifier },
state = |state, options| {
state.put::<ModuleSpecifier>(options.main_module);
@ -31,7 +31,10 @@ fn op_main_module(state: &mut OpState) -> Result<String, AnyError> {
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)]
{
// Adopted from rustup:

View file

@ -5,7 +5,6 @@ use deno_core::ModuleSpecifier;
use std::thread;
use crate::colors;
use crate::ops::runtime::ppid;
/// Common bootstrap options for MainWorker & WebWorker
#[derive(Clone)]
@ -61,7 +60,7 @@ impl BootstrapOptions {
&self,
scope: &mut v8::HandleScope<'s>,
) -> 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);
@ -142,18 +141,13 @@ impl BootstrapOptions {
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(
scope,
env!("TARGET").as_bytes(),
)
.unwrap();
array.set_index(scope, 12, val.into());
array.set_index(scope, 11, val.into());
}
{
@ -163,7 +157,7 @@ impl BootstrapOptions {
v8::NewStringType::Normal,
)
.unwrap();
array.set_index(scope, 13, val.into());
array.set_index(scope, 12, val.into());
}
{
@ -173,17 +167,17 @@ impl BootstrapOptions {
v8::NewStringType::Normal,
)
.unwrap();
array.set_index(scope, 14, val.into());
array.set_index(scope, 13, val.into());
}
{
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);
array.set_index(scope, 16, val.into());
array.set_index(scope, 15, val.into());
}
array