From 6ecc7445fc5fc654cbbf4b818b4549699f07d71a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20Cobos=20=C3=81lvarez?= Date: Thu, 3 May 2018 19:24:05 +0200 Subject: [PATCH] style: Make the font canvas code not mess with the rule tree. Inserting a lot of rules in the root level is super-inefficient. This fixes it by not doing it. It gives the root rule node to the style, but that's fine, since it's useless. All this code-path is already pretty messy. Bug: 1457678 Reviewed-by: xidorn,hiro MozReview-Commit-ID: GoGHI4YJbKr --- components/style/stylist.rs | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/components/style/stylist.rs b/components/style/stylist.rs index 732edc212b5..54d006d4ff8 100644 --- a/components/style/stylist.rs +++ b/components/style/stylist.rs @@ -1555,27 +1555,25 @@ impl Stylist { E: TElement, { use font_metrics::get_metrics_provider_for_product; - use std::iter; - // FIXME(emilio): Why do we even need the rule node? We should probably - // just avoid allocating it and calling `apply_declarations` directly, - // maybe... - let rule_node = self.rule_tree.insert_ordered_rules(iter::once(( - StyleSource::from_declarations(declarations), - CascadeLevel::StyleAttributeNormal, - ))); + let block = declarations.read_with(guards.author); + let iter_declarations = || { + block.declaration_importance_iter().map(|(declaration, importance)| { + debug_assert!(!importance.important()); + (declaration, CascadeLevel::StyleAttributeNormal) + }) + }; - // This currently ignores visited styles. It appears to be used for - // font styles in via Servo_StyleSet_ResolveForDeclarations. - // It is unclear if visited styles are meaningful for this case. let metrics = get_metrics_provider_for_product(); - // FIXME(emilio): the pseudo bit looks quite dubious! - properties::cascade::( + // We don't bother inserting these declarations in the rule tree, since + // it'd be quite useless and slow. + properties::apply_declarations::( &self.device, /* pseudo = */ None, - &rule_node, + self.rule_tree.root(), guards, + iter_declarations, Some(parent_style), Some(parent_style), Some(parent_style),