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

Side by Side Diff: ui/compositor/layer_animation_element_unittest.cc

Issue 11896017: Thread ui opacity animations (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Use cc layer's opacity instead of ui::Layer::opacity_ Created 7 years, 10 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 (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 16 matching lines...) Expand all
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::TimeTicks start_time; 29 base::TimeTicks start_time;
30 base::TimeDelta delta = base::TimeDelta::FromSeconds(1); 30 base::TimeDelta delta = base::TimeDelta::FromSeconds(1);
31 31
32 scoped_ptr<LayerAnimationElement> element( 32 scoped_ptr<LayerAnimationElement> element(
33 LayerAnimationElement::CreateTransformElement(target_transform, delta)); 33 LayerAnimationElement::CreateTransformElement(target_transform, delta));
34 34
35 for (int i = 0; i < 2; ++i) { 35 for (int i = 0; i < 2; ++i) {
36 start_time += delta; 36 start_time += delta;
37 element->set_start_time(start_time); 37 element->set_requested_start_time(start_time);
38 delegate.SetTransformFromAnimation(start_transform); 38 delegate.SetTransformFromAnimation(start_transform);
39 element->Progress(start_time, &delegate); 39 element->Progress(start_time, &delegate);
40 CheckApproximatelyEqual(start_transform, 40 CheckApproximatelyEqual(start_transform,
41 delegate.GetTransformForAnimation()); 41 delegate.GetTransformForAnimation());
42 element->Progress(start_time + delta/2, &delegate); 42 element->Progress(start_time + delta/2, &delegate);
43 CheckApproximatelyEqual(middle_transform, 43 CheckApproximatelyEqual(middle_transform,
44 delegate.GetTransformForAnimation()); 44 delegate.GetTransformForAnimation());
45
46 base::TimeDelta element_duration;
47 EXPECT_TRUE(element->IsFinished(start_time + delta, &element_duration));
48 EXPECT_EQ(delta, element_duration);
49
45 element->Progress(start_time + delta, &delegate); 50 element->Progress(start_time + delta, &delegate);
46 CheckApproximatelyEqual(target_transform, 51 CheckApproximatelyEqual(target_transform,
47 delegate.GetTransformForAnimation()); 52 delegate.GetTransformForAnimation());
48 } 53 }
49 54
50 LayerAnimationElement::TargetValue target_value(&delegate); 55 LayerAnimationElement::TargetValue target_value(&delegate);
51 element->GetTargetValue(&target_value); 56 element->GetTargetValue(&target_value);
52 CheckApproximatelyEqual(target_transform, target_value.transform); 57 CheckApproximatelyEqual(target_transform, target_value.transform);
53
54 base::TimeDelta element_duration;
55 EXPECT_TRUE(element->IsFinished(start_time + delta, &element_duration));
56 EXPECT_EQ(delta, element_duration);
57 } 58 }
58 59
59 // Check that the bounds element progresses the delegate as expected and 60 // Check that the bounds element progresses the delegate as expected and
60 // that the element can be reused after it completes. 61 // that the element can be reused after it completes.
61 TEST(LayerAnimationElementTest, BoundsElement) { 62 TEST(LayerAnimationElementTest, BoundsElement) {
62 TestLayerAnimationDelegate delegate; 63 TestLayerAnimationDelegate delegate;
63 gfx::Rect start, target, middle; 64 gfx::Rect start, target, middle;
64 start = target = middle = gfx::Rect(0, 0, 50, 50); 65 start = target = middle = gfx::Rect(0, 0, 50, 50);
65 start.set_x(-90); 66 start.set_x(-90);
66 target.set_x(90); 67 target.set_x(90);
67 base::TimeTicks start_time; 68 base::TimeTicks start_time;
68 base::TimeDelta delta = base::TimeDelta::FromSeconds(1); 69 base::TimeDelta delta = base::TimeDelta::FromSeconds(1);
69 70
70 scoped_ptr<LayerAnimationElement> element( 71 scoped_ptr<LayerAnimationElement> element(
71 LayerAnimationElement::CreateBoundsElement(target, delta)); 72 LayerAnimationElement::CreateBoundsElement(target, delta));
72 73
73 for (int i = 0; i < 2; ++i) { 74 for (int i = 0; i < 2; ++i) {
74 start_time += delta; 75 start_time += delta;
75 element->set_start_time(start_time); 76 element->set_requested_start_time(start_time);
76 delegate.SetBoundsFromAnimation(start); 77 delegate.SetBoundsFromAnimation(start);
77 element->Progress(start_time, &delegate); 78 element->Progress(start_time, &delegate);
78 CheckApproximatelyEqual(start, delegate.GetBoundsForAnimation()); 79 CheckApproximatelyEqual(start, delegate.GetBoundsForAnimation());
79 element->Progress(start_time + delta/2, &delegate); 80 element->Progress(start_time + delta/2, &delegate);
80 CheckApproximatelyEqual(middle, delegate.GetBoundsForAnimation()); 81 CheckApproximatelyEqual(middle, delegate.GetBoundsForAnimation());
82
83 base::TimeDelta element_duration;
84 EXPECT_TRUE(element->IsFinished(start_time + delta, &element_duration));
85 EXPECT_EQ(delta, element_duration);
86
81 element->Progress(start_time + delta, &delegate); 87 element->Progress(start_time + delta, &delegate);
82 CheckApproximatelyEqual(target, delegate.GetBoundsForAnimation()); 88 CheckApproximatelyEqual(target, delegate.GetBoundsForAnimation());
83 } 89 }
84 90
85 LayerAnimationElement::TargetValue target_value(&delegate); 91 LayerAnimationElement::TargetValue target_value(&delegate);
86 element->GetTargetValue(&target_value); 92 element->GetTargetValue(&target_value);
87 CheckApproximatelyEqual(target, target_value.bounds); 93 CheckApproximatelyEqual(target, target_value.bounds);
88
89 base::TimeDelta element_duration;
90 EXPECT_TRUE(element->IsFinished(start_time + delta, &element_duration));
91 EXPECT_EQ(delta, element_duration);
92 } 94 }
93 95
94 // Check that the opacity element progresses the delegate as expected and 96 // Check that the opacity element progresses the delegate as expected and
95 // that the element can be reused after it completes. 97 // that the element can be reused after it completes.
96 TEST(LayerAnimationElementTest, OpacityElement) { 98 TEST(LayerAnimationElementTest, OpacityElement) {
97 TestLayerAnimationDelegate delegate; 99 TestLayerAnimationDelegate delegate;
98 float start = 0.0; 100 float start = 0.0;
99 float middle = 0.5; 101 float middle = 0.5;
100 float target = 1.0; 102 float target = 1.0;
101 base::TimeTicks start_time; 103 base::TimeTicks start_time;
104 base::TimeTicks effective_start_time;
102 base::TimeDelta delta = base::TimeDelta::FromSeconds(1); 105 base::TimeDelta delta = base::TimeDelta::FromSeconds(1);
103 scoped_ptr<LayerAnimationElement> element( 106 scoped_ptr<LayerAnimationElement> element(
104 LayerAnimationElement::CreateOpacityElement(target, delta)); 107 LayerAnimationElement::CreateOpacityElement(target, delta));
108 element->set_animation_group_id(1);
105 109
106 for (int i = 0; i < 2; ++i) { 110 for (int i = 0; i < 2; ++i) {
107 start_time += delta; 111 start_time = effective_start_time + delta;
108 element->set_start_time(start_time); 112 element->set_requested_start_time(start_time);
109 delegate.SetOpacityFromAnimation(start); 113 delegate.SetOpacityFromAnimation(start);
110 element->Progress(start_time, &delegate); 114 element->Progress(start_time, &delegate);
111 EXPECT_FLOAT_EQ(start, delegate.GetOpacityForAnimation()); 115 EXPECT_FLOAT_EQ(start, element->last_progressed_fraction());
112 element->Progress(start_time + delta/2, &delegate); 116 effective_start_time = start_time + delta;
113 EXPECT_FLOAT_EQ(middle, delegate.GetOpacityForAnimation()); 117 element->set_effective_start_time(effective_start_time);
114 element->Progress(start_time + delta, &delegate); 118 element->Progress(effective_start_time, &delegate);
119 EXPECT_FLOAT_EQ(start, element->last_progressed_fraction());
120 element->Progress(effective_start_time + delta/2, &delegate);
121 EXPECT_FLOAT_EQ(middle, element->last_progressed_fraction());
122
123 base::TimeDelta element_duration;
124 EXPECT_TRUE(element->IsFinished(effective_start_time + delta,
125 &element_duration));
126 EXPECT_EQ(2 * delta, element_duration);
127
128 element->Progress(effective_start_time + delta, &delegate);
129 EXPECT_FLOAT_EQ(target, element->last_progressed_fraction());
115 EXPECT_FLOAT_EQ(target, delegate.GetOpacityForAnimation()); 130 EXPECT_FLOAT_EQ(target, delegate.GetOpacityForAnimation());
116 } 131 }
117 132
118 LayerAnimationElement::TargetValue target_value(&delegate); 133 LayerAnimationElement::TargetValue target_value(&delegate);
119 element->GetTargetValue(&target_value); 134 element->GetTargetValue(&target_value);
120 EXPECT_FLOAT_EQ(target, target_value.opacity); 135 EXPECT_FLOAT_EQ(target, target_value.opacity);
121
122 base::TimeDelta element_duration;
123 EXPECT_TRUE(element->IsFinished(start_time + delta, &element_duration));
124 EXPECT_EQ(delta, element_duration);
125 } 136 }
126 137
127 // Check that the visibility element progresses the delegate as expected and 138 // Check that the visibility element progresses the delegate as expected and
128 // that the element can be reused after it completes. 139 // that the element can be reused after it completes.
129 TEST(LayerAnimationElementTest, VisibilityElement) { 140 TEST(LayerAnimationElementTest, VisibilityElement) {
130 TestLayerAnimationDelegate delegate; 141 TestLayerAnimationDelegate delegate;
131 bool start = true; 142 bool start = true;
132 bool target = false; 143 bool target = false;
133 base::TimeTicks start_time; 144 base::TimeTicks start_time;
134 base::TimeDelta delta = base::TimeDelta::FromSeconds(1); 145 base::TimeDelta delta = base::TimeDelta::FromSeconds(1);
135 scoped_ptr<LayerAnimationElement> element( 146 scoped_ptr<LayerAnimationElement> element(
136 LayerAnimationElement::CreateVisibilityElement(target, delta)); 147 LayerAnimationElement::CreateVisibilityElement(target, delta));
137 148
138 for (int i = 0; i < 2; ++i) { 149 for (int i = 0; i < 2; ++i) {
139 start_time += delta; 150 start_time += delta;
140 element->set_start_time(start_time); 151 element->set_requested_start_time(start_time);
141 delegate.SetVisibilityFromAnimation(start); 152 delegate.SetVisibilityFromAnimation(start);
142 element->Progress(start_time, &delegate); 153 element->Progress(start_time, &delegate);
143 EXPECT_TRUE(delegate.GetVisibilityForAnimation()); 154 EXPECT_TRUE(delegate.GetVisibilityForAnimation());
144 element->Progress(start_time + delta/2, &delegate); 155 element->Progress(start_time + delta/2, &delegate);
145 EXPECT_TRUE(delegate.GetVisibilityForAnimation()); 156 EXPECT_TRUE(delegate.GetVisibilityForAnimation());
157
158 base::TimeDelta element_duration;
159 EXPECT_TRUE(element->IsFinished(start_time + delta, &element_duration));
160 EXPECT_EQ(delta, element_duration);
161
146 element->Progress(start_time + delta, &delegate); 162 element->Progress(start_time + delta, &delegate);
147 EXPECT_FALSE(delegate.GetVisibilityForAnimation()); 163 EXPECT_FALSE(delegate.GetVisibilityForAnimation());
148 } 164 }
149 165
150 LayerAnimationElement::TargetValue target_value(&delegate); 166 LayerAnimationElement::TargetValue target_value(&delegate);
151 element->GetTargetValue(&target_value); 167 element->GetTargetValue(&target_value);
152 EXPECT_FALSE(target_value.visibility); 168 EXPECT_FALSE(target_value.visibility);
153
154 base::TimeDelta element_duration;
155 EXPECT_TRUE(element->IsFinished(start_time + delta, &element_duration));
156 EXPECT_EQ(delta, element_duration);
157 } 169 }
158 170
159 // Check that the Brightness element progresses the delegate as expected and 171 // Check that the Brightness element progresses the delegate as expected and
160 // that the element can be reused after it completes. 172 // that the element can be reused after it completes.
161 TEST(LayerAnimationElementTest, BrightnessElement) { 173 TEST(LayerAnimationElementTest, BrightnessElement) {
162 TestLayerAnimationDelegate delegate; 174 TestLayerAnimationDelegate delegate;
163 float start = 0.0; 175 float start = 0.0;
164 float middle = 0.5; 176 float middle = 0.5;
165 float target = 1.0; 177 float target = 1.0;
166 base::TimeTicks start_time; 178 base::TimeTicks start_time;
167 base::TimeDelta delta = base::TimeDelta::FromSeconds(1); 179 base::TimeDelta delta = base::TimeDelta::FromSeconds(1);
168 scoped_ptr<LayerAnimationElement> element( 180 scoped_ptr<LayerAnimationElement> element(
169 LayerAnimationElement::CreateBrightnessElement(target, delta)); 181 LayerAnimationElement::CreateBrightnessElement(target, delta));
170 182
171 for (int i = 0; i < 2; ++i) { 183 for (int i = 0; i < 2; ++i) {
172 start_time += delta; 184 start_time += delta;
173 element->set_start_time(start_time); 185 element->set_requested_start_time(start_time);
174 delegate.SetBrightnessFromAnimation(start); 186 delegate.SetBrightnessFromAnimation(start);
175 element->Progress(start_time, &delegate); 187 element->Progress(start_time, &delegate);
176 EXPECT_FLOAT_EQ(start, delegate.GetBrightnessForAnimation()); 188 EXPECT_FLOAT_EQ(start, delegate.GetBrightnessForAnimation());
177 element->Progress(start_time + delta/2, &delegate); 189 element->Progress(start_time + delta/2, &delegate);
178 EXPECT_FLOAT_EQ(middle, delegate.GetBrightnessForAnimation()); 190 EXPECT_FLOAT_EQ(middle, delegate.GetBrightnessForAnimation());
191
192 base::TimeDelta element_duration;
193 EXPECT_TRUE(element->IsFinished(start_time + delta, &element_duration));
194 EXPECT_EQ(delta, element_duration);
195
179 element->Progress(start_time + delta, &delegate); 196 element->Progress(start_time + delta, &delegate);
180 EXPECT_FLOAT_EQ(target, delegate.GetBrightnessForAnimation()); 197 EXPECT_FLOAT_EQ(target, delegate.GetBrightnessForAnimation());
181 } 198 }
182 199
183 LayerAnimationElement::TargetValue target_value(&delegate); 200 LayerAnimationElement::TargetValue target_value(&delegate);
184 element->GetTargetValue(&target_value); 201 element->GetTargetValue(&target_value);
185 EXPECT_FLOAT_EQ(target, target_value.brightness); 202 EXPECT_FLOAT_EQ(target, target_value.brightness);
186
187 base::TimeDelta element_duration;
188 EXPECT_TRUE(element->IsFinished(start_time + delta, &element_duration));
189 EXPECT_EQ(delta, element_duration);
190 } 203 }
191 204
192 // Check that the Grayscale element progresses the delegate as expected and 205 // Check that the Grayscale element progresses the delegate as expected and
193 // that the element can be reused after it completes. 206 // that the element can be reused after it completes.
194 TEST(LayerAnimationElementTest, GrayscaleElement) { 207 TEST(LayerAnimationElementTest, GrayscaleElement) {
195 TestLayerAnimationDelegate delegate; 208 TestLayerAnimationDelegate delegate;
196 float start = 0.0; 209 float start = 0.0;
197 float middle = 0.5; 210 float middle = 0.5;
198 float target = 1.0; 211 float target = 1.0;
199 base::TimeTicks start_time; 212 base::TimeTicks start_time;
200 base::TimeDelta delta = base::TimeDelta::FromSeconds(1); 213 base::TimeDelta delta = base::TimeDelta::FromSeconds(1);
201 scoped_ptr<LayerAnimationElement> element( 214 scoped_ptr<LayerAnimationElement> element(
202 LayerAnimationElement::CreateGrayscaleElement(target, delta)); 215 LayerAnimationElement::CreateGrayscaleElement(target, delta));
203 216
204 for (int i = 0; i < 2; ++i) { 217 for (int i = 0; i < 2; ++i) {
205 start_time += delta; 218 start_time += delta;
206 element->set_start_time(start_time); 219 element->set_requested_start_time(start_time);
207 delegate.SetGrayscaleFromAnimation(start); 220 delegate.SetGrayscaleFromAnimation(start);
208 element->Progress(start_time, &delegate); 221 element->Progress(start_time, &delegate);
209 EXPECT_FLOAT_EQ(start, delegate.GetGrayscaleForAnimation()); 222 EXPECT_FLOAT_EQ(start, delegate.GetGrayscaleForAnimation());
210 element->Progress(start_time + delta/2, &delegate); 223 element->Progress(start_time + delta/2, &delegate);
211 EXPECT_FLOAT_EQ(middle, delegate.GetGrayscaleForAnimation()); 224 EXPECT_FLOAT_EQ(middle, delegate.GetGrayscaleForAnimation());
225
226 base::TimeDelta element_duration;
227 EXPECT_TRUE(element->IsFinished(start_time + delta, &element_duration));
228 EXPECT_EQ(delta, element_duration);
229
212 element->Progress(start_time + delta, &delegate); 230 element->Progress(start_time + delta, &delegate);
213 EXPECT_FLOAT_EQ(target, delegate.GetGrayscaleForAnimation()); 231 EXPECT_FLOAT_EQ(target, delegate.GetGrayscaleForAnimation());
214 } 232 }
215 233
216 LayerAnimationElement::TargetValue target_value(&delegate); 234 LayerAnimationElement::TargetValue target_value(&delegate);
217 element->GetTargetValue(&target_value); 235 element->GetTargetValue(&target_value);
218 EXPECT_FLOAT_EQ(target, target_value.grayscale); 236 EXPECT_FLOAT_EQ(target, target_value.grayscale);
219
220 base::TimeDelta element_duration;
221 EXPECT_TRUE(element->IsFinished(start_time + delta, &element_duration));
222 EXPECT_EQ(delta, element_duration);
223 } 237 }
224 238
225 // Check that the pause element progresses the delegate as expected and 239 // Check that the pause element progresses the delegate as expected and
226 // that the element can be reused after it completes. 240 // that the element can be reused after it completes.
227 TEST(LayerAnimationElementTest, PauseElement) { 241 TEST(LayerAnimationElementTest, PauseElement) {
228 LayerAnimationElement::AnimatableProperties properties; 242 LayerAnimationElement::AnimatableProperties properties;
229 properties.insert(LayerAnimationElement::TRANSFORM); 243 properties.insert(LayerAnimationElement::TRANSFORM);
230 properties.insert(LayerAnimationElement::BOUNDS); 244 properties.insert(LayerAnimationElement::BOUNDS);
231 properties.insert(LayerAnimationElement::OPACITY); 245 properties.insert(LayerAnimationElement::OPACITY);
232 properties.insert(LayerAnimationElement::BRIGHTNESS); 246 properties.insert(LayerAnimationElement::BRIGHTNESS);
233 properties.insert(LayerAnimationElement::GRAYSCALE); 247 properties.insert(LayerAnimationElement::GRAYSCALE);
234 base::TimeTicks start_time; 248 base::TimeTicks start_time;
235 base::TimeDelta delta = base::TimeDelta::FromSeconds(1); 249 base::TimeDelta delta = base::TimeDelta::FromSeconds(1);
236 250
237 scoped_ptr<LayerAnimationElement> element( 251 scoped_ptr<LayerAnimationElement> element(
238 LayerAnimationElement::CreatePauseElement(properties, delta)); 252 LayerAnimationElement::CreatePauseElement(properties, delta));
239 253
240 TestLayerAnimationDelegate delegate; 254 TestLayerAnimationDelegate delegate;
241 TestLayerAnimationDelegate copy = delegate; 255 TestLayerAnimationDelegate copy = delegate;
242 256
243 start_time += delta; 257 start_time += delta;
244 element->set_start_time(start_time); 258 element->set_requested_start_time(start_time);
259
260 // Pause should last for |delta|.
261 base::TimeDelta element_duration;
262 EXPECT_TRUE(element->IsFinished(start_time + delta, &element_duration));
263 EXPECT_EQ(delta, element_duration);
264
245 element->Progress(start_time + delta, &delegate); 265 element->Progress(start_time + delta, &delegate);
246 266
247 // Nothing should have changed. 267 // Nothing should have changed.
248 CheckApproximatelyEqual(delegate.GetBoundsForAnimation(), 268 CheckApproximatelyEqual(delegate.GetBoundsForAnimation(),
249 copy.GetBoundsForAnimation()); 269 copy.GetBoundsForAnimation());
250 CheckApproximatelyEqual(delegate.GetTransformForAnimation(), 270 CheckApproximatelyEqual(delegate.GetTransformForAnimation(),
251 copy.GetTransformForAnimation()); 271 copy.GetTransformForAnimation());
252 EXPECT_FLOAT_EQ(delegate.GetOpacityForAnimation(), 272 EXPECT_FLOAT_EQ(delegate.GetOpacityForAnimation(),
253 copy.GetOpacityForAnimation()); 273 copy.GetOpacityForAnimation());
254 EXPECT_FLOAT_EQ(delegate.GetBrightnessForAnimation(), 274 EXPECT_FLOAT_EQ(delegate.GetBrightnessForAnimation(),
255 copy.GetBrightnessForAnimation()); 275 copy.GetBrightnessForAnimation());
256 EXPECT_FLOAT_EQ(delegate.GetGrayscaleForAnimation(), 276 EXPECT_FLOAT_EQ(delegate.GetGrayscaleForAnimation(),
257 copy.GetGrayscaleForAnimation()); 277 copy.GetGrayscaleForAnimation());
258
259 // Pause should last for |delta|.
260 base::TimeDelta element_duration;
261 EXPECT_TRUE(element->IsFinished(start_time + delta, &element_duration));
262 EXPECT_EQ(delta, element_duration);
263 } 278 }
264 279
265 } // namespace 280 } // namespace
266 281
267 } // namespace ui 282 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698