From 4108459eb3da32fbf7312915fa84d32f2af04ec0 Mon Sep 17 00:00:00 2001 From: Christian Meissl Date: Sat, 11 May 2024 23:37:02 +0200 Subject: [PATCH] drm: remove temporary hashmap building a hashmap each render cycle for such a small set actually hurts performance --- src/backend/drm/compositor/mod.rs | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/backend/drm/compositor/mod.rs b/src/backend/drm/compositor/mod.rs index d177e58897..53674d8a26 100644 --- a/src/backend/drm/compositor/mod.rs +++ b/src/backend/drm/compositor/mod.rs @@ -2362,15 +2362,24 @@ where // commit -> unlikely but possible // So we use an Id per plane for as long as we have the same element // on that plane. - let overlay_plane_lookup: HashMap = - self.planes.overlay.iter().map(|p| (p.handle, p)).collect(); let overlay_plane_elements = overlay_plane_elements.iter().filter_map(|(p, element)| { let id = self .overlay_plane_element_ids .plane_id_for_element_id(p, element.id()); - let is_underlay = overlay_plane_lookup.get(p).unwrap().zpos.unwrap_or_default() - < self.planes.primary.zpos.unwrap_or_default(); + let plane_z_pos = self + .planes + .overlay + .iter() + .find_map(|info| { + if info.handle == *p { + Some(info.zpos.unwrap_or_default()) + } else { + None + } + }) + .unwrap_or_default(); + let is_underlay = plane_z_pos < self.planes.primary.zpos.unwrap_or_default(); if is_underlay { Some(HolepunchRenderElement::from_render_element(id, element, output_scale).into()) } else {