1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef SampledEffect_h
6#define SampledEffect_h
7
8#include "core/animation/Animation.h"
9#include "core/animation/AnimationPlayer.h"
10#include "core/animation/Interpolation.h"
11#include "wtf/BitArray.h"
12#include "wtf/Vector.h"
13
14namespace blink {
15
16class SampledEffect : public NoBaseWillBeGarbageCollected<SampledEffect> {
17public:
18    static PassOwnPtrWillBeRawPtr<SampledEffect> create(Animation* animation, PassOwnPtrWillBeRawPtr<WillBeHeapVector<RefPtrWillBeMember<Interpolation> > > interpolations)
19    {
20        return adoptPtrWillBeNoop(new SampledEffect(animation, interpolations));
21    }
22
23    bool canChange() const;
24    void clear();
25
26    const WillBeHeapVector<RefPtrWillBeMember<Interpolation> >& interpolations() const { return *m_interpolations; }
27    void setInterpolations(PassOwnPtrWillBeRawPtr<WillBeHeapVector<RefPtrWillBeMember<Interpolation> > > interpolations) { m_interpolations = interpolations; }
28
29    Animation* animation() const { return m_animation; }
30    unsigned sequenceNumber() const { return m_sequenceNumber; }
31    Animation::Priority priority() const { return m_priority; }
32
33    void removeReplacedInterpolationsIfNeeded(const BitArray<numCSSProperties>&);
34
35    void trace(Visitor*);
36
37private:
38    SampledEffect(Animation*, PassOwnPtrWillBeRawPtr<WillBeHeapVector<RefPtrWillBeMember<Interpolation> > >);
39
40    RawPtrWillBeWeakMember<Animation> m_animation;
41#if !ENABLE(OILPAN)
42    RefPtr<AnimationPlayer> m_player;
43#endif
44    OwnPtrWillBeMember<WillBeHeapVector<RefPtrWillBeMember<Interpolation> > > m_interpolations;
45    const unsigned m_sequenceNumber;
46    Animation::Priority m_priority;
47};
48
49} // namespace blink
50
51#endif
52