mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-25 13:51:41 +00:00
Bug 1195523: Use type-safe LinkedList instead of PRCList to manage AnimationCollection objects. r=birtles
This commit is contained in:
parent
cf56e85136
commit
db0b03b6ae
@ -54,7 +54,6 @@ CommonAnimationManager::CommonAnimationManager(nsPresContext *aPresContext)
|
||||
: mPresContext(aPresContext)
|
||||
, mIsObservingRefreshDriver(false)
|
||||
{
|
||||
PR_INIT_CLIST(&mElementCollections);
|
||||
}
|
||||
|
||||
CommonAnimationManager::~CommonAnimationManager()
|
||||
@ -82,17 +81,15 @@ CommonAnimationManager::AddElementCollection(AnimationCollection* aCollection)
|
||||
mIsObservingRefreshDriver = true;
|
||||
}
|
||||
|
||||
PR_INSERT_BEFORE(aCollection, &mElementCollections);
|
||||
mElementCollections.insertBack(aCollection);
|
||||
}
|
||||
|
||||
void
|
||||
CommonAnimationManager::RemoveAllElementCollections()
|
||||
{
|
||||
while (!PR_CLIST_IS_EMPTY(&mElementCollections)) {
|
||||
AnimationCollection* head =
|
||||
static_cast<AnimationCollection*>(PR_LIST_HEAD(&mElementCollections));
|
||||
head->Destroy();
|
||||
}
|
||||
while (AnimationCollection* head = mElementCollections.getFirst()) {
|
||||
head->Destroy(); // Note: this removes 'head' from mElementCollections.
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
@ -121,10 +118,9 @@ CommonAnimationManager::MaybeStartOrStopObservingRefreshDriver()
|
||||
bool
|
||||
CommonAnimationManager::NeedsRefresh() const
|
||||
{
|
||||
for (PRCList *l = PR_LIST_HEAD(&mElementCollections);
|
||||
l != &mElementCollections;
|
||||
l = PR_NEXT_LINK(l)) {
|
||||
if (static_cast<AnimationCollection*>(l)->mNeedsRefreshes) {
|
||||
for (const AnimationCollection* collection = mElementCollections.getFirst();
|
||||
collection; collection = collection->getNext()) {
|
||||
if (collection->mNeedsRefreshes) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -284,11 +280,8 @@ CommonAnimationManager::AddStyleUpdatesTo(RestyleTracker& aTracker)
|
||||
{
|
||||
TimeStamp now = mPresContext->RefreshDriver()->MostRecentRefresh();
|
||||
|
||||
PRCList* next = PR_LIST_HEAD(&mElementCollections);
|
||||
while (next != &mElementCollections) {
|
||||
AnimationCollection* collection = static_cast<AnimationCollection*>(next);
|
||||
next = PR_NEXT_LINK(next);
|
||||
|
||||
for (AnimationCollection* collection = mElementCollections.getFirst();
|
||||
collection; collection = collection->getNext()) {
|
||||
collection->EnsureStyleRuleFor(now);
|
||||
|
||||
dom::Element* elementToRestyle = collection->GetElementToRestyle();
|
||||
@ -324,7 +317,7 @@ CommonAnimationManager::GetAnimations(dom::Element *aElement,
|
||||
nsCSSPseudoElements::Type aPseudoType,
|
||||
bool aCreateIfNeeded)
|
||||
{
|
||||
if (!aCreateIfNeeded && PR_CLIST_IS_EMPTY(&mElementCollections)) {
|
||||
if (!aCreateIfNeeded && mElementCollections.isEmpty()) {
|
||||
// Early return for the most common case.
|
||||
return nullptr;
|
||||
}
|
||||
@ -371,11 +364,8 @@ void
|
||||
CommonAnimationManager::FlushAnimations(FlushFlags aFlags)
|
||||
{
|
||||
TimeStamp now = mPresContext->RefreshDriver()->MostRecentRefresh();
|
||||
for (PRCList *l = PR_LIST_HEAD(&mElementCollections);
|
||||
l != &mElementCollections;
|
||||
l = PR_NEXT_LINK(l)) {
|
||||
AnimationCollection* collection = static_cast<AnimationCollection*>(l);
|
||||
|
||||
for (AnimationCollection* collection = mElementCollections.getFirst();
|
||||
collection; collection = collection->getNext()) {
|
||||
if (collection->mStyleRuleRefreshTime == now) {
|
||||
continue;
|
||||
}
|
||||
|
@ -9,11 +9,11 @@
|
||||
#include "nsIStyleRuleProcessor.h"
|
||||
#include "nsIStyleRule.h"
|
||||
#include "nsRefreshDriver.h"
|
||||
#include "prclist.h"
|
||||
#include "nsChangeHint.h"
|
||||
#include "nsCSSProperty.h"
|
||||
#include "nsDisplayList.h" // For nsDisplayItem::Type
|
||||
#include "mozilla/EventDispatcher.h"
|
||||
#include "mozilla/LinkedList.h"
|
||||
#include "mozilla/MemoryReporting.h"
|
||||
#include "mozilla/StyleAnimationValue.h"
|
||||
#include "mozilla/dom/Animation.h"
|
||||
@ -179,7 +179,7 @@ public:
|
||||
GetAnimationCollection(const nsIFrame* aFrame);
|
||||
|
||||
protected:
|
||||
PRCList mElementCollections;
|
||||
LinkedList<AnimationCollection> mElementCollections;
|
||||
nsPresContext *mPresContext; // weak (non-null from ctor to Disconnect)
|
||||
bool mIsObservingRefreshDriver;
|
||||
};
|
||||
@ -234,7 +234,7 @@ private:
|
||||
|
||||
typedef InfallibleTArray<nsRefPtr<dom::Animation>> AnimationPtrArray;
|
||||
|
||||
struct AnimationCollection : public PRCList
|
||||
struct AnimationCollection : public LinkedListElement<AnimationCollection>
|
||||
{
|
||||
AnimationCollection(dom::Element *aElement, nsIAtom *aElementProperty,
|
||||
CommonAnimationManager *aManager)
|
||||
@ -250,14 +250,13 @@ struct AnimationCollection : public PRCList
|
||||
#endif
|
||||
{
|
||||
MOZ_COUNT_CTOR(AnimationCollection);
|
||||
PR_INIT_CLIST(this);
|
||||
}
|
||||
~AnimationCollection()
|
||||
{
|
||||
MOZ_ASSERT(mCalledPropertyDtor,
|
||||
"must call destructor through element property dtor");
|
||||
MOZ_COUNT_DTOR(AnimationCollection);
|
||||
PR_REMOVE_LINK(this);
|
||||
remove();
|
||||
mManager->ElementCollectionRemoved();
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user