From c2249f2fa061fe15aa08e3f3adda215c36a3091e Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Mon, 30 Jun 2025 21:40:02 +0200 Subject: [PATCH] graphics/driver-graphics: Couple of minor changes --- graphics/driver-graphics/src/lib.rs | 43 +++++++++++++++++------------ 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/graphics/driver-graphics/src/lib.rs b/graphics/driver-graphics/src/lib.rs index b4f78525d1..3f79f6dbbd 100644 --- a/graphics/driver-graphics/src/lib.rs +++ b/graphics/driver-graphics/src/lib.rs @@ -1,5 +1,6 @@ use std::collections::{BTreeMap, HashMap}; use std::io; +use std::sync::Arc; use graphics_ipc::v1::{CursorDamage, Damage}; use inputd::{VtEvent, VtEventKind}; @@ -49,7 +50,7 @@ pub struct GraphicsScheme { handles: BTreeMap, active_vt: usize, - vts_fb: HashMap>, + vts_fb: HashMap>>, cursor_planes: HashMap>, } @@ -92,15 +93,12 @@ impl GraphicsScheme { log::info!("activate {}", vt_event.vt); for display_id in 0..self.adapter.display_count() { - let framebuffer = self - .vts_fb - .entry(vt_event.vt) - .or_default() - .entry(display_id) - .or_insert_with(|| { - let (width, height) = self.adapter.display_size(display_id); - self.adapter.create_dumb_framebuffer(width, height) - }); + let framebuffer = Self::framebuffer_for_vt_and_display( + &mut self.adapter, + &mut self.vts_fb, + vt_event.vt, + display_id, + ); Self::update_whole_screen(&mut self.adapter, display_id, framebuffer); self.active_vt = vt_event.vt; @@ -168,6 +166,22 @@ impl GraphicsScheme { ); } + fn framebuffer_for_vt_and_display<'a>( + adapter: &mut T, + vts_fb: &'a mut HashMap>>, + vt: usize, + display_id: usize, + ) -> &'a T::Framebuffer { + vts_fb + .entry(vt) + .or_default() + .entry(display_id) + .or_insert_with(|| { + let (width, height) = adapter.display_size(display_id); + Arc::new(adapter.create_dumb_framebuffer(width, height)) + }) + } + fn cursor_plane_for_vt<'a>( adapter: &mut T, cursor_planes: &'a mut HashMap>, @@ -199,14 +213,7 @@ impl Scheme for GraphicsScheme { return Err(Error::new(EINVAL)); } - self.vts_fb - .entry(vt) - .or_default() - .entry(id) - .or_insert_with(|| { - let (width, height) = self.adapter.display_size(id); - self.adapter.create_dumb_framebuffer(width, height) - }); + Self::framebuffer_for_vt_and_display(&mut self.adapter, &mut self.vts_fb, vt, id); self.next_id += 1; self.handles