aboutsummaryrefslogtreecommitdiffstats
path: root/components
diff options
context:
space:
mode:
Diffstat (limited to 'components')
-rw-r--r--components/layout_thread/dom_wrapper.rs15
-rw-r--r--components/layout_thread/lib.rs8
-rw-r--r--components/layout_thread_2020/dom_wrapper.rs15
-rw-r--r--components/layout_thread_2020/lib.rs8
-rw-r--r--components/script/dom/document.rs10
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()
}
}