aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/style/rule_tree/mod.rs23
1 files changed, 9 insertions, 14 deletions
diff --git a/components/style/rule_tree/mod.rs b/components/style/rule_tree/mod.rs
index 3e2696fff9b..d653b6be99d 100644
--- a/components/style/rule_tree/mod.rs
+++ b/components/style/rule_tree/mod.rs
@@ -75,8 +75,15 @@ impl Drop for RuleTree {
#[cfg(feature = "gecko")]
impl MallocSizeOf for RuleTree {
fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
- let mut n = unsafe { ops.malloc_size_of(self.root.ptr()) };
- n += self.root.get().size_of(ops);
+ let mut n = 0;
+ let mut stack = SmallVec::<[_; 32]>::new();
+ stack.push(self.root.downgrade());
+
+ while let Some(node) = stack.pop() {
+ n += unsafe { ops.malloc_size_of(node.ptr()) };
+ stack.extend(unsafe { (*node.ptr()).iter_children() });
+ }
+
n
}
}
@@ -947,18 +954,6 @@ impl RuleNode {
}
}
-#[cfg(feature = "gecko")]
-impl MallocSizeOf for RuleNode {
- fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
- let mut n = 0;
- for child in self.iter_children() {
- n += unsafe { ops.malloc_size_of(child.ptr()) };
- n += unsafe { (*child.ptr()).size_of(ops) };
- }
- n
- }
-}
-
#[derive(Clone)]
struct WeakRuleNode {
p: ptr::NonNull<RuleNode>,