An overview of the new logs
```
14:37:40.365Z TRACE update_new_widgets:RootWidget{id=#165}: masonry::passes::update: RootWidget received Update::WidgetAdded
14:37:40.365Z TRACE update_new_widgets:RootWidget{id=#165}:Flex{id=#164}: masonry::passes::update: Flex received Update::WidgetAdded
14:37:40.365Z TRACE update_new_widgets:RootWidget{id=#165}:Flex{id=#164}:Flex{id=#8}: masonry::passes::update: Flex received Update::WidgetAdded
14:37:40.365Z TRACE update_new_widgets:RootWidget{id=#165}:Flex{id=#164}:Flex{id=#8}:SizedBox{id=#7}: masonry::passes::update: SizedBox received Update::WidgetAdded
14:37:40.365Z TRACE update_new_widgets:RootWidget{id=#165}:Flex{id=#164}:Flex{id=#8}:SizedBox{id=#7}:Flex{id=#6}: masonry::passes::update: Flex received Update::WidgetAdded
14:37:40.365Z TRACE update_new_widgets:RootWidget{id=#165}:Flex{id=#164}:Flex{id=#8}:SizedBox{id=#7}:Flex{id=#6}:Flex{id=#3}: masonry::passes::update: Flex received Update::WidgetAdded
14:37:40.365Z TRACE update_new_widgets:RootWidget{id=#165}:Flex{id=#164}:Flex{id=#8}:SizedBox{id=#7}:Flex{id=#6}:Flex{id=#3}:Prose{id=#1}: masonry::passes::update: Prose received Update::WidgetAdded
14:37:40.365Z TRACE update_new_widgets:RootWidget{id=#165}:Flex{id=#164}:Flex{id=#8}:SizedBox{id=#7}:Flex{id=#6}:Flex{id=#3}:Label{id=#2}: masonry::passes::update: Label received Update::WidgetAdded
14:37:40.365Z TRACE update_new_widgets:RootWidget{id=#165}:Flex{id=#164}:Flex{id=#8}:SizedBox{id=#7}:Flex{id=#6}:Flex{id=#5}: masonry::passes::update: Flex received Update::WidgetAdded
14:37:40.365Z TRACE update_new_widgets:RootWidget{id=#165}:Flex{id=#164}:Flex{id=#8}:SizedBox{id=#7}:Flex{id=#6}:Flex{id=#5}:VariableLabel{id=#4}: masonry::passes::update: VariableLabel received Update::WidgetAdded
14:37:40.365Z TRACE update_new_widgets:RootWidget{id=#165}:Flex{id=#164}:Flex{id=#17}: masonry::passes::update: Flex received Update::WidgetAdded
14:37:40.365Z TRACE update_new_widgets:RootWidget{id=#165}:Flex{id=#164}:Flex{id=#17}:Button{id=#10}: masonry::passes::update: Button received Update::WidgetAdded
14:37:40.365Z TRACE update_new_widgets:RootWidget{id=#165}:Flex{id=#164}:Flex{id=#17}:Button{id=#10}:Label{id=#9}: masonry::passes::update: Label received Update::WidgetAdded
14:37:40.365Z TRACE update_new_widgets:RootWidget{id=#165}:Flex{id=#164}:Flex{id=#17}:Button{id=#12}: masonry::passes::update: Button received Update::WidgetAdded
14:37:40.365Z TRACE update_new_widgets:RootWidget{id=#165}:Flex{id=#164}:Flex{id=#17}:Button{id=#12}:Label{id=#11}: masonry::passes::update: Label received Update::WidgetAdded
14:37:40.365Z TRACE update_new_widgets:RootWidget{id=#165}:Flex{id=#164}:Flex{id=#17}:Button{id=#14}: masonry::passes::update: Button received Update::WidgetAdded
14:37:40.365Z TRACE update_new_widgets:RootWidget{id=#165}:Flex{id=#164}:Flex{id=#17}:Button{id=#14}:Label{id=#13}: masonry::passes::update: Label received Update::WidgetAdded
14:37:40.365Z TRACE update_new_widgets:RootWidget{id=#165}:Flex{id=#164}:Flex{id=#17}:Button{id=#16}: masonry::passes::update: Button received Update::WidgetAdded
14:37:40.365Z TRACE update_new_widgets:RootWidget{id=#165}:Flex{id=#164}:Flex{id=#17}:Button{id=#16}:Label{id=#15}: masonry::passes::update: Label received Update::WidgetAdded
14:37:40.365Z TRACE update_new_widgets:RootWidget{id=#165}:Flex{id=#164}:Portal{id=#163}: masonry::passes::update: Portal received Update::WidgetAdded
14:37:40.365Z TRACE update_new_widgets:RootWidget{id=#165}:Flex{id=#164}:Portal{id=#163}:Flex{id=#160}: masonry::passes::update: Flex received Update::WidgetAdded
14:37:40.365Z TRACE update_new_widgets:RootWidget{id=#165}:Flex{id=#164}:Portal{id=#163}:Flex{id=#160}:SizedBox{id=#24}: masonry::passes::update: SizedBox received Update::WidgetAdded
14:37:40.365Z TRACE update_new_widgets:RootWidget{id=#165}:Flex{id=#164}:Portal{id=#163}:Flex{id=#160}:SizedBox{id=#24}:Flex{id=#23}: masonry::passes::update: Flex received Update::WidgetAdded
14:37:40.365Z TRACE update_new_widgets:RootWidget{id=#165}:Flex{id=#164}:Portal{id=#163}:Flex{id=#160}:SizedBox{id=#24}:Flex{id=#23}:Flex{id=#20}: masonry::passes::update: Flex received Update::WidgetAdded
14:37:40.365Z TRACE update_new_widgets:RootWidget{id=#165}:Flex{id=#164}:Portal{id=#163}:Flex{id=#160}:SizedBox{id=#24}:Flex{id=#23}:Flex{id=#20}:Prose{id=#18}: masonry::passes::update: Prose received Update::WidgetAdded
14:37:40.365Z TRACE update_new_widgets:RootWidget{id=#165}:Flex{id=#164}:Portal{id=#163}:Flex{id=#160}:SizedBox{id=#24}:Flex{id=#23}:Flex{id=#20}:Label{id=#19}: masonry::passes::update: Label received Update::WidgetAdded
14:37:40.365Z TRACE update_new_widgets:RootWidget{id=#165}:Flex{id=#164}:Portal{id=#163}:Flex{id=#160}:SizedBox{id=#24}:Flex{id=#23}:Flex{id=#22}: masonry::passes::update: Flex received Update::WidgetAdded
14:37:40.365Z TRACE update_new_widgets:RootWidget{id=#165}:Flex{id=#164}:Portal{id=#163}:Flex{id=#160}:SizedBox{id=#24}:Flex{id=#23}:Flex{id=#22}:VariableLabel{id=#21}: masonry::passes::update: VariableLabel received Update::WidgetAdded
14:37:40.365Z TRACE update_new_widgets:RootWidget{id=#165}:Flex{id=#164}:Portal{id=#163}:Flex{id=#160}:SizedBox{id=#31}: masonry::passes::update: SizedBox received Update::WidgetAdded
```
This was originally an experiment into caching spans, but I determined
that was non-viable due to the pass names.
---
masonry/examples/calc_masonry.rs | 8 ++---
masonry/examples/custom_widget.rs | 7 +++--
masonry/src/passes/accessibility.rs | 12 +++++---
masonry/src/passes/anim.rs | 13 +++++----
masonry/src/passes/compose.rs | 12 ++++----
masonry/src/passes/event.rs | 31 +++++++++++---------
masonry/src/passes/layout.rs | 9 ++++--
masonry/src/passes/mod.rs | 42 +++++++++++++++++++++++++--
masonry/src/passes/paint.rs | 5 ++--
masonry/src/passes/update.rs | 12 ++++----
masonry/src/testing/helper_widgets.rs | 8 ++---
masonry/src/widget/align.rs | 8 ++---
masonry/src/widget/button.rs | 6 ++--
masonry/src/widget/checkbox.rs | 6 ++--
masonry/src/widget/flex.rs | 6 ++--
masonry/src/widget/grid.rs | 6 ++--
masonry/src/widget/image.rs | 26 ++++++++++-------
masonry/src/widget/label.rs | 6 ++--
masonry/src/widget/portal.rs | 6 ++--
masonry/src/widget/progress_bar.rs | 6 ++--
masonry/src/widget/prose.rs | 4 +--
masonry/src/widget/root_widget.rs | 6 ++--
masonry/src/widget/scroll_bar.rs | 7 +++--
masonry/src/widget/sized_box.rs | 6 ++--
masonry/src/widget/spinner.rs | 7 +++--
masonry/src/widget/split.rs | 4 +--
masonry/src/widget/textbox.rs | 4 +--
masonry/src/widget/variable_label.rs | 6 ++--
masonry/src/widget/widget.rs | 19 +++++++++---
xilem/src/any_view.rs | 6 ++--
30 files changed, 189 insertions(+), 115 deletions(-)
diff --git a/masonry/examples/calc_masonry.rs b/masonry/examples/calc_masonry.rs
index 543903d74..a2385e2f0 100644
--- a/masonry/examples/calc_masonry.rs
+++ b/masonry/examples/calc_masonry.rs
@@ -17,8 +17,8 @@ use masonry::dpi::LogicalSize;
use masonry::widget::{Align, CrossAxisAlignment, Flex, Label, RootWidget, SizedBox};
use masonry::{
AccessCtx, AccessEvent, Action, AppDriver, BoxConstraints, Color, DriverCtx, EventCtx,
- LayoutCtx, PaintCtx, Point, PointerEvent, RegisterCtx, Size, TextEvent, Update, UpdateCtx,
- Widget, WidgetId, WidgetPod,
+ LayoutCtx, PaintCtx, Point, PointerEvent, QueryCtx, RegisterCtx, Size, TextEvent, Update,
+ UpdateCtx, Widget, WidgetId, WidgetPod,
};
use smallvec::{smallvec, SmallVec};
use tracing::{trace, trace_span, Span};
@@ -244,8 +244,8 @@ impl Widget for CalcButton {
smallvec![self.inner.id()]
}
- fn make_trace_span(&self) -> Span {
- trace_span!("CalcButton")
+ fn make_trace_span(&self, ctx: &QueryCtx<'_>) -> Span {
+ trace_span!("CalcButton", id = ctx.widget_id().trace())
}
}
diff --git a/masonry/examples/custom_widget.rs b/masonry/examples/custom_widget.rs
index 7d3508b57..49b52e09f 100644
--- a/masonry/examples/custom_widget.rs
+++ b/masonry/examples/custom_widget.rs
@@ -15,7 +15,8 @@ use masonry::kurbo::{BezPath, Stroke};
use masonry::widget::{ObjectFit, RootWidget};
use masonry::{
AccessCtx, AccessEvent, Action, Affine, AppDriver, BoxConstraints, Color, DriverCtx, EventCtx,
- LayoutCtx, PaintCtx, Point, PointerEvent, Rect, RegisterCtx, Size, TextEvent, Widget, WidgetId,
+ LayoutCtx, PaintCtx, Point, PointerEvent, QueryCtx, Rect, RegisterCtx, Size, TextEvent, Widget,
+ WidgetId,
};
use parley::layout::Alignment;
use parley::style::{FontFamily, FontStack, StyleProperty};
@@ -139,8 +140,8 @@ impl Widget for CustomWidget {
SmallVec::new()
}
- fn make_trace_span(&self) -> Span {
- trace_span!("CustomWidget")
+ fn make_trace_span(&self, ctx: &QueryCtx<'_>) -> Span {
+ trace_span!("CustomWidget", id = ctx.widget_id().trace())
}
}
diff --git a/masonry/src/passes/accessibility.rs b/masonry/src/passes/accessibility.rs
index cb8d82924..ef6a81756 100644
--- a/masonry/src/passes/accessibility.rs
+++ b/masonry/src/passes/accessibility.rs
@@ -10,6 +10,8 @@ use crate::render_root::{RenderRoot, RenderRootState};
use crate::tree_arena::ArenaMut;
use crate::{AccessCtx, Widget, WidgetState};
+use super::enter_span_if;
+
// --- MARK: BUILD TREE ---
fn build_accessibility_tree(
global_state: &mut RenderRootState,
@@ -19,10 +21,12 @@ fn build_accessibility_tree(
rebuild_all: bool,
scale_factor: f64,
) {
- let _span = global_state
- .trace
- .access
- .then(|| widget.item.make_trace_span().entered());
+ let _span = enter_span_if(
+ global_state.trace.access,
+ global_state,
+ widget.reborrow(),
+ state.reborrow(),
+ );
let id = state.item.id;
if !rebuild_all && !state.item.needs_accessibility {
diff --git a/masonry/src/passes/anim.rs b/masonry/src/passes/anim.rs
index f670e86b5..cd34e8ee7 100644
--- a/masonry/src/passes/anim.rs
+++ b/masonry/src/passes/anim.rs
@@ -3,7 +3,7 @@
use tracing::info_span;
-use crate::passes::recurse_on_children;
+use crate::passes::{enter_span_if, recurse_on_children};
use crate::render_root::{RenderRoot, RenderRootState};
use crate::tree_arena::ArenaMut;
use crate::{UpdateCtx, Widget, WidgetState};
@@ -15,11 +15,12 @@ fn update_anim_for_widget(
mut state: ArenaMut<'_, WidgetState>,
elapsed_ns: u64,
) {
- let _span = global_state
- .trace
- .anim
- .then(|| widget.item.make_trace_span().entered());
-
+ let _span = enter_span_if(
+ global_state.trace.anim,
+ global_state,
+ widget.reborrow(),
+ state.reborrow(),
+ );
if !state.item.needs_anim {
return;
}
diff --git a/masonry/src/passes/compose.rs b/masonry/src/passes/compose.rs
index 06f3c37cc..5ae018f80 100644
--- a/masonry/src/passes/compose.rs
+++ b/masonry/src/passes/compose.rs
@@ -4,7 +4,7 @@
use tracing::info_span;
use vello::kurbo::Vec2;
-use crate::passes::recurse_on_children;
+use crate::passes::{enter_span_if, recurse_on_children};
use crate::render_root::{RenderRoot, RenderRootSignal, RenderRootState};
use crate::tree_arena::ArenaMut;
use crate::{ComposeCtx, Widget, WidgetState};
@@ -17,10 +17,12 @@ fn compose_widget(
parent_moved: bool,
parent_translation: Vec2,
) {
- let _span = global_state
- .trace
- .compose
- .then(|| widget.item.make_trace_span().entered());
+ let _span = enter_span_if(
+ global_state.trace.compose,
+ global_state,
+ widget.reborrow(),
+ state.reborrow(),
+ );
let moved = parent_moved || state.item.translation_changed;
let translation = parent_translation + state.item.translation + state.item.origin.to_vec2();
diff --git a/masonry/src/passes/event.rs b/masonry/src/passes/event.rs
index 41be58e8f..3a9e3c23a 100644
--- a/masonry/src/passes/event.rs
+++ b/masonry/src/passes/event.rs
@@ -6,7 +6,7 @@ use tracing::{debug, info_span, trace};
use winit::event::ElementState;
use winit::keyboard::{KeyCode, PhysicalKey};
-use crate::passes::merge_state_up;
+use crate::passes::{enter_span, merge_state_up};
use crate::render_root::RenderRoot;
use crate::{AccessEvent, EventCtx, Handled, PointerEvent, TextEvent, Widget, WidgetId};
@@ -46,21 +46,24 @@ fn run_event_pass