From 43c94d34457965ae221947a2986a265c428dfff2 Mon Sep 17 00:00:00 2001 From: tigercosmos Date: Fri, 22 Dec 2017 16:21:32 +0800 Subject: [PATCH] pretty print tree --- components/gfx_traits/print_tree.rs | 34 ++++++++++++++++++++++++----- components/layout/block.rs | 2 +- components/layout/flow.rs | 13 ++++++----- components/layout/fragment.rs | 8 +++---- 4 files changed, 42 insertions(+), 15 deletions(-) diff --git a/components/gfx_traits/print_tree.rs b/components/gfx_traits/print_tree.rs index a842193e03f3..e347c82bed99 100644 --- a/components/gfx_traits/print_tree.rs +++ b/components/gfx_traits/print_tree.rs @@ -22,12 +22,21 @@ impl PrintTree { } } - /// Descend one level in the tree with the given title. - pub fn new_level(&mut self, title: String) { + /// Descend one level in the tree with the given title string. + pub fn new_level(&mut self, queued_title: String) { self.flush_queued_item("\u{251C}\u{2500}"); self.print_level_prefix(); - println!("\u{251C}\u{2500} {}", title); + + let items: Vec<&str> = queued_title.split("\n").collect(); + println!("\u{251C}\u{2500} {}", items[0]); + for i in 1..items.len() { + self.print_level_child_indentation(); + print!("{}", items[i]); + if i < items.len() { + print!("\n"); + } + } self.level = self.level + 1; } @@ -35,7 +44,7 @@ impl PrintTree { /// Ascend one level in the tree. pub fn end_level(&mut self) { self.flush_queued_item("\u{2514}\u{2500}"); - self.level = self.level - 1; + self.level -= 1; } /// Add an item to the current level in the tree. @@ -50,10 +59,25 @@ impl PrintTree { } } + fn print_level_child_indentation(&self) { + for _ in 0..(self.level + 1) { + print!("\u{2502} "); + } + print!("{}", " ".repeat(7)); + } + fn flush_queued_item(&mut self, prefix: &str) { if let Some(queued_item) = self.queued_item.take() { self.print_level_prefix(); - println!("{} {}", prefix, queued_item); + let items: Vec<&str> = queued_item.split("\n").collect(); + println!("{} {}", prefix, items[0]); + for i in 1..items.len() { + self.print_level_child_indentation(); + print!("{}", items[i]); + if i < items.len() { + print!("\n"); + } + } } } } diff --git a/components/layout/block.rs b/components/layout/block.rs index f615c5aa4698..1f01327a160f 100644 --- a/components/layout/block.rs +++ b/components/layout/block.rs @@ -2191,7 +2191,7 @@ impl Flow for BlockFlow { } fn print_extra_flow_children(&self, print_tree: &mut PrintTree) { - print_tree.add_item(format!("↑↑ Fragment for block: {:?}", self.fragment)); + print_tree.add_item(format!("↑↑ Fragment for block:{:?}", self.fragment)); } } diff --git a/components/layout/flow.rs b/components/layout/flow.rs index c706516933b8..e4b19e20b0c1 100644 --- a/components/layout/flow.rs +++ b/components/layout/flow.rs @@ -925,26 +925,29 @@ impl fmt::Debug for BaseFlow { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { let child_count = self.parallel.children_count.load(Ordering::SeqCst); let child_count_string = if child_count > 0 { - format!(" children={}", child_count) + format!("\nchildren={}", child_count) } else { "".to_owned() }; let absolute_descendants_string = if self.abs_descendants.len() > 0 { - format!(" abs-descendents={}", self.abs_descendants.len()) + format!("\nabs-descendents={}", self.abs_descendants.len()) } else { "".to_owned() }; let damage_string = if self.restyle_damage != RestyleDamage::empty() { - format!(" damage={:?}", self.restyle_damage) + format!("\ndamage={:?}", self.restyle_damage) } else { "".to_owned() }; write!(f, - "sc={:?} pos={:?}, {}{} floatspec-in={:?}, floatspec-out={:?}, \ - overflow={:?}{}{}{}", + "\nsc={:?}\ + \npos={:?}{}{}\ + \nfloatspec-in={:?}\ + \nfloatspec-out={:?}\ + \noverflow={:?}{}{}{}", self.stacking_context_id, self.position, if self.flags.contains(FlowFlags::FLOATS_LEFT) { "FL" } else { "" }, diff --git a/components/layout/fragment.rs b/components/layout/fragment.rs index b2a627347da7..0b78fb86475f 100644 --- a/components/layout/fragment.rs +++ b/components/layout/fragment.rs @@ -2958,24 +2958,24 @@ impl Fragment { impl fmt::Debug for Fragment { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { let border_padding_string = if !self.border_padding.is_zero() { - format!(" border_padding={:?}", self.border_padding) + format!("\nborder_padding={:?}", self.border_padding) } else { "".to_owned() }; let margin_string = if !self.margin.is_zero() { - format!(" margin={:?}", self.margin) + format!("\nmargin={:?}", self.margin) } else { "".to_owned() }; let damage_string = if self.restyle_damage != RestyleDamage::empty() { - format!(" damage={:?}", self.restyle_damage) + format!("\ndamage={:?}", self.restyle_damage) } else { "".to_owned() }; - write!(f, "{}({}) [{:?}] border_box={:?}{}{}{}", + write!(f, "\n{}({}) [{:?}]\nborder_box={:?}{}{}{}", self.specific.get_type(), self.debug_id, self.specific,