diff options
Diffstat (limited to 'chromium/third_party/WebKit/Source/core/animation/SampledEffect.cpp')
-rw-r--r-- | chromium/third_party/WebKit/Source/core/animation/SampledEffect.cpp | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/chromium/third_party/WebKit/Source/core/animation/SampledEffect.cpp b/chromium/third_party/WebKit/Source/core/animation/SampledEffect.cpp new file mode 100644 index 00000000000..0c5e1548c71 --- /dev/null +++ b/chromium/third_party/WebKit/Source/core/animation/SampledEffect.cpp @@ -0,0 +1,66 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "config.h" +#include "core/animation/SampledEffect.h" + +#include "core/animation/interpolation/StyleInterpolation.h" + +namespace WebCore { + +SampledEffect::SampledEffect(Animation* animation, PassOwnPtrWillBeRawPtr<WillBeHeapVector<RefPtrWillBeMember<Interpolation> > > interpolations) + : m_animation(animation) +#if !ENABLE(OILPAN) + , m_player(animation->player()) +#endif + , m_interpolations(interpolations) + , m_playerSortInfo(animation->player()->sortInfo()) + , m_priority(animation->priority()) +{ + ASSERT(m_interpolations && !m_interpolations->isEmpty()); +} + +bool SampledEffect::canChange() const +{ +#if ENABLE(OILPAN) + return m_animation; +#else + if (!m_animation) + return false; + // FIXME: This check won't be needed when Animation and AnimationPlayer are moved to Oilpan. + return !m_player->canFree(); +#endif +} + +void SampledEffect::clear() +{ +#if !ENABLE(OILPAN) + m_player = nullptr; +#endif + m_animation = nullptr; + m_interpolations->clear(); +} + +void SampledEffect::removeReplacedInterpolationsIfNeeded(const BitArray<numCSSProperties>& replacedProperties) +{ + if (canChange() && m_animation->isCurrent()) + return; + + size_t dest = 0; + for (size_t i = 0; i < m_interpolations->size(); i++) { + if (!replacedProperties.get(toStyleInterpolation(m_interpolations->at(i).get())->id())) + m_interpolations->at(dest++) = m_interpolations->at(i); + } + m_interpolations->shrink(dest); +} + +void SampledEffect::trace(Visitor* visitor) +{ + visitor->trace(m_animation); +#if ENABLE(OILPAN) + visitor->trace(m_interpolations); +#endif +} + +} // namespace WebCore |