16f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 26f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 36f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch// found in the LICENSE file. 46f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch 56f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch#include "config.h" 66f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch#include "core/animation/SampledEffect.h" 76f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch 8d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#include "core/animation/interpolation/StyleInterpolation.h" 9d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) 106f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdochnamespace WebCore { 116f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch 126f543c786fc42989f552b4daa774ca5ff32fa697Ben MurdochSampledEffect::SampledEffect(Animation* animation, PassOwnPtrWillBeRawPtr<WillBeHeapVector<RefPtrWillBeMember<Interpolation> > > interpolations) 13d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) : m_animation(animation) 14d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#if !ENABLE(OILPAN) 15d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) , m_player(animation->player()) 16d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#endif 176f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch , m_interpolations(interpolations) 18d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) , m_playerSortInfo(animation->player()->sortInfo()) 196f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch , m_priority(animation->priority()) 206f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch{ 216f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch ASSERT(m_interpolations && !m_interpolations->isEmpty()); 226f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch} 236f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch 246f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdochbool SampledEffect::canChange() const 256f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch{ 26d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#if ENABLE(OILPAN) 27d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) return m_animation; 28d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#else 296f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch if (!m_animation) 306f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch return false; 316f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch // FIXME: This check won't be needed when Animation and AnimationPlayer are moved to Oilpan. 326f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch return !m_player->canFree(); 33d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#endif 346f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch} 356f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch 366f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdochvoid SampledEffect::clear() 376f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch{ 38d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#if !ENABLE(OILPAN) 39d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) m_player = nullptr; 40d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#endif 41d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) m_animation = nullptr; 426f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch m_interpolations->clear(); 436f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch} 446f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch 456f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdochvoid SampledEffect::removeReplacedInterpolationsIfNeeded(const BitArray<numCSSProperties>& replacedProperties) 466f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch{ 476f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch if (canChange() && m_animation->isCurrent()) 486f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch return; 496f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch 506f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch size_t dest = 0; 516f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch for (size_t i = 0; i < m_interpolations->size(); i++) { 526f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch if (!replacedProperties.get(toStyleInterpolation(m_interpolations->at(i).get())->id())) 536f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch m_interpolations->at(dest++) = m_interpolations->at(i); 546f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch } 556f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch m_interpolations->shrink(dest); 566f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch} 576f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch 58d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)void SampledEffect::trace(Visitor* visitor) 59d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles){ 60d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) visitor->trace(m_animation); 61d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#if ENABLE(OILPAN) 62d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) visitor->trace(m_interpolations); 63d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#endif 64d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)} 65d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) 666f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch} // namespace WebCore 67