Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6)

Side by Side Diff: third_party/WebKit/Source/core/animation/InvalidatableInterpolation.cpp

Issue 2080623002: Revert "Remove OwnPtr from Blink." (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "core/animation/InvalidatableInterpolation.h" 5 #include "core/animation/InvalidatableInterpolation.h"
6 6
7 #include "core/animation/InterpolationEnvironment.h" 7 #include "core/animation/InterpolationEnvironment.h"
8 #include "core/animation/StringKeyframe.h" 8 #include "core/animation/StringKeyframe.h"
9 #include "core/css/resolver/StyleResolverState.h" 9 #include "core/css/resolver/StyleResolverState.h"
10 #include <memory>
11 10
12 namespace blink { 11 namespace blink {
13 12
14 void InvalidatableInterpolation::interpolate(int, double fraction) 13 void InvalidatableInterpolation::interpolate(int, double fraction)
15 { 14 {
16 if (fraction == m_currentFraction) 15 if (fraction == m_currentFraction)
17 return; 16 return;
18 17
19 if (m_currentFraction == 0 || m_currentFraction == 1 || fraction == 0 || fra ction == 1) 18 if (m_currentFraction == 0 || m_currentFraction == 1 || fraction == 0 || fra ction == 1)
20 clearCache(); 19 clearCache();
21 20
22 m_currentFraction = fraction; 21 m_currentFraction = fraction;
23 if (m_isCached && m_cachedPairConversion) 22 if (m_isCached && m_cachedPairConversion)
24 m_cachedPairConversion->interpolateValue(fraction, m_cachedValue); 23 m_cachedPairConversion->interpolateValue(fraction, m_cachedValue);
25 // We defer the interpolation to ensureValidInterpolation() if m_cachedPairC onversion is null. 24 // We defer the interpolation to ensureValidInterpolation() if m_cachedPairC onversion is null.
26 } 25 }
27 26
28 std::unique_ptr<PairwisePrimitiveInterpolation> InvalidatableInterpolation::mayb eConvertPairwise(const InterpolationEnvironment& environment, const UnderlyingVa lueOwner& underlyingValueOwner) const 27 PassOwnPtr<PairwisePrimitiveInterpolation> InvalidatableInterpolation::maybeConv ertPairwise(const InterpolationEnvironment& environment, const UnderlyingValueOw ner& underlyingValueOwner) const
29 { 28 {
30 ASSERT(m_currentFraction != 0 && m_currentFraction != 1); 29 ASSERT(m_currentFraction != 0 && m_currentFraction != 1);
31 for (const auto& interpolationType : m_interpolationTypes) { 30 for (const auto& interpolationType : m_interpolationTypes) {
32 if ((m_startKeyframe->isNeutral() || m_endKeyframe->isNeutral()) && (!un derlyingValueOwner || underlyingValueOwner.type() != *interpolationType)) 31 if ((m_startKeyframe->isNeutral() || m_endKeyframe->isNeutral()) && (!un derlyingValueOwner || underlyingValueOwner.type() != *interpolationType))
33 continue; 32 continue;
34 ConversionCheckers conversionCheckers; 33 ConversionCheckers conversionCheckers;
35 PairwiseInterpolationValue result = interpolationType->maybeConvertPairw ise(*m_startKeyframe, *m_endKeyframe, environment, underlyingValueOwner.value(), conversionCheckers); 34 PairwiseInterpolationValue result = interpolationType->maybeConvertPairw ise(*m_startKeyframe, *m_endKeyframe, environment, underlyingValueOwner.value(), conversionCheckers);
36 addConversionCheckers(*interpolationType, conversionCheckers); 35 addConversionCheckers(*interpolationType, conversionCheckers);
37 if (result) { 36 if (result) {
38 return PairwisePrimitiveInterpolation::create(*interpolationType, 37 return PairwisePrimitiveInterpolation::create(*interpolationType,
39 std::move(result.startInterpolableValue), 38 std::move(result.startInterpolableValue),
40 std::move(result.endInterpolableValue), 39 std::move(result.endInterpolableValue),
41 result.nonInterpolableValue.release()); 40 result.nonInterpolableValue.release());
42 } 41 }
43 } 42 }
44 return nullptr; 43 return nullptr;
45 } 44 }
46 45
47 std::unique_ptr<TypedInterpolationValue> InvalidatableInterpolation::convertSing leKeyframe(const PropertySpecificKeyframe& keyframe, const InterpolationEnvironm ent& environment, const UnderlyingValueOwner& underlyingValueOwner) const 46 PassOwnPtr<TypedInterpolationValue> InvalidatableInterpolation::convertSingleKey frame(const PropertySpecificKeyframe& keyframe, const InterpolationEnvironment& environment, const UnderlyingValueOwner& underlyingValueOwner) const
48 { 47 {
49 if (keyframe.isNeutral() && !underlyingValueOwner) 48 if (keyframe.isNeutral() && !underlyingValueOwner)
50 return nullptr; 49 return nullptr;
51 for (const auto& interpolationType : m_interpolationTypes) { 50 for (const auto& interpolationType : m_interpolationTypes) {
52 if (keyframe.isNeutral() && underlyingValueOwner.type() != *interpolatio nType) 51 if (keyframe.isNeutral() && underlyingValueOwner.type() != *interpolatio nType)
53 continue; 52 continue;
54 ConversionCheckers conversionCheckers; 53 ConversionCheckers conversionCheckers;
55 InterpolationValue result = interpolationType->maybeConvertSingle(keyfra me, environment, underlyingValueOwner.value(), conversionCheckers); 54 InterpolationValue result = interpolationType->maybeConvertSingle(keyfra me, environment, underlyingValueOwner.value(), conversionCheckers);
56 addConversionCheckers(*interpolationType, conversionCheckers); 55 addConversionCheckers(*interpolationType, conversionCheckers);
57 if (result) 56 if (result)
58 return TypedInterpolationValue::create(*interpolationType, std::move (result.interpolableValue), result.nonInterpolableValue.release()); 57 return TypedInterpolationValue::create(*interpolationType, std::move (result.interpolableValue), result.nonInterpolableValue.release());
59 } 58 }
60 ASSERT(keyframe.isNeutral()); 59 ASSERT(keyframe.isNeutral());
61 return nullptr; 60 return nullptr;
62 } 61 }
63 62
64 void InvalidatableInterpolation::addConversionCheckers(const InterpolationType& type, ConversionCheckers& conversionCheckers) const 63 void InvalidatableInterpolation::addConversionCheckers(const InterpolationType& type, ConversionCheckers& conversionCheckers) const
65 { 64 {
66 for (size_t i = 0; i < conversionCheckers.size(); i++) { 65 for (size_t i = 0; i < conversionCheckers.size(); i++) {
67 conversionCheckers[i]->setType(type); 66 conversionCheckers[i]->setType(type);
68 m_conversionCheckers.append(std::move(conversionCheckers[i])); 67 m_conversionCheckers.append(std::move(conversionCheckers[i]));
69 } 68 }
70 } 69 }
71 70
72 std::unique_ptr<TypedInterpolationValue> InvalidatableInterpolation::maybeConver tUnderlyingValue(const InterpolationEnvironment& environment) const 71 PassOwnPtr<TypedInterpolationValue> InvalidatableInterpolation::maybeConvertUnde rlyingValue(const InterpolationEnvironment& environment) const
73 { 72 {
74 for (const auto& interpolationType : m_interpolationTypes) { 73 for (const auto& interpolationType : m_interpolationTypes) {
75 InterpolationValue result = interpolationType->maybeConvertUnderlyingVal ue(environment); 74 InterpolationValue result = interpolationType->maybeConvertUnderlyingVal ue(environment);
76 if (result) 75 if (result)
77 return TypedInterpolationValue::create(*interpolationType, std::move (result.interpolableValue), result.nonInterpolableValue.release()); 76 return TypedInterpolationValue::create(*interpolationType, std::move (result.interpolableValue), result.nonInterpolableValue.release());
78 } 77 }
79 return nullptr; 78 return nullptr;
80 } 79 }
81 80
82 bool InvalidatableInterpolation::dependsOnUnderlyingValue() const 81 bool InvalidatableInterpolation::dependsOnUnderlyingValue() const
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 { 118 {
120 ASSERT(!std::isnan(m_currentFraction)); 119 ASSERT(!std::isnan(m_currentFraction));
121 if (isCacheValid(environment, underlyingValueOwner)) 120 if (isCacheValid(environment, underlyingValueOwner))
122 return m_cachedValue.get(); 121 return m_cachedValue.get();
123 clearCache(); 122 clearCache();
124 if (m_currentFraction == 0) { 123 if (m_currentFraction == 0) {
125 m_cachedValue = convertSingleKeyframe(*m_startKeyframe, environment, und erlyingValueOwner); 124 m_cachedValue = convertSingleKeyframe(*m_startKeyframe, environment, und erlyingValueOwner);
126 } else if (m_currentFraction == 1) { 125 } else if (m_currentFraction == 1) {
127 m_cachedValue = convertSingleKeyframe(*m_endKeyframe, environment, under lyingValueOwner); 126 m_cachedValue = convertSingleKeyframe(*m_endKeyframe, environment, under lyingValueOwner);
128 } else { 127 } else {
129 std::unique_ptr<PairwisePrimitiveInterpolation> pairwiseConversion = may beConvertPairwise(environment, underlyingValueOwner); 128 OwnPtr<PairwisePrimitiveInterpolation> pairwiseConversion = maybeConvert Pairwise(environment, underlyingValueOwner);
130 if (pairwiseConversion) { 129 if (pairwiseConversion) {
131 m_cachedValue = pairwiseConversion->initialValue(); 130 m_cachedValue = pairwiseConversion->initialValue();
132 m_cachedPairConversion = std::move(pairwiseConversion); 131 m_cachedPairConversion = std::move(pairwiseConversion);
133 } else { 132 } else {
134 m_cachedPairConversion = FlipPrimitiveInterpolation::create( 133 m_cachedPairConversion = FlipPrimitiveInterpolation::create(
135 convertSingleKeyframe(*m_startKeyframe, environment, underlyingV alueOwner), 134 convertSingleKeyframe(*m_startKeyframe, environment, underlyingV alueOwner),
136 convertSingleKeyframe(*m_endKeyframe, environment, underlyingVal ueOwner)); 135 convertSingleKeyframe(*m_endKeyframe, environment, underlyingVal ueOwner));
137 } 136 }
138 m_cachedPairConversion->interpolateValue(m_currentFraction, m_cachedValu e); 137 m_cachedPairConversion->interpolateValue(m_currentFraction, m_cachedValu e);
139 } 138 }
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
203 underlyingValueOwner.set(currentValue); 202 underlyingValueOwner.set(currentValue);
204 else 203 else
205 currentValue->type().composite(underlyingValueOwner, underlyingFract ion, currentValue->value(), currentInterpolation.m_currentFraction); 204 currentValue->type().composite(underlyingValueOwner, underlyingFract ion, currentValue->value(), currentInterpolation.m_currentFraction);
206 } 205 }
207 206
208 if (shouldApply && underlyingValueOwner) 207 if (shouldApply && underlyingValueOwner)
209 underlyingValueOwner.type().apply(*underlyingValueOwner.value().interpol ableValue, underlyingValueOwner.value().nonInterpolableValue.get(), environment) ; 208 underlyingValueOwner.type().apply(*underlyingValueOwner.value().interpol ableValue, underlyingValueOwner.value().nonInterpolableValue.get(), environment) ;
210 } 209 }
211 210
212 } // namespace blink 211 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698