Bug 1075137 patch 5 - Add new boolean to RestyleManager for whether we're currently processing animation restyles. r=birtles
This is just moving one bit of data from the pres context without any
logic change. But given the other refactoring, it seems to make more
sense here now.
--- a/layout/base/RestyleManager.cpp
+++ b/layout/base/RestyleManager.cpp
@@ -61,16 +61,17 @@ FrameTagToString(const nsIFrame* aFrame)
RestyleManager::RestyleManager(nsPresContext* aPresContext)
: mPresContext(aPresContext)
, mRebuildAllStyleData(false)
, mObservingRefreshDriver(false)
, mInStyleRefresh(false)
, mSkipAnimationRules(false)
, mPostAnimationRestyles(false)
+ , mIsProcessingAnimationStyleChange(false)
, mHoverGeneration(0)
, mRebuildAllExtraHint(nsChangeHint(0))
, mLastUpdateForThrottledAnimations(aPresContext->RefreshDriver()->
MostRecentRefresh())
, mAnimationGeneration(0)
, mReframingStyleContexts(nullptr)
, mPendingRestyles(ELEMENT_HAS_PENDING_RESTYLE |
ELEMENT_IS_POTENTIAL_RESTYLE_ROOT)
@@ -1570,17 +1571,21 @@ RestyleManager::ProcessPendingRestyles()
// second because we need to start animations that resulted from the
// first set of restyles (e.g., CSS transitions with negative
// transition-delay), and because we need to immediately
// restyle-with-animation any just-restyled elements that are
// mid-transition (since processing the non-animation restyle ignores
// the running transition so it can check for a new change on the same
// property, and then posts an immediate animation style change).
mPresContext->SetProcessingAnimationStyleChange(true);
+ MOZ_ASSERT(!mIsProcessingAnimationStyleChange, "nesting forbidden");
+ mIsProcessingAnimationStyleChange = true;
mPendingAnimationRestyles.ProcessRestyles();
+ MOZ_ASSERT(mIsProcessingAnimationStyleChange, "nesting forbidden");
+ mIsProcessingAnimationStyleChange = false;
mPresContext->SetProcessingAnimationStyleChange(false);
mPresContext->SetProcessingRestyles(false);
#ifdef DEBUG
mIsProcessingRestyles = false;
#endif
NS_POSTCONDITION(mPendingRestyles.Count() == oldPendingRestyleCount,
"We should not have posted new non-animation restyles while "
--- a/layout/base/RestyleManager.h
+++ b/layout/base/RestyleManager.h
@@ -103,16 +103,22 @@ public:
// styles associated with animation. Only true when
// SkipAnimationRules() is also true.
bool PostAnimationRestyles() const {
MOZ_ASSERT(mSkipAnimationRules || !mPostAnimationRestyles,
"inconsistent state");
return mPostAnimationRestyles;
}
+ // Whether we're currently in the animation phase of restyle
+ // processing (to be eliminated in bug 960465)
+ bool IsProcessingAnimationStyleChange() const {
+ return mIsProcessingAnimationStyleChange;
+ }
+
/**
* Reparent the style contexts of this frame subtree. The parent frame of
* aFrame must be changed to the new parent before this function is called;
* the new parent style context will be automatically computed based on the
* new position in the frame tree.
*
* @param aFrame the root of the subtree to reparent. Must not be null.
*/
@@ -444,16 +450,19 @@ private:
// True if we're in the middle of a nsRefreshDriver refresh
bool mInStyleRefresh : 1;
// Whether rule matching should skip styles associated with animation
bool mSkipAnimationRules : 1;
// Whether rule matching should post animation restyles when it skips
// styles associated with animation. Only true when
// mSkipAnimationRules is also true.
bool mPostAnimationRestyles : 1;
+ // Whether we're currently in the animation phase of restyle
+ // processing (to be eliminated in bug 960465)
+ bool mIsProcessingAnimationStyleChange : 1;
uint32_t mHoverGeneration;
nsChangeHint mRebuildAllExtraHint;
mozilla::TimeStamp mLastUpdateForThrottledAnimations;
OverflowChangedTracker mOverflowChangedTracker;