From f1c40f7306109ff85f68d79ce8b6cc5f3b42053e Mon Sep 17 00:00:00 2001 From: Victor Brekenfeld Date: Sun, 3 May 2020 20:28:20 +0200 Subject: [PATCH] lint: fmt & clippy --- anvil/src/glium_drawer.rs | 22 +++++--- anvil/src/udev.rs | 90 ++++++++++++++++++++---------- src/backend/drm/atomic/session.rs | 6 +- src/backend/drm/atomic/surface.rs | 39 ++++++------- src/backend/drm/common/mod.rs | 25 +++++---- src/backend/drm/egl/mod.rs | 3 +- src/backend/drm/egl/session.rs | 9 ++- src/backend/drm/gbm/surface.rs | 2 +- src/backend/egl/display.rs | 10 ++-- src/backend/egl/surface.rs | 4 +- src/backend/session/dbus/logind.rs | 2 +- 11 files changed, 130 insertions(+), 82 deletions(-) diff --git a/anvil/src/glium_drawer.rs b/anvil/src/glium_drawer.rs index 53f77b2..24f449c 100644 --- a/anvil/src/glium_drawer.rs +++ b/anvil/src/glium_drawer.rs @@ -16,7 +16,11 @@ use smithay::backend::egl::display::EGLBufferReader; use smithay::{ backend::{ egl::{BufferAccessError, EGLImages, Format}, - graphics::{gl::GLGraphicsBackend, glium::{GliumGraphicsBackend, Frame}, SwapBuffersError}, + graphics::{ + gl::GLGraphicsBackend, + glium::{Frame, GliumGraphicsBackend}, + SwapBuffersError, + }, }, reexports::{ calloop::LoopHandle, @@ -458,22 +462,22 @@ impl GliumDrawer { } } -pub fn schedule_initial_render(renderer: Rc>, evt_handle: &LoopHandle) { +pub fn schedule_initial_render( + renderer: Rc>, + evt_handle: &LoopHandle, +) { let mut frame = renderer.draw(); frame.clear_color(0.8, 0.8, 0.9, 1.0); if let Err(err) = frame.set_finish() { match err { - SwapBuffersError::AlreadySwapped => {}, + SwapBuffersError::AlreadySwapped => {} SwapBuffersError::TemporaryFailure(err) => { // TODO dont reschedule after 3(?) retries - error!( - renderer.log, - "Failed to submit page_flip: {}", err - ); + error!(renderer.log, "Failed to submit page_flip: {}", err); let handle = evt_handle.clone(); evt_handle.insert_idle(move |_| schedule_initial_render(renderer, &handle)); - }, + } SwapBuffersError::ContextLost(err) => panic!("Rendering loop lost: {}", err), } } -} \ No newline at end of file +} diff --git a/anvil/src/udev.rs b/anvil/src/udev.rs index b567e77..3f1b400 100644 --- a/anvil/src/udev.rs +++ b/anvil/src/udev.rs @@ -39,11 +39,14 @@ use smithay::{ timer::{Timer, TimerHandle}, EventLoop, LoopHandle, Source, }, - drm::{self, control::{ - connector::{Info as ConnectorInfo, State as ConnectorState}, - crtc, - encoder::Info as EncoderInfo, - }}, + drm::{ + self, + control::{ + connector::{Info as ConnectorInfo, State as ConnectorState}, + crtc, + encoder::Info as EncoderInfo, + }, + }, image::{ImageBuffer, Rgba}, input::Libinput, nix::{fcntl::OFlag, sys::stat::dev_t}, @@ -61,7 +64,7 @@ use smithay::{ }; use crate::buffer_utils::BufferUtils; -use crate::glium_drawer::{GliumDrawer, schedule_initial_render}; +use crate::glium_drawer::{schedule_initial_render, GliumDrawer}; use crate::shell::{MyWindowMap, Roles}; use crate::state::AnvilState; @@ -431,8 +434,14 @@ impl UdevHandlerImpl { dnd_icon: self.dnd_icon.clone(), logger: self.logger.clone(), }); - let restart_id = self.notifier.register(DrmRendererSessionListener { renderer: renderer.clone(), loop_handle: self.loop_handle.clone() }); - device.set_handler(DrmHandlerImpl { renderer, loop_handle: self.loop_handle.clone() }); + let restart_id = self.notifier.register(DrmRendererSessionListener { + renderer: renderer.clone(), + loop_handle: self.loop_handle.clone(), + }); + device.set_handler(DrmHandlerImpl { + renderer, + loop_handle: self.loop_handle.clone(), + }); let device_session_id = self.notifier.register(device.observer()); let dev_id = device.device_id(); @@ -532,7 +541,7 @@ impl DeviceHandler for DrmHandlerImpl { fn vblank(&mut self, crtc: crtc::Handle) { self.renderer.clone().render(crtc, None, Some(&self.loop_handle)) } - + fn error(&mut self, error: ::Error) { error!(self.renderer.logger, "{:?}", error); } @@ -549,11 +558,11 @@ impl SessionObserver for DrmRendererSessionListener { // we want to be called, after all session handling is done (TODO this is not so nice) let renderer = self.renderer.clone(); let handle = self.loop_handle.clone(); - self.loop_handle.insert_idle(move |_| renderer.render_all(Some(&handle))); + self.loop_handle + .insert_idle(move |_| renderer.render_all(Some(&handle))); } } - pub struct DrmRenderer { compositor_token: CompositorToken, backends: Rc>>>>, @@ -570,7 +579,12 @@ impl DrmRenderer { self.clone().render(*crtc, None, evt_handle); } } - fn render(self: Rc, crtc: crtc::Handle, timer: Option, crtc::Handle)>>, evt_handle: Option<&LoopHandle>) { + fn render( + self: Rc, + crtc: crtc::Handle, + timer: Option, crtc::Handle)>>, + evt_handle: Option<&LoopHandle>, + ) { if let Some(drawer) = self.backends.borrow().get(&crtc) { { let (x, y) = *self.pointer_location.borrow(); @@ -625,32 +639,50 @@ impl DrmRenderer { error!(self.logger, "Error during rendering: {:?}", err); let reschedule = match err { SwapBuffersError::AlreadySwapped => false, - SwapBuffersError::TemporaryFailure(err) => match err.downcast_ref::() { - Some(&smithay::backend::drm::common::Error::DeviceInactive) => false, - Some(&smithay::backend::drm::common::Error::Access { ref source, .. }) if match source.get_ref() { - drm::SystemError::PermissionDenied => true, - _ => false, - } => false, - _ => true - }, + SwapBuffersError::TemporaryFailure(err) => { + match err.downcast_ref::() { + Some(&smithay::backend::drm::common::Error::DeviceInactive) => false, + Some(&smithay::backend::drm::common::Error::Access { ref source, .. }) + if match source.get_ref() { + drm::SystemError::PermissionDenied => true, + _ => false, + } => + { + false + } + _ => true, + } + } SwapBuffersError::ContextLost(err) => panic!("Rendering loop lost: {}", err), }; if reschedule { match (timer, evt_handle) { (Some(handle), _) => { - let _ = handle.add_timeout(Duration::from_millis(1000 /*a seconds*/ / 60 /*refresh rate*/), (Rc::downgrade(&self), crtc)); - }, + let _ = handle.add_timeout( + Duration::from_millis(1000 /*a seconds*/ / 60 /*refresh rate*/), + (Rc::downgrade(&self), crtc), + ); + } (None, Some(evt_handle)) => { let timer = Timer::new().unwrap(); let handle = timer.handle(); - let _ = handle.add_timeout(Duration::from_millis(1000 /*a seconds*/ / 60 /*refresh rate*/), (Rc::downgrade(&self), crtc)); - evt_handle.insert_source(timer, |(renderer, crtc), handle, _data| { - if let Some(renderer) = renderer.upgrade() { - renderer.render(crtc, Some(handle.clone()), Option::<&LoopHandle>::None); - } - }).unwrap(); - }, + let _ = handle.add_timeout( + Duration::from_millis(1000 /*a seconds*/ / 60 /*refresh rate*/), + (Rc::downgrade(&self), crtc), + ); + evt_handle + .insert_source(timer, |(renderer, crtc), handle, _data| { + if let Some(renderer) = renderer.upgrade() { + renderer.render( + crtc, + Some(handle.clone()), + Option::<&LoopHandle>::None, + ); + } + }) + .unwrap(); + } _ => unreachable!(), } } diff --git a/src/backend/drm/atomic/session.rs b/src/backend/drm/atomic/session.rs index 47dcb58..8f15c13 100644 --- a/src/backend/drm/atomic/session.rs +++ b/src/backend/drm/atomic/session.rs @@ -166,15 +166,15 @@ impl AtomicDrmDeviceObserver { current.mode = unsafe { std::mem::zeroed() }; // recreate property blob - let mode = { + let mode = { let pending = surface.pending.read().unwrap(); - pending.mode.clone() + pending.mode }; surface.use_mode(mode)?; // drop cursor state surface.cursor.position.set(None); - surface.cursor.hotspot.set((0,0)); + surface.cursor.hotspot.set((0, 0)); surface.cursor.framebuffer.set(None); } } diff --git a/src/backend/drm/atomic/surface.rs b/src/backend/drm/atomic/surface.rs index 900d6bb..723844d 100644 --- a/src/backend/drm/atomic/surface.rs +++ b/src/backend/drm/atomic/surface.rs @@ -535,20 +535,21 @@ impl RawSurface for AtomicDrmSurfaceInternal { }; debug!(self.logger, "Setting screen: {:?}", req); - let result = self.atomic_commit( - &[ - AtomicCommitFlags::PageFlipEvent, - AtomicCommitFlags::AllowModeset, - AtomicCommitFlags::Nonblock, - ], - req, - ) - .compat() - .map_err(|source| Error::Access { - errmsg: "Error setting crtc", - dev: self.dev_path(), - source, - }); + let result = self + .atomic_commit( + &[ + AtomicCommitFlags::PageFlipEvent, + AtomicCommitFlags::AllowModeset, + AtomicCommitFlags::Nonblock, + ], + req, + ) + .compat() + .map_err(|source| Error::Access { + errmsg: "Error setting crtc", + dev: self.dev_path(), + source, + }); if result.is_ok() { *current = pending.clone(); @@ -617,13 +618,13 @@ impl CursorBackend for AtomicDrmSurfaceInternal { } self.cursor.framebuffer.set(Some( - self.add_planar_framebuffer(buffer, &[0; 4], 0).compat().map_err( - |source| Error::Access { + self.add_planar_framebuffer(buffer, &[0; 4], 0) + .compat() + .map_err(|source| Error::Access { errmsg: "Failed to import cursor", dev: self.dev_path(), source, - }, - )?, + })?, )); self.cursor.hotspot.set(hotspot); @@ -858,7 +859,7 @@ impl AtomicDrmSurfaceInternal { self.plane_prop_handle(planes.cursor, "FB_ID")?, property::Value::Framebuffer(Some(fb)), ); - }, + } Err(err) => { warn!(self.logger, "Cursor FB invalid: {}. Skipping.", err); self.cursor.framebuffer.set(None); diff --git a/src/backend/drm/common/mod.rs b/src/backend/drm/common/mod.rs index ce7f8c2..3ee2723 100644 --- a/src/backend/drm/common/mod.rs +++ b/src/backend/drm/common/mod.rs @@ -76,20 +76,21 @@ impl Into for Error { fn into(self) -> SwapBuffersError { match self { x @ Error::DeviceInactive => SwapBuffersError::TemporaryFailure(Box::new(x)), - Error::Access { errmsg, dev, source, .. } - if match source.get_ref() { - drm::SystemError::PermissionDenied => true, - drm::SystemError::Unknown { - errno: nix::errno::Errno::EBUSY, - } => true, - drm::SystemError::Unknown { - errno: nix::errno::Errno::EINTR, - } => true, - _ => false, - } => + Error::Access { + errmsg, dev, source, .. + } if match source.get_ref() { + drm::SystemError::PermissionDenied => true, + drm::SystemError::Unknown { + errno: nix::errno::Errno::EBUSY, + } => true, + drm::SystemError::Unknown { + errno: nix::errno::Errno::EINTR, + } => true, + _ => false, + } => { SwapBuffersError::TemporaryFailure(Box::new(Error::Access { errmsg, dev, source })) - }, + } x => SwapBuffersError::ContextLost(Box::new(x)), } } diff --git a/src/backend/drm/egl/mod.rs b/src/backend/drm/egl/mod.rs index ce68d57..e17ead8 100644 --- a/src/backend/drm/egl/mod.rs +++ b/src/backend/drm/egl/mod.rs @@ -47,6 +47,7 @@ pub enum Error); +type BackendRef = Weak::Surface>>; /// Representation of an egl device to create egl rendering surfaces pub struct EglDevice @@ -61,7 +62,7 @@ where logger: ::slog::Logger, default_attributes: GlAttributes, default_requirements: PixelFormatRequirements, - backends: Rc::Surface>>>>>, + backends: Rc>>>, } impl AsRawFd for EglDevice diff --git a/src/backend/drm/egl/session.rs b/src/backend/drm/egl/session.rs index 5a50247..6a6f2e0 100644 --- a/src/backend/drm/egl/session.rs +++ b/src/backend/drm/egl/session.rs @@ -11,7 +11,10 @@ use std::rc::{Rc, Weak}; use super::{EglDevice, EglSurfaceInternal}; use crate::backend::drm::{Device, Surface}; -use crate::backend::egl::{ffi, native::{Backend, NativeDisplay, NativeSurface}}; +use crate::backend::egl::{ + ffi, + native::{Backend, NativeDisplay, NativeSurface}, +}; use crate::backend::session::{AsSessionObserver, SessionObserver}; /// [`SessionObserver`](SessionObserver) @@ -55,7 +58,9 @@ impl SessionObserver f if let Some(backend) = backend.upgrade() { let old_surface = backend.surface.surface.replace(std::ptr::null()); if !old_surface.is_null() { - unsafe { ffi::egl::DestroySurface(**backend.surface.display, old_surface as *const _); } + unsafe { + ffi::egl::DestroySurface(**backend.surface.display, old_surface as *const _); + } } } } diff --git a/src/backend/drm/gbm/surface.rs b/src/backend/drm/gbm/surface.rs index b9b1686..2076905 100644 --- a/src/backend/drm/gbm/surface.rs +++ b/src/backend/drm/gbm/surface.rs @@ -93,7 +93,7 @@ impl GbmSurfaceInternal { self.recreated.set(false); self.current_frame_buffer.set(Some(fb)); Ok(()) - }, + } Err(err) => { self.unlock_buffer(); Err(err) diff --git a/src/backend/egl/display.rs b/src/backend/egl/display.rs index 62f7d7c..4c8462c 100644 --- a/src/backend/egl/display.rs +++ b/src/backend/egl/display.rs @@ -485,17 +485,19 @@ impl EGLBufferReader { buffer: WlBuffer, ) -> ::std::result::Result { let mut format: i32 = 0; - if wrap_egl_call(|| unsafe { + let query = wrap_egl_call(|| unsafe { ffi::egl::QueryWaylandBufferWL( **self.display, buffer.as_ref().c_ptr() as _, ffi::egl::EGL_TEXTURE_FORMAT, &mut format, ) - }).map_err(|source| BufferAccessError::NotManaged(buffer.clone(), source))? == ffi::egl::FALSE { - return Err(BufferAccessError::NotManaged(buffer.clone(), EGLError::BadParameter)); + }) + .map_err(|source| BufferAccessError::NotManaged(buffer.clone(), source))?; + if query == ffi::egl::FALSE { + return Err(BufferAccessError::NotManaged(buffer, EGLError::BadParameter)); } - + let format = match format { x if x == ffi::egl::TEXTURE_RGB as i32 => Format::RGB, x if x == ffi::egl::TEXTURE_RGBA as i32 => Format::RGBA, diff --git a/src/backend/egl/surface.rs b/src/backend/egl/surface.rs index 7d911fc..da09e8e 100644 --- a/src/backend/egl/surface.rs +++ b/src/backend/egl/surface.rs @@ -90,7 +90,9 @@ impl EGLSurface { wrap_egl_call(|| unsafe { ffi::egl::SwapBuffers(**self.display, surface as *const _) }) .map_err(SwapBuffersError::EGLSwapBuffers) .and_then(|_| self.native.swap_buffers().map_err(SwapBuffersError::Underlying)) - } else { Err(SwapBuffersError::EGLSwapBuffers(EGLError::BadSurface)) }; + } else { + Err(SwapBuffersError::EGLSwapBuffers(EGLError::BadSurface)) + }; // workaround for missing `PartialEq` impl let is_bad_surface = if let Err(SwapBuffersError::EGLSwapBuffers(EGLError::BadSurface)) = result { diff --git a/src/backend/session/dbus/logind.rs b/src/backend/session/dbus/logind.rs index f12ba64..6473c25 100644 --- a/src/backend/session/dbus/logind.rs +++ b/src/backend/session/dbus/logind.rs @@ -292,7 +292,7 @@ impl LogindSessionImpl { self.logger, "Request of type \"{}\" to close device ({},{})", pause_type, major, minor ); - + // gone means the device was unplugged from the system and you will no longer get any // notifications about it. // This is handled via udev and is not part of our session api.