From 4c378d7173fae64ea77c6ead7258c30ff64f2789 Mon Sep 17 00:00:00 2001 From: HampusM Date: Tue, 21 Apr 2026 16:55:25 +0200 Subject: feat(engine): make windowing & work queue threads named --- engine/src/asset.rs | 2 +- engine/src/windowing.rs | 47 +++++++++++++++++++++++++---------------------- engine/src/work_queue.rs | 23 +++++++++++++---------- 3 files changed, 39 insertions(+), 33 deletions(-) diff --git a/engine/src/asset.rs b/engine/src/asset.rs index 95ccb04..9b11317 100644 --- a/engine/src/asset.rs +++ b/engine/src/asset.rs @@ -152,7 +152,7 @@ impl Assets asset_lookup: RefCell::new(HashMap::with_capacity(capacity)), importers: Vec::new(), importer_lookup: HashMap::new(), - import_work_queue: WorkQueue::new(), + import_work_queue: WorkQueue::new("asset_importing_work_queue"), import_work_msg_receiver, import_work_msg_sender, events: Events::default(), diff --git a/engine/src/windowing.rs b/engine/src/windowing.rs index 03e0ff8..a10b7c1 100644 --- a/engine/src/windowing.rs +++ b/engine/src/windowing.rs @@ -1,6 +1,6 @@ use std::sync::atomic::{AtomicBool, Ordering}; use std::sync::{Arc, Weak}; -use std::thread::{JoinHandle as ThreadJoinHandle, spawn}; +use std::thread::{Builder as ThreadBuilder, JoinHandle as ThreadJoinHandle}; use crossbeam_channel::{ Receiver as ChannelReceiver, @@ -361,30 +361,33 @@ impl Default for Context bounded_channel::(MESSAGE_TO_APP_CHANNEL_CAP); Self { - _thread: spawn(move || { - let mut app = App { - message_from_app_sender, - message_from_app_receiver: message_from_app_receiver_b, - message_to_app_receiver, - is_dropped: is_dropped_b, - windows: MapVec::default(), - focused_window_id: None, - }; + _thread: ThreadBuilder::new() + .name("windowing".to_string()) + .spawn(move || { + let mut app = App { + message_from_app_sender, + message_from_app_receiver: message_from_app_receiver_b, + message_to_app_receiver, + is_dropped: is_dropped_b, + windows: MapVec::default(), + focused_window_id: None, + }; - let event_loop = match create_event_loop() { - Ok(event_loop) => event_loop, - Err(err) => { - tracing::error!("Failed to create event loop: {err}"); - return; - } - }; + let event_loop = match create_event_loop() { + Ok(event_loop) => event_loop, + Err(err) => { + tracing::error!("Failed to create event loop: {err}"); + return; + } + }; - event_loop.set_control_flow(EventLoopControlFlow::Poll); + event_loop.set_control_flow(EventLoopControlFlow::Poll); - if let Err(err) = event_loop.run_app(&mut app) { - tracing::error!("Event loop error occurred: {err}"); - } - }), + if let Err(err) = event_loop.run_app(&mut app) { + tracing::error!("Event loop error occurred: {err}"); + } + }) + .expect("Failed to create windowing thread"), is_dropped, message_from_app_receiver, message_to_app_sender, diff --git a/engine/src/work_queue.rs b/engine/src/work_queue.rs index 7226c7d..48cb2ff 100644 --- a/engine/src/work_queue.rs +++ b/engine/src/work_queue.rs @@ -1,6 +1,6 @@ use std::marker::PhantomData; -use std::sync::mpsc::{channel as mpsc_channel, Sender as MpscSender}; -use std::thread::JoinHandle as ThreadHandle; +use std::sync::mpsc::{Sender as MpscSender, channel as mpsc_channel}; +use std::thread::{Builder as ThreadBuilder, JoinHandle as ThreadJoinHandle}; pub struct Work { @@ -12,25 +12,28 @@ pub struct Work pub struct WorkQueue { work_sender: MpscSender>, - _thread: ThreadHandle<()>, + _thread: ThreadJoinHandle<()>, _pd: PhantomData, } impl WorkQueue { - pub fn new() -> Self + pub fn new(name: &str) -> Self { let (work_sender, work_receiver) = mpsc_channel::>(); Self { work_sender, - _thread: std::thread::spawn(move || { - let work_receiver = work_receiver; + _thread: ThreadBuilder::new() + .name(name.to_string()) + .spawn(move || { + let work_receiver = work_receiver; - while let Ok(work) = work_receiver.recv() { - (work.func)(work.user_data); - } - }), + while let Ok(work) = work_receiver.recv() { + (work.func)(work.user_data); + } + }) + .expect("Failed to create work queue thread"), _pd: PhantomData, } } -- cgit v1.2.3-18-g5258