debug_ui: Add option to display active gpu

This commit is contained in:
Victoria Brekenfeld 2022-03-22 12:36:03 +01:00
parent bc89ff99b4
commit 8e1c1af6a9
5 changed files with 29 additions and 13 deletions

View file

@ -441,12 +441,8 @@ impl Device {
.insert_source(timer, |(dev_id, crtc), _, state| {
let backend = state.backend.kms();
if let Some(device) = backend.devices.get_mut(&dev_id) {
let mut renderer = backend
.api
.renderer(&backend.primary, &device.render_node)
.unwrap();
if let Some(surface) = device.surfaces.get_mut(&crtc) {
if let Err(err) = surface.render_output(&mut renderer, &mut state.common) {
if let Err(err) = surface.render_output(&mut backend.api, &backend.primary, &device.render_node, &mut state.common) {
slog_scope::error!("Error rendering: {}", err);
// TODO re-schedule?
}
@ -478,9 +474,15 @@ impl Device {
impl Surface {
pub fn render_output(
&mut self,
renderer: &mut render::GlMultiRenderer<'_>,
api: &mut GpuManager<EglGlesBackend>,
render_node: &DrmNode,
target_node: &DrmNode,
state: &mut Common,
) -> Result<()> {
let mut renderer = api
.renderer(render_node, target_node)
.unwrap();
let (buffer, age) = self
.surface
.next_buffer()
@ -491,7 +493,8 @@ impl Surface {
.with_context(|| "Failed to bind buffer")?;
match render::render_output(
renderer,
Some(&render_node),
&mut renderer,
age,
state,
&self.output,

View file

@ -9,10 +9,13 @@ use crate::{
use slog::Logger;
use smithay::{
backend::renderer::{
gles2::{Gles2Renderbuffer, Gles2Renderer, Gles2Texture},
multigpu::{egl::EglGlesBackend, Error as MultiError, MultiFrame, MultiRenderer},
ImportAll, Renderer,
backend::{
drm::DrmNode,
renderer::{
gles2::{Gles2Renderbuffer, Gles2Renderer, Gles2Texture},
multigpu::{egl::EglGlesBackend, Error as MultiError, MultiFrame, MultiRenderer},
ImportAll, Renderer,
},
},
desktop::space::{RenderElement, RenderError, SpaceOutputTuple, SurfaceTree},
utils::{Logical, Point, Rectangle},
@ -94,6 +97,7 @@ impl AsGles2Renderer for GlMultiRenderer<'_> {
}
pub fn render_output<R>(
_gpu: Option<&DrmNode>,
renderer: &mut R,
age: u8,
state: &mut Common,
@ -122,7 +126,7 @@ where
.unwrap_or(Rectangle::from_loc_and_size((0, 0), (0, 0)));
let scale = space.output_scale(output).unwrap();
let fps_overlay = fps_ui(state, fps, output_geo, scale);
let fps_overlay = fps_ui(_gpu, state, fps, output_geo, scale);
custom_elements.push(fps_overlay.into());
let mut area = state.spaces.global_space();

View file

@ -45,6 +45,7 @@ impl WinitState {
let age = backend.buffer_age().unwrap_or(0);
match render::render_output(
None,
backend.renderer(),
age as u8,
state,

View file

@ -163,6 +163,7 @@ impl Surface {
.with_context(|| "Failed to bind buffer")?;
match render::render_output(
None,
renderer,
age as u8,
state,

View file

@ -1,10 +1,14 @@
// SPDX-License-Identifier: GPL-3.0-only
use crate::state::{Common, Fps};
use smithay::utils::{Logical, Rectangle};
use smithay::{
backend::drm::DrmNode,
utils::{Logical, Rectangle},
};
pub use smithay_egui::EguiFrame;
pub fn fps_ui(
gpu: Option<&DrmNode>,
state: &Common,
fps: &mut Fps,
area: Rectangle<i32, Logical>,
@ -55,6 +59,9 @@ pub fn fps_ui(
ui.set_max_width(label_res.rect.min.x + label_res.rect.width());
ui.separator();
if let Some(gpu) = gpu {
ui.label(egui::RichText::new(format!("renderD{}", gpu.minor())).code());
}
ui.label(egui::RichText::new(format!("FPS: {:>7.3}", avg_fps)).heading());
ui.label("Frame Times:");
ui.label(egui::RichText::new(format!("avg: {:>7.6}", avg)).code());