Closed Bug 1323114 Opened 8 years ago Closed 8 years ago

Assertion failure: TransformFunctionsMatch(nsStyleTransformMatrix::TransformFunctionOf(a1), nsStyleTransformMatrix::TransformFunctionOf(a2)) (transform function mismatch)

Categories

(Core :: DOM: Animation, defect, P3)

defect

Tracking

()

RESOLVED FIXED
mozilla53
Tracking Status
firefox53 --- fixed

People

(Reporter: truber, Assigned: hiro)

References

(Blocks 1 open bug)

Details

(Keywords: assertion, testcase)

Attachments

(2 files)

Attached file testcase.html
The attached testcase causes the assertion failure in mozilla-central rev f46f85dcfbc2. Assertion failure: TransformFunctionsMatch(nsStyleTransformMatrix::TransformFunctionOf(a1), nsStyleTransformMatrix::TransformFunctionOf(a2)) (transform function mismatch), at src/layout/style/StyleAnimationValue.cpp:2482 #0 0x7f7bd1f5f6b3 in AddTransformLists(double, nsCSSValueList const*, double, nsCSSValueList const*, nsCSSKeyword) src/layout/style/StyleAnimationValue.cpp:2641:9 #1 0x7f7bd1f5c90b in mozilla::StyleAnimationValue::AddWeighted(nsCSSPropertyID, double, mozilla::StyleAnimationValue const&, double, mozilla::StyleAnimationValue const&, mozilla::StyleAnimationValue&) src/layout/style/StyleAnimationValue.cpp:3143:20 #2 0x7f7bcebed5cb in mozilla::dom::KeyframeEffectReadOnly::ComposeStyle(RefPtr<mozilla::AnimValuesStyleRule>&, nsCSSPropertyIDSet const&) src/dom/animation/KeyframeEffectReadOnly.cpp:493:9 #3 0x7f7bcebeca6f in mozilla::dom::Animation::ComposeStyle(RefPtr<mozilla::AnimValuesStyleRule>&, nsCSSPropertyIDSet const&) src/dom/animation/Animation.cpp:960:7 #4 0x7f7bcebfd875 in mozilla::EffectCompositor::ComposeAnimationRule(mozilla::dom::Element*, mozilla::CSSPseudoElementType, mozilla::EffectCompositor::CascadeLevel, mozilla::TimeStamp) src/dom/animation/EffectCompositor.cpp:700:5 #5 0x7f7bcebfd4eb in mozilla::EffectCompositor::MaybeUpdateAnimationRule(mozilla::dom::Element*, mozilla::CSSPseudoElementType, mozilla::EffectCompositor::CascadeLevel, nsStyleContext*) src/dom/animation/EffectCompositor.cpp:370:3 #6 0x7f7bcebfdbdd in mozilla::EffectCompositor::GetAnimationRule(mozilla::dom::Element*, mozilla::CSSPseudoElementType, mozilla::EffectCompositor::CascadeLevel, nsStyleContext*) src/dom/animation/EffectCompositor.cpp:406:3 #7 0x7f7bd20c045e in nsStyleSet::RuleNodeWithReplacement(mozilla::dom::Element*, mozilla::dom::Element*, nsRuleNode*, mozilla::CSSPseudoElementType, nsRestyleHint) src/layout/style/nsStyleSet.cpp:1566:34 #8 0x7f7bd20c0b8f in nsStyleSet::ResolveStyleWithReplacement(mozilla::dom::Element*, mozilla::dom::Element*, nsStyleContext*, nsStyleContext*, nsRestyleHint, unsigned int) src/layout/style/nsStyleSet.cpp:1676:5 #9 0x7f7bd21b8c7b in mozilla::ElementRestyler::RestyleSelf(nsIFrame*, nsRestyleHint, unsigned int*, nsTArray<mozilla::ElementRestyler::SwapInstruction>&) src/layout/base/RestyleManager.cpp:2816:11 #10 0x7f7bd21b63af in mozilla::ElementRestyler::Restyle(nsRestyleHint) src/layout/base/RestyleManager.cpp:2139:7 #11 0x7f7bd21c1768 in mozilla::ElementRestyler::ComputeStyleChangeFor(nsIFrame*, nsStyleChangeList*, nsChangeHint, mozilla::RestyleTracker&, nsRestyleHint, mozilla::RestyleHintData const&, nsTArray<mozilla::ElementRestyler::ContextToClear>&, nsTArray<RefPtr<nsStyleContext> >&) src/layout/base/RestyleManager.cpp:3393:7 #12 0x7f7bd21ab189 in mozilla::RestyleManager::ComputeAndProcessStyleChange(nsIFrame*, nsChangeHint, mozilla::RestyleTracker&, nsRestyleHint, mozilla::RestyleHintData const&) src/layout/base/RestyleManager.cpp:3803:3 #13 0x7f7bd21aa61c in mozilla::RestyleManager::RestyleElement(mozilla::dom::Element*, nsIFrame*, nsChangeHint, mozilla::RestyleTracker&, nsRestyleHint, mozilla::RestyleHintData const&) src/layout/base/RestyleManager.cpp:152:5 #14 0x7f7bd21c9bba in mozilla::RestyleTracker::ProcessOneRestyle(mozilla::dom::Element*, nsRestyleHint, nsChangeHint, mozilla::RestyleHintData const&) src/layout/base/RestyleTracker.cpp:97:5 #15 0x7f7bd21c7bed in mozilla::RestyleTracker::DoProcessRestyles() src/layout/base/RestyleTracker.cpp:266:9 #16 0x7f7bd21ae1ba in mozilla::RestyleManager::ProcessPendingRestyles() src/layout/base/RestyleManager.cpp:834:3 #17 0x7f7bd218170b in mozilla::PresShell::FlushPendingNotifications(mozilla::ChangesToFlush) src/layout/base/PresShell.cpp:4115:9
Thanks, Jesse! This is a case of interpolation between 'transform: none' and 'eCSSKeyword_accumulatematrix'. We should handle this case as interpolation of different transform list.
Assignee: nobody → hiikezoe
Status: NEW → ASSIGNED
Blocks: 1305325
Priority: -- → P3
Comment on attachment 8818193 [details] Bug 1323114 - Handle interpolation between 'none' and 'accumulate matrix' as different transform list. https://reviewboard.mozilla.org/r/98320/#review100074 ::: layout/style/StyleAnimationValue.cpp:3165 (Diff revision 1) > - if (list2->mValue.GetUnit() == eCSSUnit_None) { > + if (list2->mValue.GetUnit() == eCSSUnit_None && > + !HasAccumulateMatrix(list1)) { > result = AddTransformLists(0, list1, aCoeff1, list1); > } else if (TransformFunctionListsMatch(list1, list2)) { > result = AddTransformLists(aCoeff1, list1, aCoeff2, list2, > eCSSKeyword_interpolatematrix); > } else { > result = AddDifferentTransformLists(aCoeff1, list1, > aCoeff2, list2, > eCSSKeyword_interpolatematrix); If list1 is accumulateMatrix and list2 is none, we call `AddDifferentTransformLists(aCoeff1, list1, aCoeff2, list2, ...);` instead of `AddDifferentTransformLists(0, list1, aCoeff1, list1, ...);` Therefore, I think we need to add one more crashtest for this case.
Comment on attachment 8818193 [details] Bug 1323114 - Handle interpolation between 'none' and 'accumulate matrix' as different transform list. https://reviewboard.mozilla.org/r/98320/#review100074 > If list1 is accumulateMatrix and list2 is none, we call > > `AddDifferentTransformLists(aCoeff1, list1, aCoeff2, list2, ...);` > > instead of > > `AddDifferentTransformLists(0, list1, aCoeff1, list1, ...);` > > Therefore, I think we need to add one more crashtest for this case. I thought initially we can't such test case (with iterationComposite:accumulate), but yes, we can write a test case with *composite:accumulate*! Thanks! I will add the the case.
(In reply to Hiroyuki Ikezoe (:hiro) from comment #6) > Comment on attachment 8818193 [details] > Bug 1323114 - Handle interpolation between 'none' and 'accumulate matrix' as > different transform list. > > https://reviewboard.mozilla.org/r/98320/#review100074 > > > If list1 is accumulateMatrix and list2 is none, we call > > > > `AddDifferentTransformLists(aCoeff1, list1, aCoeff2, list2, ...);` > > > > instead of > > > > `AddDifferentTransformLists(0, list1, aCoeff1, list1, ...);` > > > > Therefore, I think we need to add one more crashtest for this case. > > I thought initially we can't such test case (with > iterationComposite:accumulate), but yes, we can write a test case with > *composite:accumulate*! Thanks! I will add the the case. And, as you may already notice, the fix was incorrect too.
Comment on attachment 8818193 [details] Bug 1323114 - Handle interpolation between 'none' and 'accumulate matrix' as different transform list. https://reviewboard.mozilla.org/r/98320/#review100100 LGTM, thanks.
Attachment #8818193 - Flags: review?(boris.chiou) → review+
Pushed by hiikezoe@mozilla-japan.org: https://hg.mozilla.org/integration/autoland/rev/629564813616 Handle interpolation between 'none' and 'accumulate matrix' as different transform list. r=boris
Status: ASSIGNED → RESOLVED
Closed: 8 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla53
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: