Bug 1368240: Manually expand later sibling hints. r?heycam draft
authorEmilio Cobos Álvarez <emilio@crisal.io>
Fri, 09 Jun 2017 07:19:11 +0200
changeset 592541 1ce5a4121cb2aa98ae91dbfbbb763cfd56c1f576
parent 592540 9cc941d2c0c65564d63a95a0ae91c33f92d79e66
child 592542 3f2c9b9eb92b2b9e4efaa78558cd994de5ca96e3
push id63430
push userbmo:emilio+bugs@crisal.io
push dateMon, 12 Jun 2017 12:30:48 +0000
reviewersheycam
bugs1368240
milestone55.0a1
Bug 1368240: Manually expand later sibling hints. r?heycam This will help keeping RestyleData small, and the amount of complexity we need to handle during the traversal down. MozReview-Commit-ID: 2a0FF40tr66
layout/base/ServoRestyleManager.cpp
--- a/layout/base/ServoRestyleManager.cpp
+++ b/layout/base/ServoRestyleManager.cpp
@@ -58,17 +58,30 @@ ServoRestyleManager::PostRestyleEvent(El
     mReentrantChanges->AppendElement(ReentrantChange { aElement, aMinChangeHint });
     return;
   }
 
   if (aRestyleHint & ~eRestyle_AllHintsWithAnimations) {
     mHaveNonAnimationRestyles = true;
   }
 
-  Servo_NoteExplicitHints(aElement, aRestyleHint, aMinChangeHint);
+  if (aRestyleHint & eRestyle_LaterSiblings) {
+    aRestyleHint &= ~eRestyle_LaterSiblings;
+
+    nsRestyleHint siblingHint = eRestyle_Subtree;
+    Element* current = aElement->GetNextElementSibling();
+    while (current) {
+      Servo_NoteExplicitHints(current, siblingHint, nsChangeHint(0));
+      current = current->GetNextElementSibling();
+    }
+  }
+
+  if (aRestyleHint || aMinChangeHint) {
+    Servo_NoteExplicitHints(aElement, aRestyleHint, aMinChangeHint);
+  }
 }
 
 void
 ServoRestyleManager::PostRestyleEventForCSSRuleChanges()
 {
   mRestyleForCSSRuleChanges = true;
   mPresContext->PresShell()->EnsureStyleFlush();
 }