Extract Niri::update_render_elements()

This commit is contained in:
Ivan Molodetskikh
2024-08-23 12:48:05 +03:00
parent 63defc25d2
commit 09f3d3fb12
3 changed files with 13 additions and 28 deletions
+1 -1
View File
@@ -222,7 +222,7 @@ impl TestCase for Layout {
renderer: &mut GlesRenderer, renderer: &mut GlesRenderer,
_size: Size<i32, Physical>, _size: Size<i32, Physical>,
) -> Vec<Box<dyn RenderElement<GlesRenderer>>> { ) -> Vec<Box<dyn RenderElement<GlesRenderer>>> {
self.layout.update_render_elements(&self.output); self.layout.update_render_elements(Some(&self.output));
self.layout self.layout
.monitor_for_output(&self.output) .monitor_for_output(&self.output)
.unwrap() .unwrap()
+2 -21
View File
@@ -1800,7 +1800,7 @@ impl<W: LayoutElement> Layout<W> {
} }
} }
pub fn update_render_elements(&mut self, output: &Output) { pub fn update_render_elements(&mut self, output: Option<&Output>) {
let _span = tracy_client::span!("Layout::update_render_elements"); let _span = tracy_client::span!("Layout::update_render_elements");
let MonitorSet::Normal { let MonitorSet::Normal {
@@ -1814,31 +1814,12 @@ impl<W: LayoutElement> Layout<W> {
}; };
for (idx, mon) in monitors.iter_mut().enumerate() { for (idx, mon) in monitors.iter_mut().enumerate() {
if mon.output == *output { if output.map_or(true, |output| mon.output == *output) {
mon.update_render_elements(idx == *active_monitor_idx); mon.update_render_elements(idx == *active_monitor_idx);
return;
} }
} }
} }
pub fn update_render_elements_all(&mut self) {
let _span = tracy_client::span!("Layout::update_render_elements_all");
let MonitorSet::Normal {
monitors,
active_monitor_idx,
..
} = &mut self.monitor_set
else {
error!("update_render_elements_all called with no monitors");
return;
};
for (idx, mon) in monitors.iter_mut().enumerate() {
mon.update_render_elements(idx == *active_monitor_idx);
}
}
pub fn update_shaders(&mut self) { pub fn update_shaders(&mut self) {
match &mut self.monitor_set { match &mut self.monitor_set {
MonitorSet::Normal { monitors, .. } => { MonitorSet::Normal { monitors, .. } => {
+10 -6
View File
@@ -1278,7 +1278,7 @@ impl State {
return; return;
}; };
self.niri.layout.update_render_elements_all(); self.niri.update_render_elements(None);
let Some(screenshots) = self let Some(screenshots) = self
.backend .backend
@@ -2853,6 +2853,10 @@ impl Niri {
} }
} }
pub fn update_render_elements(&mut self, output: Option<&Output>) {
self.layout.update_render_elements(output);
}
pub fn render<R: NiriRenderer>( pub fn render<R: NiriRenderer>(
&self, &self,
renderer: &mut R, renderer: &mut R,
@@ -3066,7 +3070,7 @@ impl Niri {
// Also keep redrawing during a screen transition. // Also keep redrawing during a screen transition.
state.unfinished_animations_remain |= state.screen_transition.is_some(); state.unfinished_animations_remain |= state.screen_transition.is_some();
self.layout.update_render_elements(output); self.update_render_elements(Some(output));
// Render. // Render.
res = backend.render(self, output, target_presentation_time); res = backend.render(self, output, target_presentation_time);
@@ -3891,7 +3895,7 @@ impl Niri {
"screencopy output missing" "screencopy output missing"
); );
self.layout.update_render_elements(output); self.update_render_elements(Some(output));
let elements = self.render( let elements = self.render(
renderer, renderer,
@@ -4135,7 +4139,7 @@ impl Niri {
) -> anyhow::Result<()> { ) -> anyhow::Result<()> {
let _span = tracy_client::span!("Niri::screenshot"); let _span = tracy_client::span!("Niri::screenshot");
self.layout.update_render_elements(output); self.update_render_elements(Some(output));
let size = output.current_mode().unwrap().size; let size = output.current_mode().unwrap().size;
let transform = output.current_transform(); let transform = output.current_transform();
@@ -4286,7 +4290,7 @@ impl Niri {
) -> anyhow::Result<()> { ) -> anyhow::Result<()> {
let _span = tracy_client::span!("Niri::screenshot_all_outputs"); let _span = tracy_client::span!("Niri::screenshot_all_outputs");
self.layout.update_render_elements_all(); self.update_render_elements(None);
let outputs: Vec<_> = self.global_space.outputs().cloned().collect(); let outputs: Vec<_> = self.global_space.outputs().cloned().collect();
@@ -4541,7 +4545,7 @@ impl Niri {
pub fn do_screen_transition(&mut self, renderer: &mut GlesRenderer, delay_ms: Option<u16>) { pub fn do_screen_transition(&mut self, renderer: &mut GlesRenderer, delay_ms: Option<u16>) {
let _span = tracy_client::span!("Niri::do_screen_transition"); let _span = tracy_client::span!("Niri::do_screen_transition");
self.layout.update_render_elements_all(); self.update_render_elements(None);
let textures: Vec<_> = self let textures: Vec<_> = self
.output_state .output_state