diff options
author | Kaiyi Li <kaiyili@google.com> | 2020-05-05 14:07:36 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-05-08 21:11:56 +0000 |
commit | a7469062a2b25541cfe887f55441284553659ea0 (patch) | |
tree | 82f8d581cac17ef3d5b22c630079af4a782a553e /devices | |
parent | 03a54abf852984f696e7a101ff9590f05ebcba5b (diff) | |
download | crosvm-a7469062a2b25541cfe887f55441284553659ea0.tar crosvm-a7469062a2b25541cfe887f55441284553659ea0.tar.gz crosvm-a7469062a2b25541cfe887f55441284553659ea0.tar.bz2 crosvm-a7469062a2b25541cfe887f55441284553659ea0.tar.lz crosvm-a7469062a2b25541cfe887f55441284553659ea0.tar.xz crosvm-a7469062a2b25541cfe887f55441284553659ea0.tar.zst crosvm-a7469062a2b25541cfe887f55441284553659ea0.zip |
Extract the DisplayBackend build process into BackendKind build function
All 3 different virtio gpu backends share the same process of creating the GpuDisplay instance, so move that process out of their separate build functions and put it in the shared BackendKind build function. BUG=None TEST=build_test Change-Id: Ie15bae48c8f1b75df49ba066a677020ec5dbf744 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/2182041 Reviewed-by: Jason Macnak <natsu@google.com> Reviewed-by: Zach Reizner <zachr@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com> Commit-Queue: Kaiyi Li <kaiyili@google.com>
Diffstat (limited to 'devices')
-rw-r--r-- | devices/src/virtio/gpu/mod.rs | 34 | ||||
-rw-r--r-- | devices/src/virtio/gpu/virtio_2d_backend.rs | 22 | ||||
-rw-r--r-- | devices/src/virtio/gpu/virtio_3d_backend.rs | 37 | ||||
-rw-r--r-- | devices/src/virtio/gpu/virtio_gfxstream_backend.rs | 23 |
4 files changed, 37 insertions, 79 deletions
diff --git a/devices/src/virtio/gpu/mod.rs b/devices/src/virtio/gpu/mod.rs index 7ba800e..2873b74 100644 --- a/devices/src/virtio/gpu/mod.rs +++ b/devices/src/virtio/gpu/mod.rs @@ -111,7 +111,7 @@ trait Backend { /// Constructs a backend. fn build( - possible_displays: &[DisplayBackend], + display: GpuDisplay, display_width: u32, display_height: u32, renderer_flags: RendererFlags, @@ -345,9 +345,28 @@ impl BackendKind { gpu_device_socket: VmMemoryControlRequestSocket, pci_bar: Alloc, ) -> Option<Box<dyn Backend>> { + let mut display_opt = None; + for display in possible_displays { + match display.build() { + Ok(c) => { + display_opt = Some(c); + break; + } + Err(e) => error!("failed to open display: {}", e), + }; + } + + let display = match display_opt { + Some(d) => d, + None => { + error!("failed to open any displays"); + return None; + } + }; + match self { BackendKind::Virtio2D => Virtio2DBackend::build( - possible_displays, + display, display_width, display_height, renderer_flags, @@ -356,7 +375,7 @@ impl BackendKind { pci_bar, ), BackendKind::Virtio3D => Virtio3DBackend::build( - possible_displays, + display, display_width, display_height, renderer_flags, @@ -366,7 +385,7 @@ impl BackendKind { ), #[cfg(feature = "gfxstream")] BackendKind::VirtioGfxStream => VirtioGfxStreamBackend::build( - possible_displays, + display, display_width, display_height, renderer_flags, @@ -977,13 +996,6 @@ impl DisplayBackend { DisplayBackend::Stub => GpuDisplay::open_stub(), } } - - fn is_x(&self) -> bool { - match self { - DisplayBackend::X(_) => true, - _ => false, - } - } } pub struct Gpu { diff --git a/devices/src/virtio/gpu/virtio_2d_backend.rs b/devices/src/virtio/gpu/virtio_2d_backend.rs index a51a664..fd85bef 100644 --- a/devices/src/virtio/gpu/virtio_2d_backend.rs +++ b/devices/src/virtio/gpu/virtio_2d_backend.rs @@ -22,7 +22,7 @@ use vm_control::VmMemoryControlRequestSocket; use super::protocol::GpuResponse; pub use super::virtio_backend::{VirtioBackend, VirtioResource}; -use crate::virtio::gpu::{Backend, DisplayBackend, VIRTIO_F_VERSION_1}; +use crate::virtio::gpu::{Backend, VIRTIO_F_VERSION_1}; use crate::virtio::resource_bridge::ResourceResponse; #[derive(Debug)] @@ -427,7 +427,7 @@ impl Backend for Virtio2DBackend { /// Returns the underlying Backend. fn build( - possible_displays: &[DisplayBackend], + display: GpuDisplay, display_width: u32, display_height: u32, _renderer_flags: RendererFlags, @@ -435,24 +435,6 @@ impl Backend for Virtio2DBackend { _gpu_device_socket: VmMemoryControlRequestSocket, _pci_bar: Alloc, ) -> Option<Box<dyn Backend>> { - let mut display_opt = None; - for display in possible_displays { - match display.build() { - Ok(c) => { - display_opt = Some(c); - break; - } - Err(e) => error!("failed to open display: {}", e), - }; - } - let display = match display_opt { - Some(d) => d, - None => { - error!("failed to open any displays"); - return None; - } - }; - Some(Box::new(Virtio2DBackend::new( display, display_width, diff --git a/devices/src/virtio/gpu/virtio_3d_backend.rs b/devices/src/virtio/gpu/virtio_3d_backend.rs index 692bedc..f7899be 100644 --- a/devices/src/virtio/gpu/virtio_3d_backend.rs +++ b/devices/src/virtio/gpu/virtio_3d_backend.rs @@ -31,8 +31,8 @@ use super::protocol::{ }; pub use crate::virtio::gpu::virtio_backend::{VirtioBackend, VirtioResource}; use crate::virtio::gpu::{ - Backend, DisplayBackend, VIRTIO_F_VERSION_1, VIRTIO_GPU_F_HOST_VISIBLE, - VIRTIO_GPU_F_RESOURCE_UUID, VIRTIO_GPU_F_RESOURCE_V2, VIRTIO_GPU_F_VIRGL, VIRTIO_GPU_F_VULKAN, + Backend, VIRTIO_F_VERSION_1, VIRTIO_GPU_F_HOST_VISIBLE, VIRTIO_GPU_F_RESOURCE_UUID, + VIRTIO_GPU_F_RESOURCE_V2, VIRTIO_GPU_F_VIRGL, VIRTIO_GPU_F_VULKAN, }; use crate::virtio::resource_bridge::{PlaneInfo, ResourceInfo, ResourceResponse}; @@ -246,7 +246,7 @@ impl Backend for Virtio3DBackend { /// Returns the underlying Backend. fn build( - possible_displays: &[DisplayBackend], + display: GpuDisplay, display_width: u32, display_height: u32, renderer_flags: RendererFlags, @@ -255,31 +255,14 @@ impl Backend for Virtio3DBackend { pci_bar: Alloc, ) -> Option<Box<dyn Backend>> { let mut renderer_flags = renderer_flags; - let mut display_opt = None; - for display in possible_displays { - match display.build() { - Ok(c) => { - // If X11 is being used, that's an indication that the renderer should also be - // using glx. Otherwise, we are likely in an enviroment in which GBM will work - // for doing allocations of buffers we wish to display. TODO(zachr): this is a - // heuristic (or terrible hack depending on your POV). We should do something - // either smarter or more configurable. - if display.is_x() { - renderer_flags = RendererFlags::new().use_glx(true); - } - display_opt = Some(c); - break; - } - Err(e) => error!("failed to open display: {}", e), - }; + if display.is_x() { + // If X11 is being used, that's an indication that the renderer should also be + // using glx. Otherwise, we are likely in an enviroment in which GBM will work + // for doing allocations of buffers we wish to display. TODO(zachr): this is a + // heuristic (or terrible hack depending on your POV). We should do something + // either smarter or more configurable. + renderer_flags = RendererFlags::new().use_glx(true); } - let display = match display_opt { - Some(d) => d, - None => { - error!("failed to open any displays"); - return None; - } - }; if cfg!(debug_assertions) { let ret = unsafe { libc::dup2(libc::STDOUT_FILENO, libc::STDERR_FILENO) }; diff --git a/devices/src/virtio/gpu/virtio_gfxstream_backend.rs b/devices/src/virtio/gpu/virtio_gfxstream_backend.rs index 2a49da8..d8ef793 100644 --- a/devices/src/virtio/gpu/virtio_gfxstream_backend.rs +++ b/devices/src/virtio/gpu/virtio_gfxstream_backend.rs @@ -25,7 +25,7 @@ use vm_control::VmMemoryControlRequestSocket; use super::protocol::GpuResponse; pub use super::virtio_backend::{VirtioBackend, VirtioResource}; -use crate::virtio::gpu::{Backend, DisplayBackend, VIRTIO_F_VERSION_1, VIRTIO_GPU_F_VIRGL}; +use crate::virtio::gpu::{Backend, VIRTIO_F_VERSION_1, VIRTIO_GPU_F_VIRGL}; use crate::virtio::resource_bridge::ResourceResponse; // C definitions related to gfxstream @@ -282,7 +282,7 @@ impl Backend for VirtioGfxStreamBackend { /// Returns the underlying Backend. fn build( - possible_displays: &[DisplayBackend], + display: GpuDisplay, display_width: u32, display_height: u32, _renderer_flags: RendererFlags, @@ -290,25 +290,6 @@ impl Backend for VirtioGfxStreamBackend { gpu_device_socket: VmMemoryControlRequestSocket, pci_bar: Alloc, ) -> Option<Box<dyn Backend>> { - let mut display_opt = None; - for display in possible_displays { - match display.build() { - Ok(c) => { - display_opt = Some(c); - break; - } - Err(e) => error!("failed to open display: {}", e), - }; - } - - let display = match display_opt { - Some(d) => d, - None => { - error!("failed to open any displays"); - return None; - } - }; - Some(Box::new(VirtioGfxStreamBackend::new( display, display_width, |