pub struct LayoutCache {
pub safe_area: SafeArea,
pub delta_time: f32,
pub scale_factor: f32,
pub viewport: Option<Rect>,
pub layout_time_budget: Duration,
pub layout_start_time: Option<Instant>,
pub parent_map: HashMap<u64, u64>,
pub engine: Option<Box<dyn Any + Send + Sync>>,
pub animators: Option<Box<dyn Any + Send + Sync>>,
pub previous_rects: HashMap<u64, Rect>,
pub eviction_generation: u64,
pub previous_rects_generation: HashMap<u64, u64>,
/* private fields */
}Fields§
§safe_area: SafeArea§delta_time: f32§scale_factor: f32Device scale factor for HiDPI / retina snapping. Defaults to 1.0.
viewport: Option<Rect>The visible viewport bounds in logical pixels. If Some, layout execution can cull offscreen subtrees.
layout_time_budget: DurationTime budget for the layout pass. Defaults to 4.0ms.
layout_start_time: Option<Instant>Start of the layout pass, captured at the beginning of the frame/layout run.
parent_map: HashMap<u64, u64>Map tracking child-to-parent view hash relationships for bottom-up invalidation.
engine: Option<Box<dyn Any + Send + Sync>>Opaque pointer to the active layout engine (e.g. Taffy)
animators: Option<Box<dyn Any + Send + Sync>>Opaque pointer to the active animation orchestrator
previous_rects: HashMap<u64, Rect>Cached previous rects for view transitions
eviction_generation: u64Generation counter for cache eviction. Incremented each frame; entries not touched for N frames are evicted.
previous_rects_generation: HashMap<u64, u64>Tracks which generation each previous_rects entry was last touched in.
Implementations§
Source§impl LayoutCache
impl LayoutCache
pub fn new() -> Self
Sourcepub fn generation(&self) -> u64
pub fn generation(&self) -> u64
Returns the current generation counter.
Sourcepub fn evict_stale_entries(&mut self)
pub fn evict_stale_entries(&mut self)
Evict entries from previous_rects that haven’t been touched for N generations.
Sourcepub fn is_over_budget(&self) -> bool
pub fn is_over_budget(&self) -> bool
Checks if the layout pass is currently running over its allocated time budget.
Sourcepub fn set_layout_budget_deadline(deadline: Option<Instant>)
pub fn set_layout_budget_deadline(deadline: Option<Instant>)
Set a process-local deadline for layout cache consumers. When this deadline is exceeded, caches should reuse previous rects instead of recomputing expensive layout work.
Sourcepub fn clear_layout_budget_deadline()
pub fn clear_layout_budget_deadline()
Clear any process-local layout budget deadline.
Sourcepub fn invalidate(&mut self)
pub fn invalidate(&mut self)
Bump the generation counter, logically invalidating all cached entries without eagerly clearing them. Subsequent lookups with the old generation will miss until re-populated.
Sourcepub fn is_valid(&self, key: LayoutKey, current_gen: u64) -> bool
pub fn is_valid(&self, key: LayoutKey, current_gen: u64) -> bool
Check whether a cached entry for the given key is still valid against the current generation.
pub fn clear(&mut self)
pub fn get_size(&self, view_hash: u64, proposal: SizeProposal) -> Option<Size>
pub fn set_size(&mut self, view_hash: u64, proposal: SizeProposal, size: Size)
Sourcepub fn register_parent(&mut self, child_hash: u64, parent_hash: u64)
pub fn register_parent(&mut self, child_hash: u64, parent_hash: u64)
Register a child-to-parent layout relationship for bottom-up invalidation propagation.
Sourcepub fn invalidate_view(&mut self, view_hash: u64)
pub fn invalidate_view(&mut self, view_hash: u64)
Remove all cached size entries for a specific view hash and propagate the invalidation bottom-up to all its layout ancestors to ensure consistent layout updates.
Trait Implementations§
Auto Trait Implementations§
impl !RefUnwindSafe for LayoutCache
impl !UnwindSafe for LayoutCache
impl Freeze for LayoutCache
impl Send for LayoutCache
impl Sync for LayoutCache
impl Unpin for LayoutCache
impl UnsafeUnpin for LayoutCache
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.