From de43a37e9ed902b0da4e7b8f540bcb4d53d0bb3d Mon Sep 17 00:00:00 2001 From: "Luke D. Jones" Date: Mon, 6 Jun 2022 14:20:34 +1200 Subject: [PATCH] Use smol async for daemon and daemon-user --- Cargo.lock | 67 ++----------------------------------- asus-notify/src/main.rs | 2 +- daemon-user/Cargo.toml | 2 +- daemon-user/src/daemon.rs | 70 +++++++++++++++++++++------------------ daemon/Cargo.toml | 3 +- daemon/src/daemon.rs | 24 ++++++++------ 6 files changed, 56 insertions(+), 112 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e9b38cf9..1aafd1e9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -280,10 +280,8 @@ dependencies = [ name = "daemon" version = "4.1.0" dependencies = [ - "async-executor", "async-trait", "env_logger", - "futures", "log", "logind-zbus", "rog_anime", @@ -295,6 +293,7 @@ dependencies = [ "serde", "serde_derive", "serde_json", + "smol", "sysfs-class", "toml", "udev", @@ -307,13 +306,13 @@ name = "daemon-user" version = "1.2.0" dependencies = [ "dirs", - "futures", "rog_anime", "rog_dbus", "rog_supported", "serde", "serde_derive", "serde_json", + "smol", "zbus", "zvariant", "zvariant_derive", @@ -458,49 +457,12 @@ dependencies = [ "num-traits", ] -[[package]] -name = "futures" -version = "0.3.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f73fe65f54d1e12b726f517d3e2135ca3125a437b6d998caf1962961f7172d9e" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-channel" -version = "0.3.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3083ce4b914124575708913bca19bfe887522d6e2e6d0952943f5eac4a74010" -dependencies = [ - "futures-core", - "futures-sink", -] - [[package]] name = "futures-core" version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3" -[[package]] -name = "futures-executor" -version = "0.3.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9420b90cfa29e327d0429f19be13e7ddb68fa1cccb09d65e5706b8c7a749b8a6" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", - "num_cpus", -] - [[package]] name = "futures-io" version = "0.3.21" @@ -522,17 +484,6 @@ dependencies = [ "waker-fn", ] -[[package]] -name = "futures-macro" -version = "0.3.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33c1e13800337f4d4d7a316bf45a567dbcb6ffe087f16424852d97e97a91f512" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "futures-sink" version = "0.3.21" @@ -551,13 +502,9 @@ version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a" dependencies = [ - "futures-channel", "futures-core", - "futures-io", - "futures-macro", "futures-sink", "futures-task", - "memchr", "pin-project-lite", "pin-utils", "slab", @@ -821,16 +768,6 @@ dependencies = [ "autocfg", ] -[[package]] -name = "num_cpus" -version = "1.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" -dependencies = [ - "hermit-abi", - "libc", -] - [[package]] name = "num_threads" version = "0.1.6" diff --git a/asus-notify/src/main.rs b/asus-notify/src/main.rs index ee575d5e..f590c9cf 100644 --- a/asus-notify/src/main.rs +++ b/asus-notify/src/main.rs @@ -124,7 +124,7 @@ fn main() -> Result<(), Box> { .detach(); loop { - future::block_on(executor.tick()); + smol::block_on(executor.tick()); } } diff --git a/daemon-user/Cargo.toml b/daemon-user/Cargo.toml index 2e06a1a7..9e10d374 100644 --- a/daemon-user/Cargo.toml +++ b/daemon-user/Cargo.toml @@ -29,4 +29,4 @@ zbus = "^2.2" zvariant = "^3.0" zvariant_derive = "^3.0" -futures = { version = "0.3.19", features = ["executor", "thread-pool"] } \ No newline at end of file +smol = "^1.2" \ No newline at end of file diff --git a/daemon-user/src/daemon.rs b/daemon-user/src/daemon.rs index ef2651d1..67294c99 100644 --- a/daemon-user/src/daemon.rs +++ b/daemon-user/src/daemon.rs @@ -1,10 +1,10 @@ -use futures::executor::ThreadPool; use rog_dbus::RogDbusClientBlocking; use rog_user::{ ctrl_anime::{CtrlAnime, CtrlAnimeInner}, user_config::*, DBUS_NAME, }; +use smol::Executor; use std::sync::Arc; use std::sync::Mutex; use zbus::Connection; @@ -23,44 +23,48 @@ fn main() -> Result<(), Box> { let mut config = UserConfig::new(); config.load_config()?; - let anime_config = UserAnimeConfig::load_config(config.active_anime)?; - let anime = anime_config.create_anime()?; - - let anime_config = Arc::new(Mutex::new(anime_config)); - let thread_pool = ThreadPool::new().unwrap(); + let executor = Executor::new(); let early_return = Arc::new(AtomicBool::new(false)); - thread_pool.spawn_ok(async move { - // Create server - let mut connection = Connection::session().await.unwrap(); - connection.request_name(DBUS_NAME).await.unwrap(); + // Set up the anime data and run loop/thread + if supported.anime_ctrl.0 { + let anime_config = UserAnimeConfig::load_config(config.active_anime)?; + let anime = anime_config.create_anime()?; + let anime_config = Arc::new(Mutex::new(anime_config)); - // Set up the anime data and run loop/thread - if supported.anime_ctrl.0 { - // Inner behind mutex required for thread safety - let inner = Arc::new(Mutex::new( - CtrlAnimeInner::new(anime, client, early_return.clone()).unwrap(), - )); - // Need new client object for dbus control part - let (client, _) = RogDbusClientBlocking::new().unwrap(); - let anime_control = - CtrlAnime::new(anime_config, inner.clone(), client, early_return).unwrap(); - anime_control.add_to_server(&mut connection).await; - loop { - if let Ok(inner) = inner.clone().try_lock() { - inner.run().ok(); + executor + .spawn(async move { + // Create server + let mut connection = Connection::session().await.unwrap(); + connection.request_name(DBUS_NAME).await.unwrap(); + + // Inner behind mutex required for thread safety + let inner = Arc::new(Mutex::new( + CtrlAnimeInner::new(anime, client, early_return.clone()).unwrap(), + )); + // Need new client object for dbus control part + let (client, _) = RogDbusClientBlocking::new().unwrap(); + let anime_control = + CtrlAnime::new(anime_config, inner.clone(), client, early_return).unwrap(); + anime_control.add_to_server(&mut connection).await; + loop { + if let Ok(inner) = inner.clone().try_lock() { + inner.run().ok(); + } } - } - } - // future::ready(()) - }); + }) + .detach(); + } - // if supported.keyboard_led.per_key_led_mode {} + // if supported.keyboard_led.per_key_led_mode { + // executor + // .spawn(async move { + // // + // }) + // .detach(); + // } loop { - std::thread::sleep(std::time::Duration::from_millis(1000)); - // if let Err(err) = server.try_handle_next() { - // println!("{}", err); - // } + smol::block_on(executor.tick()); } } diff --git a/daemon/Cargo.toml b/daemon/Cargo.toml index cf8c55c4..ba29ed08 100644 --- a/daemon/Cargo.toml +++ b/daemon/Cargo.toml @@ -24,9 +24,8 @@ rog_supported = { path = "../rog-supported" } rog_profiles = { path = "../rog-profiles" } rog_dbus = { path = "../rog-dbus" } -async-executor = "1.4.1" async-trait = "^0.1" -futures = { version = "0.3.19", features = ["executor", "thread-pool"] } +smol = "^1.2" rusb = "^0.9" udev = "^0.6" diff --git a/daemon/src/daemon.rs b/daemon/src/daemon.rs index 08ea19c6..d808f7df 100644 --- a/daemon/src/daemon.rs +++ b/daemon/src/daemon.rs @@ -5,9 +5,9 @@ use std::sync::{Arc, Mutex}; use std::time::Duration; use ::zbus::Connection; -use futures::executor::ThreadPool; use log::LevelFilter; use log::{error, info, warn}; +use smol::Executor; use daemon::ctrl_anime::config::AnimeConfig; use daemon::ctrl_anime::zbus::CtrlAnimeZbus; @@ -61,14 +61,14 @@ pub fn main() -> Result<(), Box> { info!(" rog-profiles v{}", rog_profiles::VERSION); info!("rog-supported v{}", rog_supported::VERSION); - let mut pool = ThreadPool::new()?; + let mut executor = Executor::new(); - futures::executor::block_on(start_daemon(&mut pool))?; + smol::block_on(start_daemon(&mut executor))?; Ok(()) } /// The actual main loop for the daemon -async fn start_daemon(thread_pool: &mut ThreadPool) -> Result<(), Box> { +async fn start_daemon(executor: &mut Executor<'_>) -> Result<(), Box> { let supported = SupportedFunctions::get_supported(); print_board_info(); println!("{}", serde_json::to_string_pretty(&supported)?); @@ -140,9 +140,11 @@ async fn start_daemon(thread_pool: &mut ThreadPool) -> Result<(), Box zbus.add_to_server(&mut connection).await; let task = CtrlAnimeTask::new(inner); - thread_pool.spawn_ok(async move { - task.do_task().await.ok(); - }); + executor + .spawn(async move { + task.do_task().await.ok(); + }) + .detach(); } Err(err) => { error!("AniMe control: {}", err); @@ -165,9 +167,11 @@ async fn start_daemon(thread_pool: &mut ThreadPool) -> Result<(), Box .await; let task = CtrlKbdLedTask::new(inner); - thread_pool.spawn_ok(async move { - task.do_task().await.ok(); - }); + executor + .spawn(async move { + task.do_task().await.ok(); + }) + .detach(); } Err(err) => { error!("Keyboard control: {}", err);