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 "third_party/blink/renderer/core/animation/css/css_timing_data.h"
6 
7 #include "third_party/blink/renderer/core/animation/timing.h"
8 
9 namespace blink {
10 
CSSTimingData()11 CSSTimingData::CSSTimingData() {
12   delay_list_.push_back(InitialDelay());
13   duration_list_.push_back(InitialDuration());
14   timing_function_list_.push_back(InitialTimingFunction());
15 }
16 
17 CSSTimingData::CSSTimingData(const CSSTimingData& other) = default;
18 
ConvertToTiming(size_t index) const19 Timing CSSTimingData::ConvertToTiming(size_t index) const {
20   Timing timing;
21   timing.start_delay = GetRepeated(delay_list_, index);
22   double duration = GetRepeated(duration_list_, index);
23   timing.iteration_duration =
24       std::isnan(duration)
25           ? base::nullopt
26           : base::make_optional(AnimationTimeDelta::FromSecondsD(duration));
27   timing.timing_function = GetRepeated(timing_function_list_, index);
28   timing.AssertValid();
29   return timing;
30 }
31 
TimingMatchForStyleRecalc(const CSSTimingData & other) const32 bool CSSTimingData::TimingMatchForStyleRecalc(
33     const CSSTimingData& other) const {
34   if (delay_list_ != other.delay_list_)
35     return false;
36   if (duration_list_ != other.duration_list_)
37     return false;
38   if (timing_function_list_.size() != other.timing_function_list_.size())
39     return false;
40 
41   for (wtf_size_t i = 0; i < timing_function_list_.size(); i++) {
42     if (!DataEquivalent(timing_function_list_.at(i),
43                         other.timing_function_list_.at(i))) {
44       return false;
45     }
46   }
47   return true;
48 }
49 
50 }  // namespace blink
51