perf(shell): render from one browser snapshot

This commit is contained in:
2026-05-16 01:45:38 -04:00
parent e442e6def4
commit cfef7479db
+25 -12
View File
@@ -23,22 +23,31 @@ impl Render for ElyShell {
// shade. `ThemeMode::System` defers to the OS preference via // shade. `ThemeMode::System` defers to the OS preference via
// GPUI's `Window::appearance`; explicit Light / Dark wins. // GPUI's `Window::appearance`; explicit Light / Dark wins.
let appearance = window.appearance(); 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 { match &self.state {
ShellState::Ready(core) => match (core.snapshot(), core.active_tab().cloned()) { ShellState::Ready(core) => match core.snapshot() {
(Ok(snapshot), Ok(active_tab)) => { Ok(snapshot) => {
self.render_browser(snapshot, active_tab, window, cx) 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<BrowserTab> {
snapshot.tabs.iter().find(|tab| tab.id() == &snapshot.active_tab_id).cloned()
}
impl ElyShell { impl ElyShell {
fn render_browser( fn render_browser(
&mut self, &mut self,