diff --git a/packages/cli/src/serve/mod.rs b/packages/cli/src/serve/mod.rs index 429a12683..93af8d979 100644 --- a/packages/cli/src/serve/mod.rs +++ b/packages/cli/src/serve/mod.rs @@ -267,13 +267,14 @@ pub(crate) async fn serve_all(args: ServeArgs, tracer: &TraceController) -> Resu } ServeUpdate::ToggleShouldRebuild => { + use crate::styles::{ERROR, NOTE_STYLE}; builder.automatic_rebuilds = !builder.automatic_rebuilds; tracing::info!( "Automatic rebuilds are currently: {}", if builder.automatic_rebuilds { - "enabled" + format!("{NOTE_STYLE}enabled{NOTE_STYLE:#}") } else { - "disabled" + format!("{ERROR}disabled{ERROR:#}") } ) } diff --git a/packages/cli/src/serve/runner.rs b/packages/cli/src/serve/runner.rs index 17546e3cd..5b1ce037d 100644 --- a/packages/cli/src/serve/runner.rs +++ b/packages/cli/src/serve/runner.rs @@ -492,7 +492,7 @@ impl AppServer { // todo - we need to distinguish between hotpatchable rebuilds and true full rebuilds. // A full rebuild is required when the user modifies static initializers which we haven't wired up yet. - if needs_full_rebuild { + if needs_full_rebuild && self.automatic_rebuilds { if self.use_hotpatch_engine { self.client.patch_rebuild(files.to_vec()); if let Some(server) = self.server.as_mut() { @@ -526,6 +526,14 @@ impl AppServer { let file = file.trim_start_matches(&self.client.build.crate_dir().display().to_string()); + if needs_full_rebuild && !self.automatic_rebuilds { + use crate::styles::NOTE_STYLE; + tracing::warn!( + "Ignoring full rebuild for: {NOTE_STYLE}{}{NOTE_STYLE:#}", + file + ); + } + // Only send a hotreload message for templates and assets - otherwise we'll just get a full rebuild // // todo: move the android file uploading out of hotreload_bundled_asset and diff --git a/packages/liveview/src/pool.rs b/packages/liveview/src/pool.rs index 73ad96042..72a840a95 100644 --- a/packages/liveview/src/pool.rs +++ b/packages/liveview/src/pool.rs @@ -31,7 +31,11 @@ impl LiveViewPool { dioxus_html::set_event_converter(Box::new(SerializedHtmlEventConverter)); LiveViewPool { - pool: LocalPoolHandle::new(16), + pool: LocalPoolHandle::new( + std::thread::available_parallelism() + .map(usize::from) + .unwrap_or(1), + ), } } diff --git a/packages/server/src/launch.rs b/packages/server/src/launch.rs index ac5891ad5..72f3f5a2a 100644 --- a/packages/server/src/launch.rs +++ b/packages/server/src/launch.rs @@ -101,7 +101,11 @@ async fn serve_server( base_path().map(|s| s.to_string()), ); - let task_pool = LocalPoolHandle::new(5); + let task_pool = LocalPoolHandle::new( + std::thread::available_parallelism() + .map(usize::from) + .unwrap_or(1), + ); let mut make_service = router.into_make_service(); let listener = tokio::net::TcpListener::bind(address).await.unwrap(); diff --git a/packages/server/src/render.rs b/packages/server/src/render.rs index 99fb6fa87..8c316ddc7 100644 --- a/packages/server/src/render.rs +++ b/packages/server/src/render.rs @@ -40,9 +40,11 @@ where static TASK_POOL: std::sync::OnceLock = std::sync::OnceLock::new(); let pool = TASK_POOL.get_or_init(|| { - let threads = std::thread::available_parallelism() - .unwrap_or(std::num::NonZeroUsize::new(1).unwrap()); - LocalPoolHandle::new(threads.into()) + LocalPoolHandle::new( + std::thread::available_parallelism() + .map(usize::from) + .unwrap_or(1), + ) }); pool.spawn_pinned(f)