From 9feea7604330c735c12b715fc57bbc05e0fcc78b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20Cobos=20=C3=81lvarez?= Date: Sat, 20 Aug 2016 01:42:17 -0700 Subject: [PATCH] style: Avoid computing and storing change hints for text nodes. --- components/style/matching.rs | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/components/style/matching.rs b/components/style/matching.rs index cb1f70602ad..2a528a191d2 100644 --- a/components/style/matching.rs +++ b/components/style/matching.rs @@ -871,21 +871,29 @@ pub trait MatchMethods : TNode { None => None, }; - let mut applicable_declarations_cache = - context.local_context().applicable_declarations_cache.borrow_mut(); - let (damage, restyle_result) = if self.is_text_node() { + // In the case we're styling a text node, we don't need to compute the + // restyle damage, since it's a subset of the restyle damage of the + // parent. + // + // In Gecko, we're done, we don't need anything else from text nodes. + // + // In Servo, this is also true, since text nodes generate UnscannedText + // fragments, which aren't repairable by incremental layout. + if self.is_text_node() { let mut data_ref = self.mutate_data().unwrap(); let mut data = &mut *data_ref; let cloned_parent_style = ComputedValues::style_for_child_text_node(parent_style.unwrap()); - let damage = - self.compute_restyle_damage(data.style.as_ref(), &cloned_parent_style, None); - data.style = Some(cloned_parent_style); - (damage, RestyleResult::Continue) - } else { + return RestyleResult::Continue; + } + + let mut applicable_declarations_cache = + context.local_context().applicable_declarations_cache.borrow_mut(); + + let (damage, restyle_result) = { let mut data_ref = self.mutate_data().unwrap(); let mut data = &mut *data_ref; let final_style =