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 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 pub keep_alive_pool_len_before: u32,
86 pub reused_from_keep_alive_items: u32,
89 pub kept_alive_items: u32,
91 pub evicted_keep_alive_items: u32,
93 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}