commit 810b4c19901a823a38513a3feb64c64574577207 parent 4c867f9fc245065793ee96b88498de5aa32ff315 Author: kernelkind <kernelkind@gmail.com> Date: Tue, 30 Sep 2025 19:44:07 -0400 profiling: add more profile markup Signed-off-by: kernelkind <kernelkind@gmail.com> Diffstat:
10 files changed, 30 insertions(+), 3 deletions(-)
diff --git a/crates/notedeck_chrome/src/app.rs b/crates/notedeck_chrome/src/app.rs @@ -14,6 +14,7 @@ pub enum NotedeckApp { } impl notedeck::App for NotedeckApp { + #[profiling::function] fn update(&mut self, ctx: &mut AppContext, ui: &mut egui::Ui) -> AppResponse { match self { NotedeckApp::Dave(dave) => dave.update(ctx, ui), diff --git a/crates/notedeck_chrome/src/chrome.rs b/crates/notedeck_chrome/src/chrome.rs @@ -82,6 +82,7 @@ impl ChromePanelAction { }; } + #[profiling::function] fn process(&self, ctx: &mut AppContext, chrome: &mut Chrome, ui: &mut egui::Ui) { match self { Self::SaveTheme(theme) => { @@ -199,6 +200,7 @@ impl Chrome { } /// The chrome side panel + #[profiling::function] fn panel( &mut self, app_ctx: &mut AppContext, @@ -269,6 +271,7 @@ impl Chrome { /// /// The side menu should hover over the screen, while the side bar /// is collapsible but persistent on the screen. + #[profiling::function] fn show(&mut self, ctx: &mut AppContext, ui: &mut egui::Ui) -> Option<ChromePanelAction> { ui.spacing_mut().item_spacing.x = 0.0; diff --git a/crates/notedeck_columns/src/app.rs b/crates/notedeck_columns/src/app.rs @@ -98,6 +98,7 @@ fn handle_egui_events(input: &egui::InputState, columns: &mut Columns) { } } +#[profiling::function] fn try_process_event( damus: &mut Damus, app_ctx: &mut AppContext<'_>, @@ -117,6 +118,7 @@ fn try_process_event( // NOTE: we don't use the while let loop due to borrow issues #[allow(clippy::while_let_loop)] loop { + profiling::scope!("receiving events"); let ev = if let Some(ev) = app_ctx.pool.try_recv() { ev.into_owned() } else { @@ -203,6 +205,7 @@ fn unknown_id_send(unknown_ids: &mut UnknownIds, pool: &mut RelayPool) { pool.send(&msg); } +#[profiling::function] fn update_damus(damus: &mut Damus, app_ctx: &mut AppContext<'_>, ctx: &egui::Context) { app_ctx.img_cache.urls.cache.handle_io(); @@ -945,6 +948,7 @@ fn timelines_view( } impl notedeck::App for Damus { + #[profiling::function] fn update(&mut self, ctx: &mut AppContext<'_>, ui: &mut egui::Ui) -> AppResponse { /* self.app diff --git a/crates/notedeck_columns/src/nav.rs b/crates/notedeck_columns/src/nav.rs @@ -208,6 +208,7 @@ impl RenderNavResponse { } #[must_use = "Make sure to save columns if result is true"] + #[profiling::function] pub fn process_render_nav_response( self, app: &mut Damus, @@ -1019,6 +1020,7 @@ impl<R> BodyResponse<R> { } #[must_use = "RenderNavResponse must be handled by calling .process_render_nav_response(..)"] +#[profiling::function] pub fn render_nav( col: usize, inner_rect: egui::Rect, diff --git a/crates/notedeck_columns/src/timeline/mod.rs b/crates/notedeck_columns/src/timeline/mod.rs @@ -446,6 +446,7 @@ impl Timeline { Ok(()) } + #[profiling::function] pub fn poll_notes_into_view( &mut self, ndb: &Ndb, diff --git a/crates/notedeck_columns/src/toolbar.rs b/crates/notedeck_columns/src/toolbar.rs @@ -7,6 +7,7 @@ use crate::{ }; // TODO(kernelkind): should account for mutes +#[profiling::function] pub fn unseen_notification( columns: &mut Damus, ndb: &nostrdb::Ndb, @@ -21,11 +22,19 @@ pub fn unseen_notification( let freshness = &mut tl.current_view_mut().freshness; freshness.update(|timestamp_last_viewed| { - let filter = crate::timeline::kind::notifications_filter(¤t_pk) - .since_mut(timestamp_last_viewed); + profiling::scope!("NotesFreshness::update closure"); + let filter = { + profiling::scope!("NotesFreshness::update filter instantiation"); + crate::timeline::kind::notifications_filter(¤t_pk) + .since_mut(timestamp_last_viewed) + }; let txn = Transaction::new(ndb).expect("txn"); - let Some(res) = ndb.query(&txn, &[filter], 1).ok() else { + let Some(res) = { + profiling::scope!("NoteFreshness::update Ndb::query"); + ndb.query(&txn, &[filter], 1) + } + .ok() else { return false; }; diff --git a/crates/notedeck_columns/src/ui/timeline.rs b/crates/notedeck_columns/src/ui/timeline.rs @@ -86,6 +86,7 @@ impl<'a, 'd> TimelineView<'a, 'd> { } #[allow(clippy::too_many_arguments)] +#[profiling::function] fn timeline_ui( ui: &mut egui::Ui, timeline_id: &TimelineKind, @@ -679,6 +680,7 @@ fn repost_description( } } +#[profiling::function] fn render_note( ui: &mut egui::Ui, note_context: &mut NoteContext, @@ -701,6 +703,7 @@ fn render_note( } #[allow(clippy::too_many_arguments)] +#[profiling::function] fn render_reaction_cluster( ui: &mut egui::Ui, note_context: &mut NoteContext, @@ -946,6 +949,7 @@ struct PfpsResponse { } #[allow(clippy::too_many_arguments)] +#[profiling::function] fn render_repost_cluster( ui: &mut egui::Ui, note_context: &mut NoteContext, diff --git a/crates/notedeck_columns/src/ui/toolbar.rs b/crates/notedeck_columns/src/ui/toolbar.rs @@ -3,6 +3,7 @@ use notedeck_ui::icons::{home_button, notifications_button}; use crate::{toolbar::ToolbarAction, ui::side_panel::search_button_impl, Damus}; +#[profiling::function] pub fn toolbar(ui: &mut egui::Ui, unseen_notification: bool) -> Option<ToolbarAction> { use egui_tabs::{TabColor, Tabs}; diff --git a/crates/notedeck_ui/src/note/media.rs b/crates/notedeck_ui/src/note/media.rs @@ -26,6 +26,7 @@ pub enum MediaViewAction { } #[allow(clippy::too_many_arguments)] +#[profiling::function] pub fn image_carousel( ui: &mut egui::Ui, img_cache: &mut Images, diff --git a/crates/notedeck_ui/src/profile/picture.rs b/crates/notedeck_ui/src/profile/picture.rs @@ -18,6 +18,7 @@ pub struct ProfilePic<'cache, 'url> { } impl egui::Widget for &mut ProfilePic<'_, '_> { + #[profiling::function] fn ui(self, ui: &mut egui::Ui) -> egui::Response { let inner = render_pfp( ui,