Skip to main content

fret_ui/tree/debug/
virtual_list.rs

1use super::super::*;
2
3#[derive(Debug, Clone, Copy)]
4pub enum UiDebugVirtualListWindowSource {
5    Layout,
6    Prepaint,
7}
8
9#[derive(Debug, Clone, Copy, PartialEq, Eq)]
10pub enum UiDebugVirtualListWindowShiftKind {
11    None,
12    Prefetch,
13    Escape,
14}
15
16#[derive(Debug, Clone, Copy, PartialEq, Eq)]
17pub enum UiDebugVirtualListWindowShiftReason {
18    ScrollOffset,
19    ViewportResize,
20    ItemsRevision,
21    ScrollToItem,
22    InputsChange,
23    Unknown,
24}
25
26#[derive(Debug, Clone, Copy, PartialEq, Eq)]
27pub enum UiDebugVirtualListWindowShiftApplyMode {
28    RetainedReconcile,
29    NonRetainedRerender,
30}
31
32#[derive(Debug, Clone, Copy)]
33pub struct UiDebugVirtualListWindow {
34    pub source: UiDebugVirtualListWindowSource,
35    pub node: NodeId,
36    pub element: GlobalElementId,
37    pub axis: fret_core::Axis,
38    pub is_probe_layout: bool,
39    pub items_len: usize,
40    pub items_revision: u64,
41    pub prev_items_revision: u64,
42    pub measure_mode: crate::element::VirtualListMeasureMode,
43    pub overscan: usize,
44    pub estimate_row_height: Px,
45    pub gap: Px,
46    pub scroll_margin: Px,
47    pub viewport: Px,
48    pub prev_viewport: Px,
49    pub offset: Px,
50    pub prev_offset: Px,
51    pub content_extent: Px,
52    pub policy_key: u64,
53    pub inputs_key: u64,
54    pub window_range: Option<crate::virtual_list::VirtualRange>,
55    pub prev_window_range: Option<crate::virtual_list::VirtualRange>,
56    pub render_window_range: Option<crate::virtual_list::VirtualRange>,
57    pub deferred_scroll_to_item: bool,
58    pub deferred_scroll_consumed: bool,
59    pub window_mismatch: bool,
60    pub window_shift_kind: UiDebugVirtualListWindowShiftKind,
61    pub window_shift_reason: Option<UiDebugVirtualListWindowShiftReason>,
62    pub window_shift_apply_mode: Option<UiDebugVirtualListWindowShiftApplyMode>,
63    pub window_shift_invalidation_detail: Option<UiDebugInvalidationDetail>,
64}
65
66#[derive(Debug, Clone, Copy, PartialEq, Eq)]
67pub enum UiDebugRetainedVirtualListReconcileKind {
68    Prefetch,
69    Escape,
70}
71
72#[derive(Debug, Clone, Copy)]
73pub struct UiDebugRetainedVirtualListReconcile {
74    pub node: NodeId,
75    pub element: GlobalElementId,
76    pub reconcile_kind: UiDebugRetainedVirtualListReconcileKind,
77    /// Wall-clock time spent reconciling this retained host (including mounting/unmounting items).
78    pub reconcile_time_us: u32,
79    pub prev_items: u32,
80    pub next_items: u32,
81    pub preserved_items: u32,
82    pub attached_items: u32,
83    pub detached_items: u32,
84    /// Keep-alive bucket size before this reconcile (after loading element-local state).
85    pub keep_alive_pool_len_before: u32,
86    /// Number of items that were re-attached from the retained keep-alive bucket instead of being
87    /// mounted from scratch.
88    pub reused_from_keep_alive_items: u32,
89    /// Number of detached items that were retained in the keep-alive bucket after the reconcile.
90    pub kept_alive_items: u32,
91    /// Number of items evicted from the keep-alive bucket due to budget.
92    pub evicted_keep_alive_items: u32,
93    /// Keep-alive bucket size after this reconcile (after applying detach/evict updates).
94    pub keep_alive_pool_len_after: u32,
95}
96
97#[derive(Debug, Clone, Copy, PartialEq, Eq)]
98pub enum UiDebugPrepaintActionKind {
99    Invalidate,
100    RequestRedraw,
101    RequestAnimationFrame,
102    VirtualListWindowShift,
103    ChartSamplingWindowShift,
104    NodeGraphCullWindowShift,
105}
106
107#[derive(Debug, Clone, Copy)]
108pub struct UiDebugPrepaintAction {
109    pub node: NodeId,
110    pub target: Option<NodeId>,
111    pub kind: UiDebugPrepaintActionKind,
112    pub invalidation: Option<Invalidation>,
113    pub element: Option<GlobalElementId>,
114    pub virtual_list_window_shift_kind: Option<UiDebugVirtualListWindowShiftKind>,
115    pub virtual_list_window_shift_reason: Option<UiDebugVirtualListWindowShiftReason>,
116    pub chart_sampling_window_key: Option<u64>,
117    pub node_graph_cull_window_key: Option<u64>,
118    pub frame_id: FrameId,
119}
120
121#[derive(Debug, Clone, Copy)]
122pub struct UiDebugVirtualListWindowShiftSample {
123    pub frame_id: FrameId,
124    pub source: UiDebugVirtualListWindowSource,
125    pub node: NodeId,
126    pub element: GlobalElementId,
127    pub window_shift_kind: UiDebugVirtualListWindowShiftKind,
128    pub window_shift_reason: UiDebugVirtualListWindowShiftReason,
129    pub window_shift_apply_mode: UiDebugVirtualListWindowShiftApplyMode,
130    pub window_shift_invalidation_detail: Option<UiDebugInvalidationDetail>,
131    pub prev_window_range: Option<crate::virtual_list::VirtualRange>,
132    pub window_range: Option<crate::virtual_list::VirtualRange>,
133    pub render_window_range: Option<crate::virtual_list::VirtualRange>,
134}