diff --git a/src/runtime2/runtime.rs b/src/runtime2/runtime.rs index 9da208a48a371a354cd6ec2d7aece2ff4a5fdf21..bf954b4cdea2ede7f5efb75fef397e823e46f962 100644 --- a/src/runtime2/runtime.rs +++ b/src/runtime2/runtime.rs @@ -12,6 +12,13 @@ use super::component::{Component, wake_up_if_sleeping, CompPDL, CompCtx}; use super::store::{ComponentStore, ComponentReservation, QueueDynMpsc, QueueDynProducer}; use super::scheduler::*; +#[derive(PartialOrd, PartialEq, Copy, Clone)] +pub enum LogLevel { + Debug, // all logging (includes messages) + Info, // rough logging + None, // no logging +} + // ----------------------------------------------------------------------------- // Component // ----------------------------------------------------------------------------- @@ -105,6 +112,12 @@ impl CompHandle { } } + #[inline] + pub(crate) fn send_message_logged(&self, sched_ctx: &SchedulerCtx, message: Message, try_wake_up: bool) { + sched_ctx.debug(&format!("Sending message to comp:{} ... {:?}", self.id.0, message)); + self.send_message(&sched_ctx.runtime, message, try_wake_up); + } + pub(crate) fn id(&self) -> CompId { return self.id; } @@ -167,7 +180,7 @@ pub struct Runtime { impl Runtime { // TODO: debug_logging should be removed at some point - pub fn new(num_threads: u32, debug_logging: bool, protocol_description: ProtocolDescription) -> Result { + pub fn new(num_threads: u32, log_level: LogLevel, protocol_description: ProtocolDescription) -> Result { if num_threads == 0 { return Err(rt_error!("need at least one thread to create the runtime")); } @@ -179,7 +192,7 @@ impl Runtime { active_elements: AtomicU32::new(1), }); let (polling_handle, polling_clients) = rt_error_try!( - PollingThread::new(runtime_inner.clone(), debug_logging), + PollingThread::new(runtime_inner.clone(), log_level), "failed to build polling thread" ); @@ -188,11 +201,20 @@ impl Runtime { for thread_index in 0..num_threads { let mut scheduler = Scheduler::new( runtime_inner.clone(), polling_clients.client(), - thread_index, debug_logging + thread_index, log_level ); - let thread_handle = thread::spawn(move || { - scheduler.run(); - }); + + let thread_handle = thread::Builder::new() + .name(format!("scheduler:{}", thread_index)) + .spawn(move || { + scheduler.run(); + }) + .map_err(|reason| + rt_error!( + "failed to spawn scheduler thread {}, because: {}", + thread_index, reason + ) + )?; scheduler_threads.push(thread_handle); }