diff --git a/components/layout/layout_task.rs b/components/layout/layout_task.rs index db47f9e5801b..749510c56d5b 100644 --- a/components/layout/layout_task.rs +++ b/components/layout/layout_task.rs @@ -30,6 +30,7 @@ use gfx::render_task::{RenderInitMsg, RenderChan, RenderLayer}; use gfx::{render_task, color}; use layout_traits; use layout_traits::{LayoutControlMsg, LayoutTaskFactory}; +use log; use script::dom::bindings::js::JS; use script::dom::node::{ElementNodeTypeId, LayoutDataRef, Node}; use script::dom::element::{HTMLBodyElementTypeId, HTMLHtmlElementTypeId}; @@ -566,7 +567,9 @@ impl LayoutTask { debug!("layout: received layout request for: {:s}", data.url.serialize()); debug!("layout: parsed Node tree"); - debug!("{:?}", node.dump()); + if log_enabled!(log::DEBUG) { + node.dump(); + } let mut rw_data = self.lock_rw_data(possibly_locked_rw_data); diff --git a/components/layout/traversal.rs b/components/layout/traversal.rs index e1b022661341..439c31f28fa4 100644 --- a/components/layout/traversal.rs +++ b/components/layout/traversal.rs @@ -266,7 +266,7 @@ impl PreorderFlow for FlowTreeVerification { fn process(&mut self, flow: &mut Flow) { let base = flow::base(flow); if !base.flags.is_leaf() && !base.flags.is_nonleaf() { - println("flow tree verification failed: flow wasn't a leaf or a nonleaf!"); + println!("flow tree verification failed: flow wasn't a leaf or a nonleaf!"); flow.dump(); fail!("flow tree verification failed") } diff --git a/components/layout/wrapper.rs b/components/layout/wrapper.rs index 3abc146e4964..2c32376c843c 100644 --- a/components/layout/wrapper.rs +++ b/components/layout/wrapper.rs @@ -126,11 +126,6 @@ pub trait TLayoutNode { /// Returns the first child of this node. fn first_child(&self) -> Option; - - /// Dumps this node tree, for debugging. - fn dump(&self) { - // TODO(pcwalton): Reimplement this in a way that's safe for layout to call. - } } /// A wrapper so that layout can access only the methods that it should have access to. Layout must @@ -206,6 +201,28 @@ impl<'ln> LayoutNode<'ln> { }) } + pub fn dump(self) { + self.dump_indent(0); + } + + fn dump_indent(self, indent: uint) { + let mut s = String::new(); + for _ in range(0, indent) { + s.push_str(" "); + } + + s.push_str(self.debug_str().as_slice()); + error!("{:s}", s); + + for kid in self.children() { + kid.dump_indent(indent + 1); + } + } + + fn debug_str(self) -> String { + format!("{}: dirty={}", self.type_id(), self.is_dirty()) + } + pub fn flow_debug_id(self) -> uint { let layout_data_ref = self.borrow_layout_data(); match *layout_data_ref { diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs index 08ad02287fa3..0f966864bd40 100644 --- a/components/script/dom/element.rs +++ b/components/script/dom/element.rs @@ -73,7 +73,7 @@ impl Reflectable for Element { } } -#[deriving(PartialEq)] +#[deriving(PartialEq, Show)] #[jstraceable] pub enum ElementTypeId { HTMLElementTypeId, @@ -1172,4 +1172,3 @@ impl<'a> style::TElement<'a> for JSRef<'a, Element> { } } } - diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs index d13feb5193ed..7748ee13ccc5 100644 --- a/components/script/dom/node.rs +++ b/components/script/dom/node.rs @@ -251,7 +251,7 @@ impl LayoutDataRef { } /// The different types of nodes. -#[deriving(PartialEq)] +#[deriving(PartialEq, Show)] #[jstraceable] pub enum NodeTypeId { DoctypeNodeTypeId,