OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "ui/compositor/layer_animation_element.h" | 5 #include "ui/compositor/layer_animation_element.h" |
6 | 6 |
7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
8 #include "base/compiler_specific.h" | 8 #include "base/compiler_specific.h" |
9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
10 #include "base/time.h" | 10 #include "base/time.h" |
(...skipping 15 matching lines...) Expand all Loading... |
26 gfx::Transform start_transform, target_transform, middle_transform; | 26 gfx::Transform start_transform, target_transform, middle_transform; |
27 start_transform.Rotate(-30.0); | 27 start_transform.Rotate(-30.0); |
28 target_transform.Rotate(30.0); | 28 target_transform.Rotate(30.0); |
29 base::TimeDelta delta = base::TimeDelta::FromSeconds(1); | 29 base::TimeDelta delta = base::TimeDelta::FromSeconds(1); |
30 | 30 |
31 scoped_ptr<LayerAnimationElement> element( | 31 scoped_ptr<LayerAnimationElement> element( |
32 LayerAnimationElement::CreateTransformElement(target_transform, delta)); | 32 LayerAnimationElement::CreateTransformElement(target_transform, delta)); |
33 | 33 |
34 for (int i = 0; i < 2; ++i) { | 34 for (int i = 0; i < 2; ++i) { |
35 delegate.SetTransformFromAnimation(start_transform); | 35 delegate.SetTransformFromAnimation(start_transform); |
36 element->Progress(0.0, &delegate); | 36 element->Progress(base::TimeDelta(), &delegate); |
37 CheckApproximatelyEqual(start_transform, | 37 CheckApproximatelyEqual(start_transform, |
38 delegate.GetTransformForAnimation()); | 38 delegate.GetTransformForAnimation()); |
39 element->Progress(0.5, &delegate); | 39 element->Progress(delta/2, &delegate); |
40 CheckApproximatelyEqual(middle_transform, | 40 CheckApproximatelyEqual(middle_transform, |
41 delegate.GetTransformForAnimation()); | 41 delegate.GetTransformForAnimation()); |
42 element->Progress(1.0, &delegate); | 42 element->Progress(delta, &delegate); |
43 CheckApproximatelyEqual(target_transform, | 43 CheckApproximatelyEqual(target_transform, |
44 delegate.GetTransformForAnimation()); | 44 delegate.GetTransformForAnimation()); |
45 } | 45 } |
46 | 46 |
47 LayerAnimationElement::TargetValue target_value(&delegate); | 47 LayerAnimationElement::TargetValue target_value(&delegate); |
48 element->GetTargetValue(&target_value); | 48 element->GetTargetValue(&target_value); |
49 CheckApproximatelyEqual(target_transform, target_value.transform); | 49 CheckApproximatelyEqual(target_transform, target_value.transform); |
50 | 50 |
51 EXPECT_EQ(delta, element->duration()); | 51 base::TimeDelta element_duration; |
| 52 EXPECT_TRUE(element->IsFinished(delta, &element_duration)); |
| 53 EXPECT_EQ(delta, element_duration); |
52 } | 54 } |
53 | 55 |
54 // Check that the bounds element progresses the delegate as expected and | 56 // Check that the bounds element progresses the delegate as expected and |
55 // that the element can be reused after it completes. | 57 // that the element can be reused after it completes. |
56 TEST(LayerAnimationElementTest, BoundsElement) { | 58 TEST(LayerAnimationElementTest, BoundsElement) { |
57 TestLayerAnimationDelegate delegate; | 59 TestLayerAnimationDelegate delegate; |
58 gfx::Rect start, target, middle; | 60 gfx::Rect start, target, middle; |
59 start = target = middle = gfx::Rect(0, 0, 50, 50); | 61 start = target = middle = gfx::Rect(0, 0, 50, 50); |
60 start.set_x(-90); | 62 start.set_x(-90); |
61 target.set_x(90); | 63 target.set_x(90); |
62 base::TimeDelta delta = base::TimeDelta::FromSeconds(1); | 64 base::TimeDelta delta = base::TimeDelta::FromSeconds(1); |
63 | 65 |
64 scoped_ptr<LayerAnimationElement> element( | 66 scoped_ptr<LayerAnimationElement> element( |
65 LayerAnimationElement::CreateBoundsElement(target, delta)); | 67 LayerAnimationElement::CreateBoundsElement(target, delta)); |
66 | 68 |
67 for (int i = 0; i < 2; ++i) { | 69 for (int i = 0; i < 2; ++i) { |
68 delegate.SetBoundsFromAnimation(start); | 70 delegate.SetBoundsFromAnimation(start); |
69 element->Progress(0.0, &delegate); | 71 element->Progress(base::TimeDelta(), &delegate); |
70 CheckApproximatelyEqual(start, delegate.GetBoundsForAnimation()); | 72 CheckApproximatelyEqual(start, delegate.GetBoundsForAnimation()); |
71 element->Progress(0.5, &delegate); | 73 element->Progress(delta/2, &delegate); |
72 CheckApproximatelyEqual(middle, delegate.GetBoundsForAnimation()); | 74 CheckApproximatelyEqual(middle, delegate.GetBoundsForAnimation()); |
73 element->Progress(1.0, &delegate); | 75 element->Progress(delta, &delegate); |
74 CheckApproximatelyEqual(target, delegate.GetBoundsForAnimation()); | 76 CheckApproximatelyEqual(target, delegate.GetBoundsForAnimation()); |
75 } | 77 } |
76 | 78 |
77 LayerAnimationElement::TargetValue target_value(&delegate); | 79 LayerAnimationElement::TargetValue target_value(&delegate); |
78 element->GetTargetValue(&target_value); | 80 element->GetTargetValue(&target_value); |
79 CheckApproximatelyEqual(target, target_value.bounds); | 81 CheckApproximatelyEqual(target, target_value.bounds); |
80 | 82 |
81 EXPECT_EQ(delta, element->duration()); | 83 base::TimeDelta element_duration; |
| 84 EXPECT_TRUE(element->IsFinished(delta, &element_duration)); |
| 85 EXPECT_EQ(delta, element_duration); |
82 } | 86 } |
83 | 87 |
84 // Check that the opacity element progresses the delegate as expected and | 88 // Check that the opacity element progresses the delegate as expected and |
85 // that the element can be reused after it completes. | 89 // that the element can be reused after it completes. |
86 TEST(LayerAnimationElementTest, OpacityElement) { | 90 TEST(LayerAnimationElementTest, OpacityElement) { |
87 TestLayerAnimationDelegate delegate; | 91 TestLayerAnimationDelegate delegate; |
88 float start = 0.0; | 92 float start = 0.0; |
89 float middle = 0.5; | 93 float middle = 0.5; |
90 float target = 1.0; | 94 float target = 1.0; |
91 base::TimeDelta delta = base::TimeDelta::FromSeconds(1); | 95 base::TimeDelta delta = base::TimeDelta::FromSeconds(1); |
92 scoped_ptr<LayerAnimationElement> element( | 96 scoped_ptr<LayerAnimationElement> element( |
93 LayerAnimationElement::CreateOpacityElement(target, delta)); | 97 LayerAnimationElement::CreateOpacityElement(target, delta)); |
94 | 98 |
95 for (int i = 0; i < 2; ++i) { | 99 for (int i = 0; i < 2; ++i) { |
96 delegate.SetOpacityFromAnimation(start); | 100 delegate.SetOpacityFromAnimation(start); |
97 element->Progress(0.0, &delegate); | 101 element->Progress(base::TimeDelta(), &delegate); |
98 EXPECT_FLOAT_EQ(start, delegate.GetOpacityForAnimation()); | 102 EXPECT_FLOAT_EQ(start, delegate.GetOpacityForAnimation()); |
99 element->Progress(0.5, &delegate); | 103 element->Progress(delta/2, &delegate); |
100 EXPECT_FLOAT_EQ(middle, delegate.GetOpacityForAnimation()); | 104 EXPECT_FLOAT_EQ(middle, delegate.GetOpacityForAnimation()); |
101 element->Progress(1.0, &delegate); | 105 element->Progress(delta, &delegate); |
102 EXPECT_FLOAT_EQ(target, delegate.GetOpacityForAnimation()); | 106 EXPECT_FLOAT_EQ(target, delegate.GetOpacityForAnimation()); |
103 } | 107 } |
104 | 108 |
105 LayerAnimationElement::TargetValue target_value(&delegate); | 109 LayerAnimationElement::TargetValue target_value(&delegate); |
106 element->GetTargetValue(&target_value); | 110 element->GetTargetValue(&target_value); |
107 EXPECT_FLOAT_EQ(target, target_value.opacity); | 111 EXPECT_FLOAT_EQ(target, target_value.opacity); |
108 | 112 |
109 EXPECT_EQ(delta, element->duration()); | 113 base::TimeDelta element_duration; |
| 114 EXPECT_TRUE(element->IsFinished(delta, &element_duration)); |
| 115 EXPECT_EQ(delta, element_duration); |
110 } | 116 } |
111 | 117 |
112 // Check that the visibility element progresses the delegate as expected and | 118 // Check that the visibility element progresses the delegate as expected and |
113 // that the element can be reused after it completes. | 119 // that the element can be reused after it completes. |
114 TEST(LayerAnimationElementTest, VisibilityElement) { | 120 TEST(LayerAnimationElementTest, VisibilityElement) { |
115 TestLayerAnimationDelegate delegate; | 121 TestLayerAnimationDelegate delegate; |
116 bool start = true; | 122 bool start = true; |
117 bool target = false; | 123 bool target = false; |
118 base::TimeDelta delta = base::TimeDelta::FromSeconds(1); | 124 base::TimeDelta delta = base::TimeDelta::FromSeconds(1); |
119 scoped_ptr<LayerAnimationElement> element( | 125 scoped_ptr<LayerAnimationElement> element( |
120 LayerAnimationElement::CreateVisibilityElement(target, delta)); | 126 LayerAnimationElement::CreateVisibilityElement(target, delta)); |
121 | 127 |
122 for (int i = 0; i < 2; ++i) { | 128 for (int i = 0; i < 2; ++i) { |
123 delegate.SetVisibilityFromAnimation(start); | 129 delegate.SetVisibilityFromAnimation(start); |
124 element->Progress(0.0, &delegate); | 130 element->Progress(base::TimeDelta(), &delegate); |
125 EXPECT_TRUE(delegate.GetVisibilityForAnimation()); | 131 EXPECT_TRUE(delegate.GetVisibilityForAnimation()); |
126 element->Progress(0.5, &delegate); | 132 element->Progress(delta/2, &delegate); |
127 EXPECT_TRUE(delegate.GetVisibilityForAnimation()); | 133 EXPECT_TRUE(delegate.GetVisibilityForAnimation()); |
128 element->Progress(1.0, &delegate); | 134 element->Progress(delta, &delegate); |
129 EXPECT_FALSE(delegate.GetVisibilityForAnimation()); | 135 EXPECT_FALSE(delegate.GetVisibilityForAnimation()); |
130 } | 136 } |
131 | 137 |
132 LayerAnimationElement::TargetValue target_value(&delegate); | 138 LayerAnimationElement::TargetValue target_value(&delegate); |
133 element->GetTargetValue(&target_value); | 139 element->GetTargetValue(&target_value); |
134 EXPECT_FALSE(target_value.visibility); | 140 EXPECT_FALSE(target_value.visibility); |
135 | 141 |
136 EXPECT_EQ(delta, element->duration()); | 142 base::TimeDelta element_duration; |
| 143 EXPECT_TRUE(element->IsFinished(delta, &element_duration)); |
| 144 EXPECT_EQ(delta, element_duration); |
137 } | 145 } |
138 | 146 |
139 // Check that the Brightness element progresses the delegate as expected and | 147 // Check that the Brightness element progresses the delegate as expected and |
140 // that the element can be reused after it completes. | 148 // that the element can be reused after it completes. |
141 TEST(LayerAnimationElementTest, BrightnessElement) { | 149 TEST(LayerAnimationElementTest, BrightnessElement) { |
142 TestLayerAnimationDelegate delegate; | 150 TestLayerAnimationDelegate delegate; |
143 float start = 0.0; | 151 float start = 0.0; |
144 float middle = 0.5; | 152 float middle = 0.5; |
145 float target = 1.0; | 153 float target = 1.0; |
146 base::TimeDelta delta = base::TimeDelta::FromSeconds(1); | 154 base::TimeDelta delta = base::TimeDelta::FromSeconds(1); |
147 scoped_ptr<LayerAnimationElement> element( | 155 scoped_ptr<LayerAnimationElement> element( |
148 LayerAnimationElement::CreateBrightnessElement(target, delta)); | 156 LayerAnimationElement::CreateBrightnessElement(target, delta)); |
149 | 157 |
150 for (int i = 0; i < 2; ++i) { | 158 for (int i = 0; i < 2; ++i) { |
151 delegate.SetBrightnessFromAnimation(start); | 159 delegate.SetBrightnessFromAnimation(start); |
152 element->Progress(0.0, &delegate); | 160 element->Progress(base::TimeDelta(), &delegate); |
153 EXPECT_FLOAT_EQ(start, delegate.GetBrightnessForAnimation()); | 161 EXPECT_FLOAT_EQ(start, delegate.GetBrightnessForAnimation()); |
154 element->Progress(0.5, &delegate); | 162 element->Progress(delta/2, &delegate); |
155 EXPECT_FLOAT_EQ(middle, delegate.GetBrightnessForAnimation()); | 163 EXPECT_FLOAT_EQ(middle, delegate.GetBrightnessForAnimation()); |
156 element->Progress(1.0, &delegate); | 164 element->Progress(delta, &delegate); |
157 EXPECT_FLOAT_EQ(target, delegate.GetBrightnessForAnimation()); | 165 EXPECT_FLOAT_EQ(target, delegate.GetBrightnessForAnimation()); |
158 } | 166 } |
159 | 167 |
160 LayerAnimationElement::TargetValue target_value(&delegate); | 168 LayerAnimationElement::TargetValue target_value(&delegate); |
161 element->GetTargetValue(&target_value); | 169 element->GetTargetValue(&target_value); |
162 EXPECT_FLOAT_EQ(target, target_value.brightness); | 170 EXPECT_FLOAT_EQ(target, target_value.brightness); |
163 | 171 |
164 EXPECT_EQ(delta, element->duration()); | 172 base::TimeDelta element_duration; |
| 173 EXPECT_TRUE(element->IsFinished(delta, &element_duration)); |
| 174 EXPECT_EQ(delta, element_duration); |
165 } | 175 } |
166 | 176 |
167 // Check that the Grayscale element progresses the delegate as expected and | 177 // Check that the Grayscale element progresses the delegate as expected and |
168 // that the element can be reused after it completes. | 178 // that the element can be reused after it completes. |
169 TEST(LayerAnimationElementTest, GrayscaleElement) { | 179 TEST(LayerAnimationElementTest, GrayscaleElement) { |
170 TestLayerAnimationDelegate delegate; | 180 TestLayerAnimationDelegate delegate; |
171 float start = 0.0; | 181 float start = 0.0; |
172 float middle = 0.5; | 182 float middle = 0.5; |
173 float target = 1.0; | 183 float target = 1.0; |
174 base::TimeDelta delta = base::TimeDelta::FromSeconds(1); | 184 base::TimeDelta delta = base::TimeDelta::FromSeconds(1); |
175 scoped_ptr<LayerAnimationElement> element( | 185 scoped_ptr<LayerAnimationElement> element( |
176 LayerAnimationElement::CreateGrayscaleElement(target, delta)); | 186 LayerAnimationElement::CreateGrayscaleElement(target, delta)); |
177 | 187 |
178 for (int i = 0; i < 2; ++i) { | 188 for (int i = 0; i < 2; ++i) { |
179 delegate.SetGrayscaleFromAnimation(start); | 189 delegate.SetGrayscaleFromAnimation(start); |
180 element->Progress(0.0, &delegate); | 190 element->Progress(base::TimeDelta(), &delegate); |
181 EXPECT_FLOAT_EQ(start, delegate.GetGrayscaleForAnimation()); | 191 EXPECT_FLOAT_EQ(start, delegate.GetGrayscaleForAnimation()); |
182 element->Progress(0.5, &delegate); | 192 element->Progress(delta/2, &delegate); |
183 EXPECT_FLOAT_EQ(middle, delegate.GetGrayscaleForAnimation()); | 193 EXPECT_FLOAT_EQ(middle, delegate.GetGrayscaleForAnimation()); |
184 element->Progress(1.0, &delegate); | 194 element->Progress(delta, &delegate); |
185 EXPECT_FLOAT_EQ(target, delegate.GetGrayscaleForAnimation()); | 195 EXPECT_FLOAT_EQ(target, delegate.GetGrayscaleForAnimation()); |
186 } | 196 } |
187 | 197 |
188 LayerAnimationElement::TargetValue target_value(&delegate); | 198 LayerAnimationElement::TargetValue target_value(&delegate); |
189 element->GetTargetValue(&target_value); | 199 element->GetTargetValue(&target_value); |
190 EXPECT_FLOAT_EQ(target, target_value.grayscale); | 200 EXPECT_FLOAT_EQ(target, target_value.grayscale); |
191 | 201 |
192 EXPECT_EQ(delta, element->duration()); | 202 base::TimeDelta element_duration; |
| 203 EXPECT_TRUE(element->IsFinished(delta, &element_duration)); |
| 204 EXPECT_EQ(delta, element_duration); |
193 } | 205 } |
194 | 206 |
195 // Check that the pause element progresses the delegate as expected and | 207 // Check that the pause element progresses the delegate as expected and |
196 // that the element can be reused after it completes. | 208 // that the element can be reused after it completes. |
197 TEST(LayerAnimationElementTest, PauseElement) { | 209 TEST(LayerAnimationElementTest, PauseElement) { |
198 LayerAnimationElement::AnimatableProperties properties; | 210 LayerAnimationElement::AnimatableProperties properties; |
199 properties.insert(LayerAnimationElement::TRANSFORM); | 211 properties.insert(LayerAnimationElement::TRANSFORM); |
200 properties.insert(LayerAnimationElement::BOUNDS); | 212 properties.insert(LayerAnimationElement::BOUNDS); |
201 properties.insert(LayerAnimationElement::OPACITY); | 213 properties.insert(LayerAnimationElement::OPACITY); |
202 properties.insert(LayerAnimationElement::BRIGHTNESS); | 214 properties.insert(LayerAnimationElement::BRIGHTNESS); |
203 properties.insert(LayerAnimationElement::GRAYSCALE); | 215 properties.insert(LayerAnimationElement::GRAYSCALE); |
204 base::TimeDelta delta = base::TimeDelta::FromSeconds(1); | 216 base::TimeDelta delta = base::TimeDelta::FromSeconds(1); |
205 | 217 |
206 scoped_ptr<LayerAnimationElement> element( | 218 scoped_ptr<LayerAnimationElement> element( |
207 LayerAnimationElement::CreatePauseElement(properties, delta)); | 219 LayerAnimationElement::CreatePauseElement(properties, delta)); |
208 | 220 |
209 TestLayerAnimationDelegate delegate; | 221 TestLayerAnimationDelegate delegate; |
210 TestLayerAnimationDelegate copy = delegate; | 222 TestLayerAnimationDelegate copy = delegate; |
211 | 223 |
212 element->Progress(1.0, &delegate); | 224 element->Progress(delta, &delegate); |
213 | 225 |
214 // Nothing should have changed. | 226 // Nothing should have changed. |
215 CheckApproximatelyEqual(delegate.GetBoundsForAnimation(), | 227 CheckApproximatelyEqual(delegate.GetBoundsForAnimation(), |
216 copy.GetBoundsForAnimation()); | 228 copy.GetBoundsForAnimation()); |
217 CheckApproximatelyEqual(delegate.GetTransformForAnimation(), | 229 CheckApproximatelyEqual(delegate.GetTransformForAnimation(), |
218 copy.GetTransformForAnimation()); | 230 copy.GetTransformForAnimation()); |
219 EXPECT_FLOAT_EQ(delegate.GetOpacityForAnimation(), | 231 EXPECT_FLOAT_EQ(delegate.GetOpacityForAnimation(), |
220 copy.GetOpacityForAnimation()); | 232 copy.GetOpacityForAnimation()); |
221 EXPECT_FLOAT_EQ(delegate.GetBrightnessForAnimation(), | 233 EXPECT_FLOAT_EQ(delegate.GetBrightnessForAnimation(), |
222 copy.GetBrightnessForAnimation()); | 234 copy.GetBrightnessForAnimation()); |
223 EXPECT_FLOAT_EQ(delegate.GetGrayscaleForAnimation(), | 235 EXPECT_FLOAT_EQ(delegate.GetGrayscaleForAnimation(), |
224 copy.GetGrayscaleForAnimation()); | 236 copy.GetGrayscaleForAnimation()); |
225 | 237 |
226 // Pause should last for |delta|. | 238 // Pause should last for |delta|. |
227 EXPECT_EQ(delta, element->duration()); | 239 base::TimeDelta element_duration; |
| 240 EXPECT_TRUE(element->IsFinished(delta, &element_duration)); |
| 241 EXPECT_EQ(delta, element_duration); |
228 } | 242 } |
229 | 243 |
230 } // namespace | 244 } // namespace |
231 | 245 |
232 } // namespace ui | 246 } // namespace ui |
OLD | NEW |