[tbb-commits] [tor-browser/esr24] Bug 1000185 - Part 2: Add a bool to keep track of whether nsSMILAnimationController instances are registered with a refresh driver. r=birtles, a=abillings
mikeperry at torproject.org
mikeperry at torproject.org
Fri Aug 29 05:26:40 UTC 2014
commit da3de5dd2b884c4d54c86fd0a5164f137a509958
Author: Daniel Holbert <dholbert at cs.stanford.edu>
Date: Tue May 20 08:34:26 2014 -0400
Bug 1000185 - Part 2: Add a bool to keep track of whether nsSMILAnimationController instances are registered with a refresh driver. r=birtles, a=abillings
---
content/smil/nsSMILAnimationController.cpp | 11 +++++++++--
content/smil/nsSMILAnimationController.h | 3 +++
2 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/content/smil/nsSMILAnimationController.cpp b/content/smil/nsSMILAnimationController.cpp
index 77d06cd..b625b21 100644
--- a/content/smil/nsSMILAnimationController.cpp
+++ b/content/smil/nsSMILAnimationController.cpp
@@ -29,6 +29,7 @@ nsSMILAnimationController::nsSMILAnimationController(nsIDocument* aDoc)
mResampleNeeded(false),
mDeferredStartSampling(false),
mRunningSample(false),
+ mRegisteredWithRefreshDriver(false),
mDocument(aDoc)
{
NS_ABORT_IF_FALSE(aDoc, "need a non-null document");
@@ -52,6 +53,8 @@ nsSMILAnimationController::~nsSMILAnimationController()
NS_ASSERTION(mAnimationElementTable.Count() == 0,
"Animation controller shouldn't be tracking any animation"
" elements when it dies");
+ NS_ASSERTION(!mRegisteredWithRefreshDriver,
+ "Leaving stale entry in refresh driver's observer list");
}
void
@@ -263,6 +266,8 @@ nsSMILAnimationController::StartSampling(nsRefreshDriver* aRefreshDriver)
NS_ASSERTION(!mDeferredStartSampling,
"Started sampling but the deferred start flag is still set");
if (aRefreshDriver) {
+ MOZ_ASSERT(!mRegisteredWithRefreshDriver,
+ "Redundantly registering with refresh driver");
NS_ABORT_IF_FALSE(!GetRefreshDriver() ||
aRefreshDriver == GetRefreshDriver(),
"Starting sampling with wrong refresh driver");
@@ -270,19 +275,21 @@ nsSMILAnimationController::StartSampling(nsRefreshDriver* aRefreshDriver)
// or else it will confuse our "average time between samples" calculations.
mCurrentSampleTime = mozilla::TimeStamp::Now();
aRefreshDriver->AddRefreshObserver(this, Flush_Style);
+ mRegisteredWithRefreshDriver = true;
}
}
void
nsSMILAnimationController::StopSampling(nsRefreshDriver* aRefreshDriver)
{
- if (aRefreshDriver) {
+ if (aRefreshDriver && mRegisteredWithRefreshDriver) {
// NOTE: The document might already have been detached from its PresContext
- // (and RefreshDriver), which would make GetRefreshDriverForDoc return null.
+ // (and RefreshDriver), which would make GetRefreshDriver() return null.
NS_ABORT_IF_FALSE(!GetRefreshDriver() ||
aRefreshDriver == GetRefreshDriver(),
"Stopping sampling with wrong refresh driver");
aRefreshDriver->RemoveRefreshObserver(this, Flush_Style);
+ mRegisteredWithRefreshDriver = false;
}
}
diff --git a/content/smil/nsSMILAnimationController.h b/content/smil/nsSMILAnimationController.h
index ab98cd6..b42ffee 100644
--- a/content/smil/nsSMILAnimationController.h
+++ b/content/smil/nsSMILAnimationController.h
@@ -214,6 +214,9 @@ protected:
bool mDeferredStartSampling;
bool mRunningSample;
+ // Are we registered with our document's refresh driver?
+ bool mRegisteredWithRefreshDriver;
+
// Store raw ptr to mDocument. It owns the controller, so controller
// shouldn't outlive it
nsIDocument* mDocument;
More information about the tbb-commits
mailing list