aboutsummaryrefslogtreecommitdiffstats
path: root/src/client
diff options
context:
space:
mode:
authorAram Drevekenin <aram@poor.dev>2021-03-16 16:54:07 +0100
committerGitHub <noreply@github.com>2021-03-16 16:54:07 +0100
commit46c9802f6fd7cf37dab6c775554a9b7b9aa39bfd (patch)
tree4af7f26eaee7e3dee3b5bd3f6e4174004d72c2e6 /src/client
parentfix(tabs): delete characters when renaming tab (#226) (diff)
downloadsl0ppij-46c9802f6fd7cf37dab6c775554a9b7b9aa39bfd.tar.gz
sl0ppij-46c9802f6fd7cf37dab6c775554a9b7b9aa39bfd.tar.xz
sl0ppij-46c9802f6fd7cf37dab6c775554a9b7b9aa39bfd.zip
Performance: only render panes that should be updated (#234)
* fix(performance): bring back should_render * style(fmt): rustfmt
Diffstat (limited to 'src/client')
-rw-r--r--src/client/panes/terminal_pane.rs20
-rw-r--r--src/client/tab.rs4
2 files changed, 2 insertions, 22 deletions
diff --git a/src/client/panes/terminal_pane.rs b/src/client/panes/terminal_pane.rs
index 4a0321af..9fa70d11 100644
--- a/src/client/panes/terminal_pane.rs
+++ b/src/client/panes/terminal_pane.rs
@@ -70,13 +70,11 @@ impl Pane for TerminalPane {
fn reset_size_and_position_override(&mut self) {
self.position_and_size_override = None;
self.reflow_lines();
- self.mark_for_rerender();
}
fn change_pos_and_size(&mut self, position_and_size: &PositionAndSize) {
self.position_and_size.columns = position_and_size.columns;
self.position_and_size.rows = position_and_size.rows;
self.reflow_lines();
- self.mark_for_rerender();
}
fn override_size_and_position(&mut self, x: usize, y: usize, size: &PositionAndSize) {
let position_and_size_override = PositionAndSize {
@@ -87,7 +85,6 @@ impl Pane for TerminalPane {
};
self.position_and_size_override = Some(position_and_size_override);
self.reflow_lines();
- self.mark_for_rerender();
}
fn handle_event(&mut self, event: VteEvent) {
match event {
@@ -191,12 +188,7 @@ impl Pane for TerminalPane {
self.max_height
}
fn render(&mut self) -> Option<String> {
- // if self.should_render {
- if true {
- // while checking should_render rather than rendering each pane every time
- // is more performant, it causes some problems when the pane to the left should be
- // rendered and has wide characters (eg. Chinese characters or emoji)
- // as a (hopefully) temporary hack, we render all panes until we find a better solution
+ if self.should_render || cfg!(test) {
let mut vte_output = String::new();
let buffer_lines = &self.read_buffer_as_lines();
let display_cols = self.get_columns();
@@ -238,7 +230,7 @@ impl Pane for TerminalPane {
}
character_styles.clear();
}
- self.mark_for_rerender();
+ self.should_render = false;
Some(vte_output)
} else {
None
@@ -251,45 +243,37 @@ impl Pane for TerminalPane {
self.position_and_size.y += count;
self.position_and_size.rows -= count;
self.reflow_lines();
- self.mark_for_rerender();
}
fn increase_height_down(&mut self, count: usize) {
self.position_and_size.rows += count;
self.reflow_lines();
- self.mark_for_rerender();
}
fn increase_height_up(&mut self, count: usize) {
self.position_and_size.y -= count;
self.position_and_size.rows += count;
self.reflow_lines();
- self.mark_for_rerender();
}
fn reduce_height_up(&mut self, count: usize) {
self.position_and_size.rows -= count;
self.reflow_lines();
- self.mark_for_rerender();
}
fn reduce_width_right(&mut self, count: usize) {
self.position_and_size.x += count;
self.position_and_size.columns -= count;
self.reflow_lines();
- self.mark_for_rerender();
}
fn reduce_width_left(&mut self, count: usize) {
self.position_and_size.columns -= count;
self.reflow_lines();
- self.mark_for_rerender();
}
fn increase_width_left(&mut self, count: usize) {
self.position_and_size.x -= count;
self.position_and_size.columns += count;
self.reflow_lines();
- self.mark_for_rerender();
}
fn increase_width_right(&mut self, count: usize) {
self.position_and_size.columns += count;
self.reflow_lines();
- self.mark_for_rerender();
}
fn scroll_up(&mut self, count: usize) {
self.grid.move_viewport_up(count);
diff --git a/src/client/tab.rs b/src/client/tab.rs
index 1ef0b720..520720c0 100644
--- a/src/client/tab.rs
+++ b/src/client/tab.rs
@@ -1679,7 +1679,6 @@ impl Tab {
} else if self.can_reduce_pane_and_surroundings_right(&active_pane_id, count) {
self.reduce_pane_and_surroundings_right(&active_pane_id, count);
}
- self.render();
}
}
pub fn resize_left(&mut self) {
@@ -1691,7 +1690,6 @@ impl Tab {
} else if self.can_reduce_pane_and_surroundings_left(&active_pane_id, count) {
self.reduce_pane_and_surroundings_left(&active_pane_id, count);
}
- self.render();
}
}
pub fn resize_down(&mut self) {
@@ -1703,7 +1701,6 @@ impl Tab {
} else if self.can_reduce_pane_and_surroundings_down(&active_pane_id, count) {
self.reduce_pane_and_surroundings_down(&active_pane_id, count);
}
- self.render();
}
}
pub fn resize_up(&mut self) {
@@ -1715,7 +1712,6 @@ impl Tab {
} else if self.can_reduce_pane_and_surroundings_up(&active_pane_id, count) {
self.reduce_pane_and_surroundings_up(&active_pane_id, count);
}
- self.render();
}
}
pub fn move_focus(&mut self) {