performance(server): Improve dump_screen! performance (#2548)

* Pre-allocates `buf` string.
* Uses `trim_end_matches()` instead of regex.

Co-authored-by: Tanapol Prucksakorn <tanapol.pr@gmail.com>
This commit is contained in:
Tanapol Prucksakorn 2025-07-23 00:03:44 +09:00 committed by GitHub
parent 6af82a9e99
commit ee933744dd
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -272,7 +272,7 @@ fn subtract_isize_from_usize(u: usize, i: isize) -> usize {
macro_rules! dump_screen {
($lines:expr) => {{
let mut is_first = true;
let mut buf = "".to_owned();
let mut buf = String::with_capacity($lines.iter().map(|l| l.len()).sum());
for line in &$lines {
if line.is_canonical && !is_first {
@ -281,8 +281,7 @@ macro_rules! dump_screen {
let s: String = (&line.columns).into_iter().map(|x| x.character).collect();
// Replace the spaces at the end of the line. Sometimes, the lines are
// collected with spaces until the end of the panel.
let re = Regex::new("([^ ])[ ]*$").unwrap();
buf.push_str(&(re.replace(&s, "${1}")));
buf.push_str(&s.trim_end_matches(' '));
is_first = false;
}
buf