diff options
Diffstat (limited to 'components')
-rw-r--r-- | components/layout_thread/dom_wrapper.rs | 15 | ||||
-rw-r--r-- | components/layout_thread/lib.rs | 8 | ||||
-rw-r--r-- | components/layout_thread_2020/dom_wrapper.rs | 15 | ||||
-rw-r--r-- | components/layout_thread_2020/lib.rs | 8 | ||||
-rw-r--r-- | components/script/dom/document.rs | 10 |
5 files changed, 8 insertions, 48 deletions
diff --git a/components/layout_thread/dom_wrapper.rs b/components/layout_thread/dom_wrapper.rs index 9237e9d47e7..dc4f8c0c262 100644 --- a/components/layout_thread/dom_wrapper.rs +++ b/components/layout_thread/dom_wrapper.rs @@ -712,21 +712,6 @@ impl<'le> ServoLayoutElement<'le> { pub unsafe fn set_has_snapshot(&self) { self.as_node().node.set_flag(NodeFlags::HAS_SNAPSHOT, true); } - - pub unsafe fn note_dirty_descendant(&self) { - use selectors::Element; - - let mut current = Some(*self); - while let Some(el) = current { - // FIXME(bholley): Ideally we'd have the invariant that any element - // with has_dirty_descendants also has the bit set on all its - // ancestors. However, there are currently some corner-cases where - // we get that wrong. I have in-flight patches to fix all this - // stuff up, so we just always propagate this bit for now. - el.set_dirty_descendants(); - current = el.parent_element(); - } - } } fn as_element<'dom>(node: LayoutDom<'dom, Node>) -> Option<ServoLayoutElement<'dom>> { diff --git a/components/layout_thread/lib.rs b/components/layout_thread/lib.rs index 54f1ec8d656..4cd7dad813e 100644 --- a/components/layout_thread/lib.rs +++ b/components/layout_thread/lib.rs @@ -87,7 +87,6 @@ use script_traits::{ConstellationControlMsg, LayoutControlMsg, LayoutMsg as Cons use script_traits::{DrawAPaintImageResult, IFrameSizeMsg, PaintWorkletError, WindowSizeType}; use script_traits::{Painter, WebrenderIpcSender}; use script_traits::{ScrollState, UntrustedNodeAddress, WindowSizeData}; -use selectors::Element; use servo_arc::Arc as ServoArc; use servo_atoms::Atom; use servo_config::opts; @@ -1463,13 +1462,6 @@ impl LayoutThread { for (el, restyle) in restyles { let el = unsafe { ServoLayoutNode::new(&el).as_element().unwrap() }; - // Propagate the descendant bit up the ancestors. Do this before - // the restyle calculation so that we can also do it for new - // unstyled nodes, which the descendants bit helps us find. - if let Some(parent) = el.parent_element() { - unsafe { parent.note_dirty_descendant() }; - } - // If we haven't styled this node yet, we don't need to track a // restyle. let style_data = match el.get_data() { diff --git a/components/layout_thread_2020/dom_wrapper.rs b/components/layout_thread_2020/dom_wrapper.rs index 5a722cd82b8..f3199dffc80 100644 --- a/components/layout_thread_2020/dom_wrapper.rs +++ b/components/layout_thread_2020/dom_wrapper.rs @@ -719,21 +719,6 @@ impl<'le> ServoLayoutElement<'le> { pub unsafe fn set_has_snapshot(&self) { self.as_node().node.set_flag(NodeFlags::HAS_SNAPSHOT, true); } - - pub unsafe fn note_dirty_descendant(&self) { - use selectors::Element; - - let mut current = Some(*self); - while let Some(el) = current { - // FIXME(bholley): Ideally we'd have the invariant that any element - // with has_dirty_descendants also has the bit set on all its - // ancestors. However, there are currently some corner-cases where - // we get that wrong. I have in-flight patches to fix all this - // stuff up, so we just always propagate this bit for now. - el.set_dirty_descendants(); - current = el.parent_element(); - } - } } fn as_element<'dom>(node: LayoutDom<'dom, Node>) -> Option<ServoLayoutElement<'dom>> { diff --git a/components/layout_thread_2020/lib.rs b/components/layout_thread_2020/lib.rs index 05663f7d68b..7a7acff8bb7 100644 --- a/components/layout_thread_2020/lib.rs +++ b/components/layout_thread_2020/lib.rs @@ -70,7 +70,6 @@ use script_traits::{ConstellationControlMsg, LayoutControlMsg, LayoutMsg as Cons use script_traits::{DrawAPaintImageResult, PaintWorkletError}; use script_traits::{Painter, WebrenderIpcSender}; use script_traits::{ScrollState, UntrustedNodeAddress, WindowSizeData}; -use selectors::Element; use servo_arc::Arc as ServoArc; use servo_atoms::Atom; use servo_config::opts; @@ -1109,13 +1108,6 @@ impl LayoutThread { for (el, restyle) in restyles { let el = unsafe { ServoLayoutNode::new(&el).as_element().unwrap() }; - // Propagate the descendant bit up the ancestors. Do this before - // the restyle calculation so that we can also do it for new - // unstyled nodes, which the descendants bit helps us find. - if let Some(parent) = el.parent_element() { - unsafe { parent.note_dirty_descendant() }; - } - // If we haven't styled this node yet, we don't need to track a // restyle. let style_data = match el.get_data() { diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs index 8e05be1fb11..2d0f2ce1c26 100644 --- a/components/script/dom/document.rs +++ b/components/script/dom/document.rs @@ -3587,8 +3587,14 @@ impl Document { self.pending_restyles .borrow_mut() .drain() - .filter(|(k, _)| k.upcast::<Node>().get_flag(NodeFlags::IS_CONNECTED)) - .map(|(k, v)| (k.upcast::<Node>().to_trusted_node_address(), v)) + .filter_map(|(elem, restyle)| { + let node = elem.upcast::<Node>(); + if !node.get_flag(NodeFlags::IS_CONNECTED) { + return None; + } + node.note_dirty_descendants(); + Some((node.to_trusted_node_address(), restyle)) + }) .collect() } } |