Navigation Menu

Skip to content

Commit

Permalink
style: Use an explicit stack to measure rule tree memory usage.
Browse files Browse the repository at this point in the history
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 12, 2019
1 parent 369acff commit ae32e4d
Showing 1 changed file with 9 additions and 14 deletions.
23 changes: 9 additions & 14 deletions components/style/rule_tree/mod.rs
Expand Up @@ -75,8 +75,15 @@ impl Drop for RuleTree {
#[cfg(feature = "gecko")] #[cfg(feature = "gecko")]
impl MallocSizeOf for RuleTree { impl MallocSizeOf for RuleTree {
fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize { fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
let mut n = unsafe { ops.malloc_size_of(self.root.ptr()) }; let mut n = 0;
n += self.root.get().size_of(ops); 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 n
} }
} }
Expand Down Expand Up @@ -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)] #[derive(Clone)]
struct WeakRuleNode { struct WeakRuleNode {
p: ptr::NonNull<RuleNode>, p: ptr::NonNull<RuleNode>,
Expand Down

0 comments on commit ae32e4d

Please sign in to comment.