From 07421a8e9cabd24f26e18d60506eec690a8b321f Mon Sep 17 00:00:00 2001 From: Hiroyuki Ikezoe Date: Thu, 3 Aug 2017 06:42:38 +0900 Subject: Make replace_rules_internal return true only if important rules changed. --- components/style/rule_tree/mod.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'components/style/rule_tree/mod.rs') diff --git a/components/style/rule_tree/mod.rs b/components/style/rule_tree/mod.rs index 0dc29232dac..1063cdba6c9 100644 --- a/components/style/rule_tree/mod.rs +++ b/components/style/rule_tree/mod.rs @@ -310,12 +310,14 @@ impl RuleTree { level: CascadeLevel, pdb: Option>>, path: &StrongRuleNode, - guards: &StylesheetGuards) + guards: &StylesheetGuards, + important_rules_changed: &mut bool) -> Option { debug_assert!(level.is_unique_per_element()); // TODO(emilio): Being smarter with lifetimes we could avoid a bit of // the refcount churn. let mut current = path.clone(); + *important_rules_changed = false; // First walk up until the first less-or-equally specific rule. let mut children = SmallVec::<[_; 10]>::new(); @@ -335,6 +337,8 @@ impl RuleTree { // special cases, and replacing them for a `while` loop, avoiding the // optimizations). if current.get().level == level { + *important_rules_changed |= level.is_important(); + if let Some(pdb) = pdb { // If the only rule at the level we're replacing is exactly the // same as `pdb`, we're done, and `path` is still valid. -- cgit v1.2.3