Report layers rendered to iced_beacon

This commit is contained in:
Héctor Ramón Jiménez 2025-04-29 23:01:45 +02:00
parent fae95d6095
commit 613c706a39
No known key found for this signature in database
GPG key ID: 7CC46565708259A7
6 changed files with 45 additions and 6 deletions

View file

@ -48,6 +48,7 @@ pub enum Event {
MessageLogged { number: usize, message: String }, MessageLogged { number: usize, message: String },
CommandsSpawned(usize), CommandsSpawned(usize),
SubscriptionsTracked(usize), SubscriptionsTracked(usize),
LayersRendered(usize),
} }
impl Client { impl Client {

View file

@ -127,6 +127,7 @@ pub fn run() -> impl Stream<Item = Event> {
let mut last_tasks = 0; let mut last_tasks = 0;
let mut last_subscriptions = 0; let mut last_subscriptions = 0;
let mut last_present_window = None; let mut last_present_window = None;
let mut last_present_layers = 0;
drop(task::spawn(async move { drop(task::spawn(async move {
let mut last_message_number = None; let mut last_message_number = None;
@ -199,6 +200,9 @@ pub fn run() -> impl Stream<Item = Event> {
) => { ) => {
last_tasks = commands; last_tasks = commands;
} }
client::Event::LayersRendered(layers) => {
last_present_layers = layers;
}
client::Event::SpanStarted( client::Event::SpanStarted(
span::Stage::Update, span::Stage::Update,
) => { ) => {
@ -264,7 +268,10 @@ pub fn run() -> impl Stream<Item = Event> {
} }
} }
span::Stage::Present(window) => { span::Stage::Present(window) => {
Span::Present { window } Span::Present {
window,
layers: last_present_layers,
}
} }
span::Stage::Custom(name) => { span::Stage::Custom(name) => {
Span::Custom { name } Span::Custom { name }

View file

@ -33,6 +33,7 @@ pub enum Span {
}, },
Present { Present {
window: window::Id, window: window::Id,
layers: usize,
}, },
Custom { Custom {
name: String, name: String,
@ -70,7 +71,7 @@ impl Span {
Span::Draw { window } => Stage::Draw(*window), Span::Draw { window } => Stage::Draw(*window),
Span::Prepare { primitive, .. } => Stage::Prepare(*primitive), Span::Prepare { primitive, .. } => Stage::Prepare(*primitive),
Span::Render { primitive, .. } => Stage::Render(*primitive), Span::Render { primitive, .. } => Stage::Render(*primitive),
Span::Present { window } => Stage::Present(*window), Span::Present { window, .. } => Stage::Present(*window),
Span::Custom { name, .. } => Stage::Custom(name.clone()), Span::Custom { name, .. } => Stage::Custom(name.clone()),
} }
} }

View file

@ -43,11 +43,15 @@ pub fn theme_changed(f: impl FnOnce() -> Option<theme::Palette>) {
} }
pub fn tasks_spawned(amount: usize) { pub fn tasks_spawned(amount: usize) {
internal::tasks_spawned(amount) internal::tasks_spawned(amount);
} }
pub fn subscriptions_tracked(amount: usize) { pub fn subscriptions_tracked(amount: usize) {
internal::subscriptions_tracked(amount) internal::subscriptions_tracked(amount);
}
pub fn layers_rendered(amount: impl FnOnce() -> usize) {
internal::layers_rendered(amount);
} }
pub fn boot() -> Span { pub fn boot() -> Span {
@ -157,6 +161,10 @@ mod internal {
log(client::Event::SubscriptionsTracked(amount)); log(client::Event::SubscriptionsTracked(amount));
} }
pub fn layers_rendered(amount: impl FnOnce() -> usize) {
log(client::Event::LayersRendered(amount()));
}
pub fn boot() -> Span { pub fn boot() -> Span {
span(span::Stage::Boot) span(span::Stage::Boot)
} }
@ -300,8 +308,6 @@ mod internal {
use crate::futures::Subscription; use crate::futures::Subscription;
use crate::{Command, Primitive}; use crate::{Command, Primitive};
use std::io;
pub fn enable() {} pub fn enable() {}
pub fn disable() {} pub fn disable() {}
@ -317,6 +323,8 @@ mod internal {
pub fn subscriptions_tracked(_amount: usize) {} pub fn subscriptions_tracked(_amount: usize) {}
pub fn layers_rendered(_amount: impl FnOnce() -> usize) {}
pub fn boot() -> Span { pub fn boot() -> Span {
Span Span
} }

View file

@ -27,6 +27,16 @@ pub struct Layer {
} }
impl Layer { impl Layer {
pub fn is_empty(&self) -> bool {
self.quads.is_empty()
&& self.triangles.is_empty()
&& self.primitives.is_empty()
&& self.images.is_empty()
&& self.text.is_empty()
&& self.pending_meshes.is_empty()
&& self.pending_text.is_empty()
}
pub fn draw_quad( pub fn draw_quad(
&mut self, &mut self,
quad: renderer::Quad, quad: renderer::Quad,

View file

@ -604,6 +604,18 @@ impl Renderer {
} }
let _ = ManuallyDrop::into_inner(render_pass); let _ = ManuallyDrop::into_inner(render_pass);
debug::layers_rendered(|| {
self.layers
.iter()
.filter(|layer| {
!layer.is_empty()
&& physical_bounds
.intersection(&(layer.bounds * scale_factor))
.is_some_and(|viewport| viewport.snap().is_some())
})
.count()
});
} }
} }