From cfef7479db56c5d999fccdd2945398b80ff2d36b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=B7=E7=94=B5=E8=8A=BD=E8=A1=A3?= Date: Sat, 16 May 2026 01:45:38 -0400 Subject: [PATCH] perf(shell): render from one browser snapshot --- crates/ely_app/src/shell/render.rs | 37 ++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/crates/ely_app/src/shell/render.rs b/crates/ely_app/src/shell/render.rs index 9379668..0d16639 100644 --- a/crates/ely_app/src/shell/render.rs +++ b/crates/ely_app/src/shell/render.rs @@ -23,22 +23,31 @@ impl Render for ElyShell { // shade. `ThemeMode::System` defers to the OS preference via // GPUI's `Window::appearance`; explicit Light / Dark wins. let appearance = window.appearance(); - let theme_mode = match &self.state { - ShellState::Ready(core) => { - core.snapshot().map(|s| s.appearance.theme_mode()).unwrap_or_default() - } - ShellState::StartupError(_) => ely_domain::ThemeMode::default(), - }; - colors::set_mode(resolve_color_mode(theme_mode, appearance)); match &self.state { - ShellState::Ready(core) => match (core.snapshot(), core.active_tab().cloned()) { - (Ok(snapshot), Ok(active_tab)) => { - self.render_browser(snapshot, active_tab, window, cx) + ShellState::Ready(core) => match core.snapshot() { + Ok(snapshot) => { + colors::set_mode(resolve_color_mode( + snapshot.appearance.theme_mode(), + appearance, + )); + match active_tab_from_snapshot(&snapshot) { + Some(active_tab) => self.render_browser(snapshot, active_tab, window, cx), + None => render_error("active tab missing from snapshot".to_string()), + } + } + Err(error) => { + colors::set_mode(resolve_color_mode( + ely_domain::ThemeMode::default(), + appearance, + )); + render_error(error.to_string()) } - (Err(error), _) | (_, Err(error)) => render_error(error.to_string()), }, - ShellState::StartupError(message) => render_error(message.clone()), + ShellState::StartupError(message) => { + colors::set_mode(resolve_color_mode(ely_domain::ThemeMode::default(), appearance)); + render_error(message.clone()) + } } } } @@ -61,6 +70,10 @@ fn resolve_color_mode( } } +fn active_tab_from_snapshot(snapshot: &BrowserSnapshot) -> Option { + snapshot.tabs.iter().find(|tab| tab.id() == &snapshot.active_tab_id).cloned() +} + impl ElyShell { fn render_browser( &mut self,