From e27a4ea427c9ed6248c0ee80570e94ed7b1928bd Mon Sep 17 00:00:00 2001 From: Ogulcan Celik Date: Tue, 28 Jul 2026 23:29:11 +0300 Subject: perf: skip rendering hidden pty updates --- src/workspace.rs | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) (limited to 'src/workspace.rs') diff --git a/src/workspace.rs b/src/workspace.rs index bb079b96..23e35322 100644 --- a/src/workspace.rs +++ b/src/workspace.rs @@ -1,7 +1,7 @@ use std::collections::HashMap; use std::ops::{Deref, DerefMut}; use std::path::PathBuf; -use std::sync::atomic::{AtomicBool, AtomicU64, Ordering}; +use std::sync::atomic::{AtomicU64, Ordering}; use std::sync::Arc; use ratatui::layout::Direction; @@ -12,6 +12,7 @@ use crate::layout::PaneId; #[cfg(test)] use crate::layout::TileLayout; use crate::pane::{PaneLaunchEnv, PaneState}; +use crate::render_signal::RenderSignal; use crate::terminal::{TerminalId, TerminalRuntime, TerminalRuntimeRegistry, TerminalState}; mod aggregate; @@ -234,7 +235,7 @@ impl Workspace { moved: MovedPane, events: mpsc::Sender, render_notify: Arc, - render_dirty: Arc, + render_dirty: Arc, ) -> Self { let id = generate_workspace_id(); let root_pane = moved.pane_id; @@ -278,7 +279,7 @@ impl Workspace { shell_config: crate::pane::PaneShellConfig<'_>, events: mpsc::Sender, render_notify: Arc, - render_dirty: Arc, + render_dirty: Arc, ) -> std::io::Result<(Self, TerminalState, TerminalRuntime)> { Self::new_with_extra_env( initial_cwd, @@ -304,7 +305,7 @@ impl Workspace { shell_config: crate::pane::PaneShellConfig<'_>, events: mpsc::Sender, render_notify: Arc, - render_dirty: Arc, + render_dirty: Arc, extra_env: Vec<(String, String)>, ) -> std::io::Result<(Self, TerminalState, TerminalRuntime)> { Self::new_with_tab( @@ -333,7 +334,7 @@ impl Workspace { host_terminal_theme: crate::terminal_theme::TerminalTheme, events: mpsc::Sender, render_notify: Arc, - render_dirty: Arc, + render_dirty: Arc, ) -> std::io::Result<(Self, TerminalState, TerminalRuntime)> { Self::new_argv_command_with_extra_env( initial_cwd, @@ -359,7 +360,7 @@ impl Workspace { host_terminal_theme: crate::terminal_theme::TerminalTheme, events: mpsc::Sender, render_notify: Arc, - render_dirty: Arc, + render_dirty: Arc, extra_env: Vec<(String, String)>, ) -> std::io::Result<(Self, TerminalState, TerminalRuntime)> { Self::new_with_tab( @@ -387,7 +388,7 @@ impl Workspace { shell_config: crate::pane::PaneShellConfig<'_>, events: mpsc::Sender, render_notify: Arc, - render_dirty: Arc, + render_dirty: Arc, argv: Option<&[String]>, extra_env: Vec<(String, String)>, ) -> std::io::Result<(Self, TerminalState, TerminalRuntime)> { @@ -1014,7 +1015,7 @@ impl Workspace { label: Option, fallback_events: mpsc::Sender, fallback_render_notify: Arc, - fallback_render_dirty: Arc, + fallback_render_dirty: Arc, ) -> usize { let number = self.next_public_tab_number; self.next_public_tab_number += 1; @@ -1246,7 +1247,7 @@ impl Workspace { pub(crate) fn test_new(name: &str) -> Self { let (events, _) = mpsc::channel(64); let render_notify = Arc::new(Notify::new()); - let render_dirty = Arc::new(AtomicBool::new(false)); + let render_dirty = Arc::new(RenderSignal::new()); let identity_cwd = std::env::current_dir().unwrap_or_else(|_| "/".into()); let (layout, root_id) = TileLayout::new(); let terminal_id = TerminalId::alloc(); @@ -1304,7 +1305,7 @@ impl Workspace { pub(crate) fn test_add_tab(&mut self, name: Option<&str>) -> usize { let (events, _) = mpsc::channel(64); let render_notify = Arc::new(Notify::new()); - let render_dirty = Arc::new(AtomicBool::new(false)); + let render_dirty = Arc::new(RenderSignal::new()); let (layout, root_id) = TileLayout::new(); let mut panes = HashMap::new(); panes.insert(root_id, PaneState::new(TerminalId::alloc())); @@ -1653,7 +1654,7 @@ mod tests { let argv = vec![command.to_string()]; let (events, _) = mpsc::channel(64); let render_notify = Arc::new(Notify::new()); - let render_dirty = Arc::new(AtomicBool::new(false)); + let render_dirty = Arc::new(RenderSignal::new()); let (workspace, _terminal, runtime) = Workspace::new_argv_command( root.clone(), -- cgit v1.2.3