Skip to main content

roll_up_frame_dirty

Function roll_up_frame_dirty 

Source
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:

  1. 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-component Changed<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.
  2. 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 onto crate::property_store::PropertyStore notify.
  3. Viewport resource change.
  4. Child-set mutations: Added<Visible> (newly-spawned / newly-hidden entities - fixes the FrameDirty ignores child-set mutations audit bug in renderer.md:86) and RemovedComponents<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.