Bug 1374966 - Drop nsChangeHint_UpdateTransformLayer when we also have nsChangeHint_AddOrRemoveTransform; r=heycam

MozReview-Commit-ID: 2eFl7cDXNA
This commit is contained in:
Brian Birtles
2017-07-27 12:05:47 +09:00
parent 73a920433a
commit 40eb9586b4

View File

@@ -1531,6 +1531,25 @@ RestyleManager::ProcessRestyledFrames(nsStyleChangeList& aChangeList)
hint &= ~nsChangeHint_UpdatePostTransformOverflow; hint &= ~nsChangeHint_UpdatePostTransformOverflow;
} }
if (hint & nsChangeHint_AddOrRemoveTransform) {
// When dropping a running transform animation we will first add an
// nsChangeHint_UpdateTransformLayer hint as part of the animation-only
// restyle. During the subsequent regular restyle, if the animation was
// the only reason the element had any transform applied, we will add
// nsChangeHint_AddOrRemoveTransform as part of the regular restyle.
//
// With the Gecko backend, these two change hints are processed
// after each restyle but when using the Servo backend they accumulate
// and are processed together after we have already removed the
// transform as part of the regular restyle. Since we don't actually
// need the nsChangeHint_UpdateTransformLayer hint if we already have
// a nsChangeHint_AddOrRemoveTransform hint, and since we
// will fail an assertion in ApplyRenderingChangeToTree if we try
// specify nsChangeHint_UpdateTransformLayer but don't have any
// transform style, we just drop the unneeded hint here.
hint &= ~nsChangeHint_UpdateTransformLayer;
}
if (hint & nsChangeHint_UpdateEffects) { if (hint & nsChangeHint_UpdateEffects) {
for (nsIFrame* cont = frame; cont; for (nsIFrame* cont = frame; cont;
cont = nsLayoutUtils::GetNextContinuationOrIBSplitSibling(cont)) { cont = nsLayoutUtils::GetNextContinuationOrIBSplitSibling(cont)) {