pub fn roll_up_frame_dirty(
fd: ResMut<'_, FrameDirty>,
viewport: Res<'_, Viewport>,
property_store: Option<Res<'_, PropertyStore>>,
component_changed: Query<'_, '_, (), Or<(Changed<Transform>, Changed<Visuals>, Changed<TextStyle>, Changed<TextContent>, Changed<TextInput>, Changed<TextInputScroll>, Changed<Opacity>, Changed<Visible>, Changed<LumenClasses>, Changed<ScrollbarState>, Changed<EchoMode>, Added<EchoMode>, Added<Visible>)>>,
removed_childof: RemovedComponents<'_, '_, ChildOf>,
trace: (Query<'_, '_, Entity, Changed<Transform>>, Query<'_, '_, Entity, Changed<Visuals>>, Query<'_, '_, Entity, Changed<TextStyle>>, Query<'_, '_, Entity, Changed<TextContent>>, Query<'_, '_, Entity, Changed<TextInput>>, Query<'_, '_, Entity, Changed<TextInputScroll>>, Query<'_, '_, Entity, Changed<Opacity>>, Query<'_, '_, Entity, Changed<Visible>>, Query<'_, '_, Entity, Changed<LumenClasses>>, Query<'_, '_, Entity, Changed<ScrollbarState>>),
)Expand description
Rolls up render-relevant change signals into FrameDirty.
Runs each tick in crate::tick::TickStage::A11ySync; the window backend reads the flag right before encoding and clears it after submission.
Sources, in order of preference:
crate::property_store::PropertyStore::dirty_peek- the typed notify queue. Any global / entity property write since the last tick flips dirty. This is the long-term replacement for the per-componentChanged<T>filters; wave 1 reads the queue so newly-installed bindable components (typed signals, theme, custom properties) flip dirty without needing a Query column here.Changed<T>filters on the legacy render-relevant components (Transform,Visuals,TextStyle,TextContent,TextInput(caret / selection moves),TextInputScroll,Opacity,Visible,crate::components::LumenClasses). Kept until the wave 2 migration moves these ontocrate::property_store::PropertyStorenotify.Viewportresource change.- Child-set mutations:
Added<Visible>(newly-spawned / newly-hidden entities - fixes theFrameDirty ignores child-set mutationsaudit bug inrenderer.md:86) andRemovedComponents<ChildOf>(despawn / reparent - same bug).
dirty_peek is non-destructive; downstream observer systems remain free to drain_dirty later in the tick.
Set LUMEN_TRACE_FRAME_DIRTY=1 to log which source raised the flag each
tick (stderr) - the tool for hunting “app never idles” regressions.