Bug 1354501 - Bail out if we know there is no need to dispatch any animation events in advance of checking which animation event we need. r=birtles

MozReview-Commit-ID: JhOs0CD49R

--HG--
extra : rebase_source : dd4c779ed23eb4f728192fdc27536f4409de2c55
This commit is contained in:
Hiroyuki Ikezoe 2018-07-03 11:06:46 +09:00
Родитель 8b30a3dc7b
Коммит b5935f0573
2 изменённых файлов: 13 добавлений и 7 удалений

Просмотреть файл

@ -202,6 +202,9 @@ CSSAnimation::QueueEvents(const StickyTimeDuration& aActiveTime)
if (!mEffect) {
currentPhase = GetAnimationPhaseWithoutEffect
<ComputedTiming::AnimationPhase>(*this);
if (currentPhase == mPreviousPhase) {
return;
}
} else {
ComputedTiming computedTiming = mEffect->GetComputedTiming();
currentPhase = computedTiming.mPhase;

Просмотреть файл

@ -210,6 +210,16 @@ CSSTransition::QueueEvents(const StickyTimeDuration& aActiveTime)
intervalEndTime = IntervalEndTime(computedTiming.mActiveDuration);
}
if (mPendingState != PendingState::NotPending &&
(mPreviousTransitionPhase == TransitionPhase::Idle ||
mPreviousTransitionPhase == TransitionPhase::Pending)) {
currentPhase = TransitionPhase::Pending;
}
if (currentPhase == mPreviousTransitionPhase) {
return;
}
// TimeStamps to use for ordering the events when they are dispatched. We
// use a TimeStamp so we can compare events produced by different elements,
// perhaps even with different timelines.
@ -219,13 +229,6 @@ CSSTransition::QueueEvents(const StickyTimeDuration& aActiveTime)
TimeStamp startTimeStamp = ElapsedTimeToTimeStamp(intervalStartTime);
TimeStamp endTimeStamp = ElapsedTimeToTimeStamp(intervalEndTime);
if (mPendingState != PendingState::NotPending &&
(mPreviousTransitionPhase == TransitionPhase::Idle ||
mPreviousTransitionPhase == TransitionPhase::Pending))
{
currentPhase = TransitionPhase::Pending;
}
AutoTArray<AnimationEventInfo, 3> events;
auto appendTransitionEvent = [&](EventMessage aMessage,