Skip to content

Commit 0388e38

Browse files
committed
perf: spawn desktop components concurrently
1 parent f09d02c commit 0388e38

File tree

1 file changed

+31
-87
lines changed

1 file changed

+31
-87
lines changed

src/main.rs

Lines changed: 31 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ use color_eyre::{Result, eyre::WrapErr};
1414
use comp::create_privileged_socket;
1515
use cosmic_notifications_util::{DAEMON_NOTIFICATIONS_FD, PANEL_NOTIFICATIONS_FD};
1616
use futures_util::StreamExt;
17+
use futures_util::stream::FuturesUnordered;
1718
#[cfg(feature = "autostart")]
1819
use itertools::Itertools;
1920
use launch_pad::{ProcessManager, process::Process};
@@ -32,6 +33,7 @@ use std::{
3233
};
3334
#[cfg(feature = "systemd")]
3435
use systemd::{get_systemd_env, is_systemd_used, spawn_scope};
36+
use tokio::sync::mpsc::UnboundedSender;
3537
use tokio::{
3638
net::UnixStream,
3739
sync::{
@@ -338,93 +340,7 @@ async fn start(
338340
);
339341
drop(guard);
340342

341-
let span = info_span!(parent: None, "cosmic-app-library");
342-
start_component(
343-
"cosmic-app-library",
344-
span,
345-
&process_manager,
346-
&env_vars,
347-
&socket_tx,
348-
Vec::new(),
349-
)
350-
.await;
351-
352-
let span = info_span!(parent: None, "cosmic-launcher");
353-
start_component(
354-
"cosmic-launcher",
355-
span,
356-
&process_manager,
357-
&env_vars,
358-
&socket_tx,
359-
Vec::new(),
360-
)
361-
.await;
362-
363-
let span = info_span!(parent: None, "cosmic-workspaces");
364-
start_component(
365-
"cosmic-workspaces",
366-
span,
367-
&process_manager,
368-
&env_vars,
369-
&socket_tx,
370-
Vec::new(),
371-
)
372-
.await;
373-
374-
let span = info_span!(parent: None, "cosmic-osd");
375-
start_component(
376-
"cosmic-osd",
377-
span,
378-
&process_manager,
379-
&env_vars,
380-
&socket_tx,
381-
Vec::new(),
382-
)
383-
.await;
384-
385-
let span = info_span!(parent: None, "cosmic-bg");
386-
start_component(
387-
"cosmic-bg",
388-
span,
389-
&process_manager,
390-
&env_vars,
391-
&socket_tx,
392-
Vec::new(),
393-
)
394-
.await;
395-
396-
let span = info_span!(parent: None, "cosmic-greeter");
397-
start_component(
398-
"cosmic-greeter",
399-
span,
400-
&process_manager,
401-
&env_vars,
402-
&socket_tx,
403-
Vec::new(),
404-
)
405-
.await;
406-
407-
let span = info_span!(parent: None, "cosmic-files-applet");
408-
start_component(
409-
"cosmic-files-applet",
410-
span,
411-
&process_manager,
412-
&env_vars,
413-
&socket_tx,
414-
Vec::new(),
415-
)
416-
.await;
417-
418-
let span = info_span!(parent: None, "cosmic-idle");
419-
start_component(
420-
"cosmic-idle",
421-
span,
422-
&process_manager,
423-
&env_vars,
424-
&socket_tx,
425-
Vec::new(),
426-
)
427-
.await;
343+
spawn_components(&process_manager, &env_vars, &socket_tx).await;
428344

429345
#[cfg(feature = "autostart")]
430346
if !*is_systemd_used() {
@@ -576,6 +492,34 @@ async fn start(
576492
Ok(status)
577493
}
578494

495+
/// Spawn desktop components concurrently with the process manager.
496+
async fn spawn_components(
497+
process_manager: &ProcessManager,
498+
env_vars: &[(String, String)],
499+
socket_tx: &UnboundedSender<Vec<UnixStream>>,
500+
) {
501+
let components = [
502+
"cosmic-app-library",
503+
"cosmic-bg",
504+
"cosmic-files-applet",
505+
"cosmic-greeter",
506+
"cosmic-idle",
507+
"cosmic-launcher",
508+
"cosmic-osd",
509+
"cosmic-workspaces",
510+
];
511+
512+
components
513+
.into_iter()
514+
.map(|name| async move {
515+
let span = info_span!(parent: None, "{}", name);
516+
start_component(name, span, process_manager, env_vars, socket_tx, Vec::new()).await;
517+
})
518+
.collect::<FuturesUnordered<_>>()
519+
.collect::<Vec<()>>()
520+
.await;
521+
}
522+
579523
async fn start_component(
580524
cmd: impl Into<Cow<'static, str>>,
581525
span: tracing::Span,

0 commit comments

Comments
 (0)