mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-12-05 12:05:22 +00:00
ac47cd0a02
This patch switches on the new, "actually start the player in the next refresh driver tick" behavior. It updates PendingPlayerTracker, adding a StartPendingPlayersOnNextTick method which calls the appropriate method on AnimationPlayer. The existing StartPendingPlayers is renamed to StartPendingPlayersNow and is used for testing only. Furthermore, since we now expect AnimationPlayer::StartOnNextTick to be functional, AnimationPlayer::DoPlay is updated to use it when there is no document available. This should make playing an animation player always asynchronous, that is, always transition to the pending state temporarily (unless we are already playing).
51 lines
1.4 KiB
C++
51 lines
1.4 KiB
C++
/* vim: set shiftwidth=2 tabstop=8 autoindent cindent expandtab: */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
|
* You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#ifndef mozilla_dom_PendingPlayerTracker_h
|
|
#define mozilla_dom_PendingPlayerTracker_h
|
|
|
|
#include "mozilla/dom/AnimationPlayer.h"
|
|
#include "nsCycleCollectionParticipant.h"
|
|
#include "nsIDocument.h"
|
|
#include "nsTHashtable.h"
|
|
|
|
class nsIFrame;
|
|
|
|
namespace mozilla {
|
|
|
|
class PendingPlayerTracker MOZ_FINAL
|
|
{
|
|
public:
|
|
explicit PendingPlayerTracker(nsIDocument* aDocument)
|
|
: mDocument(aDocument)
|
|
{ }
|
|
|
|
NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(PendingPlayerTracker)
|
|
NS_DECL_CYCLE_COLLECTION_NATIVE_CLASS(PendingPlayerTracker)
|
|
|
|
void AddPlayPending(dom::AnimationPlayer& aPlayer);
|
|
void RemovePlayPending(dom::AnimationPlayer& aPlayer);
|
|
bool IsWaitingToPlay(dom::AnimationPlayer const& aPlayer) const;
|
|
|
|
void StartPendingPlayersOnNextTick(const TimeStamp& aReadyTime);
|
|
void StartPendingPlayersNow();
|
|
bool HasPendingPlayers() const { return mPlayPendingSet.Count() > 0; }
|
|
|
|
private:
|
|
~PendingPlayerTracker() { }
|
|
|
|
void EnsurePaintIsScheduled();
|
|
|
|
typedef nsTHashtable<nsRefPtrHashKey<dom::AnimationPlayer>>
|
|
AnimationPlayerSet;
|
|
|
|
AnimationPlayerSet mPlayPendingSet;
|
|
nsCOMPtr<nsIDocument> mDocument;
|
|
};
|
|
|
|
} // namespace mozilla
|
|
|
|
#endif // mozilla_dom_PendingPlayerTracker_h
|