diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-07-28 23:29:11 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-07-28 23:29:11 +0300 |
| commit | e27a4ea427c9ed6248c0ee80570e94ed7b1928bd (patch) | |
| tree | 0cae21a2b3939293be129aaaecb23641f68bab54 /src/workspace.rs | |
| parent | e16d7d8c07a20f5ee0b4111808680bbcfd7df9ac (diff) | |
perf: skip rendering hidden pty updates
Diffstat (limited to 'src/workspace.rs')
| -rw-r--r-- | src/workspace.rs | 23 |
1 files changed, 12 insertions, 11 deletions
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<AppEvent>, render_notify: Arc<Notify>, - render_dirty: Arc<AtomicBool>, + render_dirty: Arc<RenderSignal>, ) -> 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<AppEvent>, render_notify: Arc<Notify>, - render_dirty: Arc<AtomicBool>, + render_dirty: Arc<RenderSignal>, ) -> 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<AppEvent>, render_notify: Arc<Notify>, - render_dirty: Arc<AtomicBool>, + render_dirty: Arc<RenderSignal>, 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<AppEvent>, render_notify: Arc<Notify>, - render_dirty: Arc<AtomicBool>, + render_dirty: Arc<RenderSignal>, ) -> 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<AppEvent>, render_notify: Arc<Notify>, - render_dirty: Arc<AtomicBool>, + render_dirty: Arc<RenderSignal>, 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<AppEvent>, render_notify: Arc<Notify>, - render_dirty: Arc<AtomicBool>, + render_dirty: Arc<RenderSignal>, argv: Option<&[String]>, extra_env: Vec<(String, String)>, ) -> std::io::Result<(Self, TerminalState, TerminalRuntime)> { @@ -1014,7 +1015,7 @@ impl Workspace { label: Option<String>, fallback_events: mpsc::Sender<AppEvent>, fallback_render_notify: Arc<Notify>, - fallback_render_dirty: Arc<AtomicBool>, + fallback_render_dirty: Arc<RenderSignal>, ) -> 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(), |
