summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cli/lsp/tsc.rs2
-rw-r--r--cli/tsc/mod.rs2
-rw-r--r--cli/worker.rs15
-rw-r--r--runtime/lib.rs1
-rw-r--r--runtime/ops/os/mod.rs3
-rw-r--r--runtime/sys_info.rs (renamed from runtime/ops/os/sys_info.rs)0
-rw-r--r--runtime/web_worker.rs3
7 files changed, 23 insertions, 3 deletions
diff --git a/cli/lsp/tsc.rs b/cli/lsp/tsc.rs
index c9b24176a..48dcb7964 100644
--- a/cli/lsp/tsc.rs
+++ b/cli/lsp/tsc.rs
@@ -34,6 +34,7 @@ use crate::util::path::relative_specifier;
use crate::util::path::to_percent_decoded_str;
use crate::util::result::InfallibleResultExt;
use crate::util::v8::convert;
+use crate::worker::create_isolate_create_params;
use deno_core::convert::Smi;
use deno_core::convert::ToV8;
use deno_core::error::StdAnyError;
@@ -4760,6 +4761,7 @@ fn run_tsc_thread(
specifier_map,
request_rx,
)],
+ create_params: create_isolate_create_params(),
startup_snapshot: Some(tsc::compiler_snapshot()),
inspector: has_inspector_server,
..Default::default()
diff --git a/cli/tsc/mod.rs b/cli/tsc/mod.rs
index 452d5c165..8f8bed20a 100644
--- a/cli/tsc/mod.rs
+++ b/cli/tsc/mod.rs
@@ -9,6 +9,7 @@ use crate::npm::CliNpmResolver;
use crate::resolver::CjsTracker;
use crate::util::checksum;
use crate::util::path::mapped_specifier_for_tsc;
+use crate::worker::create_isolate_create_params;
use deno_ast::MediaType;
use deno_core::anyhow::anyhow;
@@ -1104,6 +1105,7 @@ pub fn exec(request: Request) -> Result<Response, AnyError> {
root_map,
remapped_specifiers,
)],
+ create_params: create_isolate_create_params(),
..Default::default()
});
diff --git a/cli/worker.rs b/cli/worker.rs
index 1afe37e34..c6cbf77f1 100644
--- a/cli/worker.rs
+++ b/cli/worker.rs
@@ -555,6 +555,7 @@ impl CliMainWorkerFactory {
permissions,
v8_code_cache: shared.code_cache.clone(),
};
+
let options = WorkerOptions {
bootstrap: BootstrapOptions {
deno_version: crate::version::DENO_VERSION_INFO.deno.to_string(),
@@ -585,7 +586,7 @@ impl CliMainWorkerFactory {
},
extensions: custom_extensions,
startup_snapshot: crate::js::deno_isolate_init(),
- create_params: None,
+ create_params: create_isolate_create_params(),
unsafely_ignore_certificate_errors: shared
.options
.unsafely_ignore_certificate_errors
@@ -786,6 +787,7 @@ fn create_web_worker_callback(
},
extensions: vec![],
startup_snapshot: crate::js::deno_isolate_init(),
+ create_params: create_isolate_create_params(),
unsafely_ignore_certificate_errors: shared
.options
.unsafely_ignore_certificate_errors
@@ -806,6 +808,17 @@ fn create_web_worker_callback(
})
}
+/// By default V8 uses 1.4Gb heap limit which is meant for browser tabs.
+/// Instead probe for the total memory on the system and use it instead
+/// as a default.
+pub fn create_isolate_create_params() -> Option<v8::CreateParams> {
+ let maybe_mem_info = deno_runtime::sys_info::mem_info();
+ maybe_mem_info.map(|mem_info| {
+ v8::CreateParams::default()
+ .heap_limits_from_system_memory(mem_info.total, 0)
+ })
+}
+
#[allow(clippy::print_stdout)]
#[allow(clippy::print_stderr)]
#[cfg(test)]
diff --git a/runtime/lib.rs b/runtime/lib.rs
index 8a228c5b5..a6e60ced1 100644
--- a/runtime/lib.rs
+++ b/runtime/lib.rs
@@ -35,6 +35,7 @@ pub mod js;
pub mod ops;
pub mod permissions;
pub mod snapshot;
+pub mod sys_info;
pub mod tokio_util;
pub mod web_worker;
pub mod worker;
diff --git a/runtime/ops/os/mod.rs b/runtime/ops/os/mod.rs
index b10a2939e..74c708c53 100644
--- a/runtime/ops/os/mod.rs
+++ b/runtime/ops/os/mod.rs
@@ -1,5 +1,6 @@
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+use crate::sys_info;
use crate::worker::ExitCode;
use deno_core::op2;
use deno_core::v8;
@@ -11,8 +12,6 @@ use serde::Serialize;
use std::collections::HashMap;
use std::env;
-mod sys_info;
-
deno_core::extension!(
deno_os,
ops = [
diff --git a/runtime/ops/os/sys_info.rs b/runtime/sys_info.rs
index cffc90e9d..cffc90e9d 100644
--- a/runtime/ops/os/sys_info.rs
+++ b/runtime/sys_info.rs
diff --git a/runtime/web_worker.rs b/runtime/web_worker.rs
index b056e01fc..8e0c870d1 100644
--- a/runtime/web_worker.rs
+++ b/runtime/web_worker.rs
@@ -361,6 +361,8 @@ pub struct WebWorkerOptions {
pub extensions: Vec<Extension>,
pub startup_snapshot: Option<&'static [u8]>,
pub unsafely_ignore_certificate_errors: Option<Vec<String>>,
+ /// Optional isolate creation parameters, such as heap limits.
+ pub create_params: Option<v8::CreateParams>,
pub seed: Option<u64>,
pub create_web_worker_cb: Arc<ops::worker_host::CreateWebWorkerCb>,
pub format_js_error_fn: Option<Arc<FormatJsErrorFn>>,
@@ -563,6 +565,7 @@ impl WebWorker {
let mut js_runtime = JsRuntime::new(RuntimeOptions {
module_loader: Some(services.module_loader),
startup_snapshot: options.startup_snapshot,
+ create_params: options.create_params,
get_error_class_fn: options.get_error_class_fn,
shared_array_buffer_store: services.shared_array_buffer_store,
compiled_wasm_module_store: services.compiled_wasm_module_store,