Skip to content
Permalink
Browse files

style: Use an explicit stack to measure rule tree memory usage.

A patch of mine that makes us measure the rule tree more often triggers this.

Differential Revision: https://phabricator.services.mozilla.com/D26595
  • Loading branch information...
emilio committed Apr 9, 2019
1 parent 369acff commit ae32e4df40747c60605f64e6db1edb2e75635f08
Showing with 9 additions and 14 deletions.
  1. +9 −14 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>,

0 comments on commit ae32e4d

Please sign in to comment.
You can’t perform that action at this time.