blob: e75770c018cbbb830c65343fc9d9755436c80638 [file] [log] [blame]
// 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 "sky/engine/config.h"
#include "sky/engine/core/animation/SampledEffect.h"
#include "sky/engine/core/animation/StyleInterpolation.h"
namespace blink {
SampledEffect::SampledEffect(Animation* animation, PassOwnPtr<Vector<RefPtr<Interpolation> > > interpolations)
: m_animation(animation)
#if !ENABLE(OILPAN)
, m_player(animation->player())
#endif
, m_interpolations(interpolations)
, m_sequenceNumber(animation->player()->sequenceNumber())
, 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);
}
} // namespace blink