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#include "config.h"
6#include "core/animation/InterpolationEffect.h"
7
8namespace blink {
9
10PassOwnPtrWillBeRawPtr<WillBeHeapVector<RefPtrWillBeMember<Interpolation> > > InterpolationEffect::getActiveInterpolations(double fraction, double iterationDuration) const
11{
12
13    WillBeHeapVector<RefPtrWillBeMember<Interpolation> >* result = new WillBeHeapVector<RefPtrWillBeMember<Interpolation> >();
14
15    for (size_t i = 0; i < m_interpolations.size(); ++i) {
16        const InterpolationRecord* record = m_interpolations[i].get();
17        if (fraction >= record->m_applyFrom && fraction < record->m_applyTo) {
18            RefPtrWillBeRawPtr<Interpolation> interpolation = record->m_interpolation;
19            double localFraction = (fraction - record->m_start) / (record->m_end - record->m_start);
20            if (record->m_easing)
21                localFraction = record->m_easing->evaluate(localFraction, accuracyForDuration(iterationDuration));
22            interpolation->interpolate(0, localFraction);
23            result->append(interpolation);
24        }
25    }
26
27    return adoptPtrWillBeNoop(result);
28}
29
30void InterpolationEffect::InterpolationRecord::trace(Visitor* visitor)
31{
32    visitor->trace(m_interpolation);
33}
34
35void InterpolationEffect::trace(Visitor* visitor)
36{
37#if ENABLE_OILPAN
38    visitor->trace(m_interpolations);
39#endif
40}
41
42}
43