render_helpers: Add Smithay Tracy GPU spans

This commit is contained in:
Ivan Molodetskikh
2025-12-28 07:47:52 +03:00
parent bdf394260a
commit d7184a04b9
6 changed files with 30 additions and 6 deletions
Generated
+1
View File
@@ -3429,6 +3429,7 @@ dependencies = [
"tempfile",
"thiserror 2.0.17",
"tracing",
"tracy-client",
"udev",
"wayland-backend",
"wayland-client",
+1 -1
View File
@@ -138,7 +138,7 @@ systemd = ["dbus"]
# Enables screencasting support through xdg-desktop-portal-gnome.
xdp-gnome-screencast = ["dbus", "pipewire"]
# Enables the Tracy profiler instrumentation.
profile-with-tracy = ["profiling/profile-with-tracy", "tracy-client/default"]
profile-with-tracy = ["profiling/profile-with-tracy", "tracy-client/default", "smithay/tracy_gpu_profiling"]
# Enables the on-demand Tracy profiler instrumentation.
profile-with-tracy-ondemand = ["profile-with-tracy", "tracy-client/ondemand", "tracy-client/manual-lifetime"]
# Enables Tracy allocation profiling.
+11 -1
View File
@@ -8,6 +8,7 @@ use niri_config::{
use smithay::backend::renderer::element::{Element, Id, Kind, RenderElement, UnderlyingStorage};
use smithay::backend::renderer::gles::{GlesError, GlesFrame, GlesRenderer, Uniform};
use smithay::backend::renderer::utils::{CommitCounter, DamageSet, OpaqueRegions};
use smithay::gpu_span_location;
use smithay::utils::{Buffer, Logical, Physical, Point, Rectangle, Scale, Size, Transform};
use super::renderer::NiriRenderer;
@@ -286,7 +287,16 @@ impl RenderElement<GlesRenderer> for BorderRenderElement {
opaque_regions: &[Rectangle<i32, Physical>],
) -> Result<(), GlesError> {
let _span = tracy_client::span!("BorderRenderElement::draw");
RenderElement::<GlesRenderer>::draw(&self.inner, frame, src, dst, damage, opaque_regions)
frame.with_gpu_span(gpu_span_location!("BorderRenderElement::draw"), |frame| {
RenderElement::<GlesRenderer>::draw(
&self.inner,
frame,
src,
dst,
damage,
opaque_regions,
)
})
}
fn underlying_storage(&self, renderer: &mut GlesRenderer) -> Option<UnderlyingStorage<'_>> {
+4 -2
View File
@@ -7,6 +7,7 @@ use smithay::backend::renderer::element::{Element, Id, Kind, RenderElement, Unde
use smithay::backend::renderer::gles::{GlesError, GlesFrame, GlesRenderer, GlesTexture, Uniform};
use smithay::backend::renderer::utils::{CommitCounter, DamageSet, OpaqueRegions};
use smithay::backend::renderer::Texture as _;
use smithay::gpu_span_location;
use smithay::utils::{Buffer, Logical, Physical, Rectangle, Scale, Size, Transform};
use super::renderer::{AsGlesFrame, NiriRenderer};
@@ -172,8 +173,9 @@ impl RenderElement<GlesRenderer> for ResizeRenderElement {
opaque_regions: &[Rectangle<i32, Physical>],
) -> Result<(), GlesError> {
let _span = tracy_client::span!("ResizeRenderElement::draw");
RenderElement::<GlesRenderer>::draw(&self.0, frame, src, dst, damage, opaque_regions)?;
Ok(())
frame.with_gpu_span(gpu_span_location!("ResizeRenderElement::draw"), |frame| {
RenderElement::<GlesRenderer>::draw(&self.0, frame, src, dst, damage, opaque_regions)
})
}
fn underlying_storage(&self, renderer: &mut GlesRenderer) -> Option<UnderlyingStorage<'_>> {
+2 -1
View File
@@ -375,7 +375,8 @@ impl RenderElement<GlesRenderer> for ShaderRenderElement {
let has_tint = frame.debug_flags().contains(DebugFlags::TINT);
// render
frame.with_context(move |gl| -> Result<(), GlesError> {
let span_loc = smithay::gpu_span_location!("draw shader");
frame.with_profiled_context(span_loc, move |gl| -> Result<(), GlesError> {
let program = if has_debug {
&shader.0.debug
} else {
+11 -1
View File
@@ -6,6 +6,7 @@ use niri_config::{Color, CornerRadius};
use smithay::backend::renderer::element::{Element, Id, Kind, RenderElement, UnderlyingStorage};
use smithay::backend::renderer::gles::{GlesError, GlesFrame, GlesRenderer, Uniform};
use smithay::backend::renderer::utils::{CommitCounter, DamageSet, OpaqueRegions};
use smithay::gpu_span_location;
use smithay::utils::{Buffer, Logical, Physical, Point, Rectangle, Scale, Size, Transform};
use super::renderer::NiriRenderer;
@@ -247,7 +248,16 @@ impl RenderElement<GlesRenderer> for ShadowRenderElement {
opaque_regions: &[Rectangle<i32, Physical>],
) -> Result<(), GlesError> {
let _span = tracy_client::span!("ShadowRenderElement::draw");
RenderElement::<GlesRenderer>::draw(&self.inner, frame, src, dst, damage, opaque_regions)
frame.with_gpu_span(gpu_span_location!("ShadowRenderElement::draw"), |frame| {
RenderElement::<GlesRenderer>::draw(
&self.inner,
frame,
src,
dst,
damage,
opaque_regions,
)
})
}
fn underlying_storage(&self, renderer: &mut GlesRenderer) -> Option<UnderlyingStorage<'_>> {