Wayland compositor (wlroots)
git clone https://git.lucas.co/cce-compositor.git
Optimize hot paths by avoiding backtrace capture and allocations in standard log levels
src/server/seat.rs | 6 ++++--
src/server/window_manager.rs | 20 ++++++++++++--------
src/server/xdg_toplevel.rs | 10 ++++++----
3 files changed, 22 insertions(+), 14 deletions(-)
diff --git a/src/server/seat.rs b/src/server/seat.rs
index e07d9c5..152f07d 100644
--- a/src/server/seat.rs
+++ b/src/server/seat.rs
@@ -314,8 +314,10 @@ impl Seat {
return;
}
- let bt = std::backtrace::Backtrace::capture();
- log::info!("[FocusDebug] Seat::focus changing from {:?} to {:?}. Backtrace:\n{}", self.focused, new_focus, bt);
+ if log::log_enabled!(log::Level::Debug) {
+ let bt = std::backtrace::Backtrace::capture();
+ log::debug!("[FocusDebug] Seat::focus changing from {:?} to {:?}. Backtrace:\n{}", self.focused, new_focus, bt);
+ }
// If an exclusive layer surface is active and scheduled for focus,
// block any window manager or other client focus requests (via focus_requested)
diff --git a/src/server/window_manager.rs b/src/server/window_manager.rs
index ee43d49..542be9f 100644
--- a/src/server/window_manager.rs
+++ b/src/server/window_manager.rs
@@ -413,8 +413,10 @@ impl WindowManager {
}
pub unsafe fn dirty_windowing(&mut self) {
- let bt = std::backtrace::Backtrace::force_capture();
- log::info!("dirty_windowing called from backtrace:\n{}", bt);
+ if log::log_enabled!(log::Level::Debug) {
+ let bt = std::backtrace::Backtrace::force_capture();
+ log::debug!("dirty_windowing called from backtrace:\n{}", bt);
+ }
self.scheduled.dirty = true;
self.add_dirty_idle();
}
@@ -861,12 +863,14 @@ fn get_closest_tag(x: f64, y: f64) -> i32 {
}
pub unsafe fn arrange_views(&mut self) {
- log::info!("Monolithic arrange_views triggered. Windows: {}", self.windows.count());
- for (idx, &win_ptr) in self.windows.iter().enumerate() {
- if win_ptr.is_null() { continue; }
- let title = (*win_ptr).get_title_string().unwrap_or_else(|| "None".to_string());
- let aid = (*win_ptr).get_app_id_string().unwrap_or_else(|| "None".to_string());
- log::info!(" window #{}: title={:?}, app_id={:?}, state={:?}, closed={}", idx, title, aid, (*win_ptr).state, (*win_ptr).closed);
+ log::debug!("Monolithic arrange_views triggered. Windows: {}", self.windows.count());
+ if log::log_enabled!(log::Level::Debug) {
+ for (idx, &win_ptr) in self.windows.iter().enumerate() {
+ if win_ptr.is_null() { continue; }
+ let title = (*win_ptr).get_title_string().unwrap_or_else(|| "None".to_string());
+ let aid = (*win_ptr).get_app_id_string().unwrap_or_else(|| "None".to_string());
+ log::debug!(" window #{}: title={:?}, app_id={:?}, state={:?}, closed={}", idx, title, aid, (*win_ptr).state, (*win_ptr).closed);
+ }
}
let outputs_list = &mut (*self.server).om.outputs as *mut ffi::wl_list as *mut WlList;
diff --git a/src/server/xdg_toplevel.rs b/src/server/xdg_toplevel.rs
index 181693c..85b8236 100644
--- a/src/server/xdg_toplevel.rs
+++ b/src/server/xdg_toplevel.rs
@@ -253,10 +253,12 @@ impl XdgToplevel {
self.geometry.height as u32
};
- log::info!(
- "XdgToplevel::configure: sending size {}x{} (scheduled={:?}, sent={:?}, geometry={:?}) to client '{}'",
- width, height, scheduled.width, sent.width, (self.geometry.width, self.geometry.height), (*self.window).get_title_string().unwrap_or_else(|| "None".to_string())
- );
+ if log::log_enabled!(log::Level::Debug) {
+ log::debug!(
+ "XdgToplevel::configure: sending size {}x{} (scheduled={:?}, sent={:?}, geometry={:?}) to client '{}'",
+ width, height, scheduled.width, sent.width, (self.geometry.width, self.geometry.height), (*self.window).get_title_string().unwrap_or_else(|| "None".to_string())
+ );
+ }
let configure_serial = ffi::wlr_xdg_toplevel_set_size(self.wlr_toplevel, width as i32, height as i32);