aboutsummaryrefslogtreecommitdiff
path: root/src/workspace.rs
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-07-28 23:29:11 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-07-28 23:29:11 +0300
commite27a4ea427c9ed6248c0ee80570e94ed7b1928bd (patch)
tree0cae21a2b3939293be129aaaecb23641f68bab54 /src/workspace.rs
parente16d7d8c07a20f5ee0b4111808680bbcfd7df9ac (diff)
perf: skip rendering hidden pty updates
Diffstat (limited to 'src/workspace.rs')
-rw-r--r--src/workspace.rs23
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(),