mirror of
https://github.com/zed-industries/zed.git
synced 2024-11-07 20:39:04 +03:00
Add profiling information for compute_layout
This commit is contained in:
parent
45d08c70f0
commit
79ad5c08e4
@ -66,11 +66,62 @@ impl TaffyLayoutEngine {
|
||||
.into())
|
||||
}
|
||||
|
||||
fn count_all_children(&self, parent: LayoutId) -> Result<u32> {
|
||||
let mut count = 0;
|
||||
|
||||
for child in self.taffy.children(parent.0)? {
|
||||
// Count this child.
|
||||
count += 1;
|
||||
|
||||
// Count all of this child's children.
|
||||
count += self.count_all_children(LayoutId(child))?
|
||||
}
|
||||
|
||||
Ok(count)
|
||||
}
|
||||
|
||||
fn max_depth(&self, depth: u32, parent: LayoutId) -> Result<u32> {
|
||||
println!(
|
||||
"{parent:?} at depth {depth} has {} children",
|
||||
self.taffy.child_count(parent.0)?
|
||||
);
|
||||
|
||||
let mut max_child_depth = 0;
|
||||
|
||||
for child in self.taffy.children(parent.0)? {
|
||||
max_child_depth = std::cmp::max(max_child_depth, self.max_depth(0, LayoutId(child))?);
|
||||
}
|
||||
|
||||
Ok(depth + 1 + max_child_depth)
|
||||
}
|
||||
|
||||
fn get_edges(&self, parent: LayoutId) -> Result<Vec<(LayoutId, LayoutId)>> {
|
||||
let mut edges = Vec::new();
|
||||
|
||||
for child in self.taffy.children(parent.0)? {
|
||||
edges.push((parent, LayoutId(child)));
|
||||
|
||||
edges.extend(self.get_edges(LayoutId(child))?);
|
||||
}
|
||||
|
||||
Ok(edges)
|
||||
}
|
||||
|
||||
pub fn compute_layout(
|
||||
&mut self,
|
||||
id: LayoutId,
|
||||
available_space: Size<AvailableSpace>,
|
||||
) -> Result<()> {
|
||||
println!("Laying out {} children", self.count_all_children(id)?);
|
||||
println!("Max layout depth: {}", self.max_depth(0, id)?);
|
||||
|
||||
// Output the edges (branches) of the tree in Mermaid format for visualization.
|
||||
// println!("Edges:");
|
||||
// for (a, b) in self.get_edges(id)? {
|
||||
// println!("N{} --> N{}", u64::from(a), u64::from(b));
|
||||
// }
|
||||
// println!("");
|
||||
|
||||
self.taffy
|
||||
.compute_layout(id.into(), available_space.into())?;
|
||||
Ok(())
|
||||
|
@ -401,9 +401,11 @@ impl<'a, 'w> WindowContext<'a, 'w> {
|
||||
let (root_layout_id, mut frame_state) = root_view.layout(&mut (), cx)?;
|
||||
let available_space = cx.window.content_size.map(Into::into);
|
||||
|
||||
let started_at = std::time::Instant::now();
|
||||
cx.window
|
||||
.layout_engine
|
||||
.compute_layout(root_layout_id, available_space)?;
|
||||
println!("compute_layout took {:?}", started_at.elapsed());
|
||||
let layout = cx.window.layout_engine.layout(root_layout_id)?;
|
||||
|
||||
root_view.paint(layout, &mut (), &mut frame_state, cx)?;
|
||||
|
Loading…
Reference in New Issue
Block a user