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

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

Issue 2291923002: Check target value
Patch Set: Test Created 4 years, 3 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
« no previous file with comments | « ui/compositor/layer_animation_element.h ('k') | ui/compositor/layer_animator.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 <utility> 7 #include <utility>
8 8
9 #include "base/compiler_specific.h" 9 #include "base/compiler_specific.h"
10 #include "base/macros.h" 10 #include "base/macros.h"
(...skipping 26 matching lines...) Expand all
37 } 37 }
38 ~Pause() override {} 38 ~Pause() override {}
39 39
40 private: 40 private:
41 void OnStart(LayerAnimationDelegate* delegate) override {} 41 void OnStart(LayerAnimationDelegate* delegate) override {}
42 bool OnProgress(double t, LayerAnimationDelegate* delegate) override { 42 bool OnProgress(double t, LayerAnimationDelegate* delegate) override {
43 return false; 43 return false;
44 } 44 }
45 void OnGetTarget(TargetValue* target) const override {} 45 void OnGetTarget(TargetValue* target) const override {}
46 void OnAbort(LayerAnimationDelegate* delegate) override {} 46 void OnAbort(LayerAnimationDelegate* delegate) override {}
47 bool AreStartAndTargetSame() override {
48 return false;
49 }
47 50
48 DISALLOW_COPY_AND_ASSIGN(Pause); 51 DISALLOW_COPY_AND_ASSIGN(Pause);
49 }; 52 };
50 53
51 // InterpolatedTransformTransition --------------------------------------------- 54 // InterpolatedTransformTransition ---------------------------------------------
52 55
53 class InterpolatedTransformTransition : public LayerAnimationElement { 56 class InterpolatedTransformTransition : public LayerAnimationElement {
54 public: 57 public:
55 InterpolatedTransformTransition(InterpolatedTransform* interpolated_transform, 58 InterpolatedTransformTransition(InterpolatedTransform* interpolated_transform,
56 base::TimeDelta duration) 59 base::TimeDelta duration)
(...skipping 10 matching lines...) Expand all
67 interpolated_transform_->Interpolate(static_cast<float>(t))); 70 interpolated_transform_->Interpolate(static_cast<float>(t)));
68 return true; 71 return true;
69 } 72 }
70 73
71 void OnGetTarget(TargetValue* target) const override { 74 void OnGetTarget(TargetValue* target) const override {
72 target->transform = interpolated_transform_->Interpolate(1.0f); 75 target->transform = interpolated_transform_->Interpolate(1.0f);
73 } 76 }
74 77
75 void OnAbort(LayerAnimationDelegate* delegate) override {} 78 void OnAbort(LayerAnimationDelegate* delegate) override {}
76 79
80 bool AreStartAndTargetSame() override {
81 return false;
82 }
83
77 private: 84 private:
78 std::unique_ptr<InterpolatedTransform> interpolated_transform_; 85 std::unique_ptr<InterpolatedTransform> interpolated_transform_;
79 86
80 DISALLOW_COPY_AND_ASSIGN(InterpolatedTransformTransition); 87 DISALLOW_COPY_AND_ASSIGN(InterpolatedTransformTransition);
81 }; 88 };
82 89
83 // BoundsTransition ------------------------------------------------------------ 90 // BoundsTransition ------------------------------------------------------------
84 91
85 class BoundsTransition : public LayerAnimationElement { 92 class BoundsTransition : public LayerAnimationElement {
86 public: 93 public:
(...skipping 13 matching lines...) Expand all
100 gfx::Tween::RectValueBetween(t, start_, target_)); 107 gfx::Tween::RectValueBetween(t, start_, target_));
101 return true; 108 return true;
102 } 109 }
103 110
104 void OnGetTarget(TargetValue* target) const override { 111 void OnGetTarget(TargetValue* target) const override {
105 target->bounds = target_; 112 target->bounds = target_;
106 } 113 }
107 114
108 void OnAbort(LayerAnimationDelegate* delegate) override {} 115 void OnAbort(LayerAnimationDelegate* delegate) override {}
109 116
117 bool AreStartAndTargetSame() override {
118 return start_ == target_;
119 }
120
110 private: 121 private:
111 gfx::Rect start_; 122 gfx::Rect start_;
112 const gfx::Rect target_; 123 const gfx::Rect target_;
113 124
114 DISALLOW_COPY_AND_ASSIGN(BoundsTransition); 125 DISALLOW_COPY_AND_ASSIGN(BoundsTransition);
115 }; 126 };
116 127
117 // VisibilityTransition -------------------------------------------------------- 128 // VisibilityTransition --------------------------------------------------------
118 129
119 class VisibilityTransition : public LayerAnimationElement { 130 class VisibilityTransition : public LayerAnimationElement {
(...skipping 14 matching lines...) Expand all
134 delegate->SetVisibilityFromAnimation(t == 1.0 ? target_ : start_); 145 delegate->SetVisibilityFromAnimation(t == 1.0 ? target_ : start_);
135 return t == 1.0; 146 return t == 1.0;
136 } 147 }
137 148
138 void OnGetTarget(TargetValue* target) const override { 149 void OnGetTarget(TargetValue* target) const override {
139 target->visibility = target_; 150 target->visibility = target_;
140 } 151 }
141 152
142 void OnAbort(LayerAnimationDelegate* delegate) override {} 153 void OnAbort(LayerAnimationDelegate* delegate) override {}
143 154
155 bool AreStartAndTargetSame() override {
156 return start_ == target_;
157 }
158
144 private: 159 private:
145 bool start_; 160 bool start_;
146 const bool target_; 161 const bool target_;
147 162
148 DISALLOW_COPY_AND_ASSIGN(VisibilityTransition); 163 DISALLOW_COPY_AND_ASSIGN(VisibilityTransition);
149 }; 164 };
150 165
151 // BrightnessTransition -------------------------------------------------------- 166 // BrightnessTransition --------------------------------------------------------
152 167
153 class BrightnessTransition : public LayerAnimationElement { 168 class BrightnessTransition : public LayerAnimationElement {
(...skipping 15 matching lines...) Expand all
169 gfx::Tween::FloatValueBetween(t, start_, target_)); 184 gfx::Tween::FloatValueBetween(t, start_, target_));
170 return true; 185 return true;
171 } 186 }
172 187
173 void OnGetTarget(TargetValue* target) const override { 188 void OnGetTarget(TargetValue* target) const override {
174 target->brightness = target_; 189 target->brightness = target_;
175 } 190 }
176 191
177 void OnAbort(LayerAnimationDelegate* delegate) override {} 192 void OnAbort(LayerAnimationDelegate* delegate) override {}
178 193
194 bool AreStartAndTargetSame() override {
195 return start_ == target_;
196 }
197
179 private: 198 private:
180 float start_; 199 float start_;
181 const float target_; 200 const float target_;
182 201
183 DISALLOW_COPY_AND_ASSIGN(BrightnessTransition); 202 DISALLOW_COPY_AND_ASSIGN(BrightnessTransition);
184 }; 203 };
185 204
186 // GrayscaleTransition --------------------------------------------------------- 205 // GrayscaleTransition ---------------------------------------------------------
187 206
188 class GrayscaleTransition : public LayerAnimationElement { 207 class GrayscaleTransition : public LayerAnimationElement {
(...skipping 15 matching lines...) Expand all
204 gfx::Tween::FloatValueBetween(t, start_, target_)); 223 gfx::Tween::FloatValueBetween(t, start_, target_));
205 return true; 224 return true;
206 } 225 }
207 226
208 void OnGetTarget(TargetValue* target) const override { 227 void OnGetTarget(TargetValue* target) const override {
209 target->grayscale = target_; 228 target->grayscale = target_;
210 } 229 }
211 230
212 void OnAbort(LayerAnimationDelegate* delegate) override {} 231 void OnAbort(LayerAnimationDelegate* delegate) override {}
213 232
233 bool AreStartAndTargetSame() override {
234 return start_ == target_;
235 }
236
214 private: 237 private:
215 float start_; 238 float start_;
216 const float target_; 239 const float target_;
217 240
218 DISALLOW_COPY_AND_ASSIGN(GrayscaleTransition); 241 DISALLOW_COPY_AND_ASSIGN(GrayscaleTransition);
219 }; 242 };
220 243
221 // ColorTransition ------------------------------------------------------------- 244 // ColorTransition -------------------------------------------------------------
222 245
223 class ColorTransition : public LayerAnimationElement { 246 class ColorTransition : public LayerAnimationElement {
(...skipping 15 matching lines...) Expand all
239 gfx::Tween::ColorValueBetween(t, start_, target_)); 262 gfx::Tween::ColorValueBetween(t, start_, target_));
240 return true; 263 return true;
241 } 264 }
242 265
243 void OnGetTarget(TargetValue* target) const override { 266 void OnGetTarget(TargetValue* target) const override {
244 target->color = target_; 267 target->color = target_;
245 } 268 }
246 269
247 void OnAbort(LayerAnimationDelegate* delegate) override {} 270 void OnAbort(LayerAnimationDelegate* delegate) override {}
248 271
272 bool AreStartAndTargetSame() override {
273 return start_ == target_;
274 }
275
249 private: 276 private:
250 SkColor start_; 277 SkColor start_;
251 const SkColor target_; 278 const SkColor target_;
252 279
253 DISALLOW_COPY_AND_ASSIGN(ColorTransition); 280 DISALLOW_COPY_AND_ASSIGN(ColorTransition);
254 }; 281 };
255 282
256 // ThreadedLayerAnimationElement ----------------------------------------------- 283 // ThreadedLayerAnimationElement -----------------------------------------------
257 284
258 class ThreadedLayerAnimationElement : public LayerAnimationElement { 285 class ThreadedLayerAnimationElement : public LayerAnimationElement {
259 public: 286 public:
260 ThreadedLayerAnimationElement(AnimatableProperties properties, 287 ThreadedLayerAnimationElement(AnimatableProperties properties,
261 base::TimeDelta duration) 288 base::TimeDelta duration)
262 : LayerAnimationElement(properties, duration) { 289 : LayerAnimationElement(properties, duration) {
263 } 290 }
264 ~ThreadedLayerAnimationElement() override {} 291 ~ThreadedLayerAnimationElement() override {}
265 292
266 bool IsThreaded() const override { return !duration().is_zero(); } 293 bool IsThreaded() const override { return !duration().is_zero(); }
267 294
268 protected: 295 protected:
269 explicit ThreadedLayerAnimationElement(const LayerAnimationElement& element) 296 explicit ThreadedLayerAnimationElement(const LayerAnimationElement& element)
270 : LayerAnimationElement(element) { 297 : LayerAnimationElement(element) {
271 } 298 }
272 299
273 bool OnProgress(double t, LayerAnimationDelegate* delegate) override { 300 bool OnProgress(double t, LayerAnimationDelegate* delegate) override {
274 if (t < 1.0) 301 if (t < 1.0)
275 return false; 302 return false;
276 303
277 if (Started() && IsThreaded()) { 304 if (Started() && IsThreaded()) {
305 LOG(ERROR) << "RemoveThreadedAnimation";
278 LayerThreadedAnimationDelegate* threaded = 306 LayerThreadedAnimationDelegate* threaded =
279 delegate->GetThreadedAnimationDelegate(); 307 delegate->GetThreadedAnimationDelegate();
280 DCHECK(threaded); 308 DCHECK(threaded);
281 threaded->RemoveThreadedAnimation(animation_id()); 309 threaded->RemoveThreadedAnimation(animation_id());
282 } 310 }
283 311
284 OnEnd(delegate); 312 OnEnd(delegate);
285 return true; 313 return true;
286 } 314 }
287 315
288 void OnAbort(LayerAnimationDelegate* delegate) override { 316 void OnAbort(LayerAnimationDelegate* delegate) override {
289 if (delegate && Started() && IsThreaded()) { 317 if (delegate && Started() && IsThreaded()) {
290 LayerThreadedAnimationDelegate* threaded = 318 LayerThreadedAnimationDelegate* threaded =
291 delegate->GetThreadedAnimationDelegate(); 319 delegate->GetThreadedAnimationDelegate();
292 DCHECK(threaded); 320 DCHECK(threaded);
293 threaded->RemoveThreadedAnimation(animation_id()); 321 threaded->RemoveThreadedAnimation(animation_id());
294 } 322 }
295 } 323 }
296 324
297 void RequestEffectiveStart(LayerAnimationDelegate* delegate) override { 325 void RequestEffectiveStart(LayerAnimationDelegate* delegate) override {
298 DCHECK(animation_group_id()); 326 DCHECK(animation_group_id());
299 if (!IsThreaded()) { 327 if (!IsThreaded()) {
300 set_effective_start_time(requested_start_time()); 328 set_effective_start_time(requested_start_time());
301 return; 329 return;
302 } 330 }
303 set_effective_start_time(base::TimeTicks()); 331 set_effective_start_time(base::TimeTicks());
304 std::unique_ptr<cc::Animation> animation = CreateCCAnimation(); 332 std::unique_ptr<cc::Animation> animation = CreateCCAnimation();
305 animation->set_needs_synchronized_start_time(true); 333 animation->set_needs_synchronized_start_time(true);
334 LOG(ERROR) << "AddThreadedAnimation";
306 335
307 LayerThreadedAnimationDelegate* threaded = 336 LayerThreadedAnimationDelegate* threaded =
308 delegate->GetThreadedAnimationDelegate(); 337 delegate->GetThreadedAnimationDelegate();
309 DCHECK(threaded); 338 DCHECK(threaded);
310 threaded->AddThreadedAnimation(std::move(animation)); 339 threaded->AddThreadedAnimation(std::move(animation));
311 } 340 }
312 341
313 virtual void OnEnd(LayerAnimationDelegate* delegate) = 0; 342 virtual void OnEnd(LayerAnimationDelegate* delegate) = 0;
314 343
315 virtual std::unique_ptr<cc::Animation> CreateCCAnimation() = 0; 344 virtual std::unique_ptr<cc::Animation> CreateCCAnimation() = 0;
(...skipping 26 matching lines...) Expand all
342 start_, 371 start_,
343 target_)); 372 target_));
344 } 373 }
345 } 374 }
346 375
347 void OnEnd(LayerAnimationDelegate* delegate) override { 376 void OnEnd(LayerAnimationDelegate* delegate) override {
348 delegate->SetOpacityFromAnimation(target_); 377 delegate->SetOpacityFromAnimation(target_);
349 } 378 }
350 379
351 std::unique_ptr<cc::Animation> CreateCCAnimation() override { 380 std::unique_ptr<cc::Animation> CreateCCAnimation() override {
381 LOG(ERROR) << "Create Opacity CC Animation";
352 std::unique_ptr<cc::AnimationCurve> animation_curve( 382 std::unique_ptr<cc::AnimationCurve> animation_curve(
353 new FloatAnimationCurveAdapter(tween_type(), start_, target_, 383 new FloatAnimationCurveAdapter(tween_type(), start_, target_,
354 duration())); 384 duration()));
355 std::unique_ptr<cc::Animation> animation(cc::Animation::Create( 385 std::unique_ptr<cc::Animation> animation(cc::Animation::Create(
356 std::move(animation_curve), animation_id(), animation_group_id(), 386 std::move(animation_curve), animation_id(), animation_group_id(),
357 cc::TargetProperty::OPACITY)); 387 cc::TargetProperty::OPACITY));
358 return animation; 388 return animation;
359 } 389 }
360 390
361 void OnGetTarget(TargetValue* target) const override { 391 void OnGetTarget(TargetValue* target) const override {
362 target->opacity = target_; 392 target->opacity = target_;
363 } 393 }
364 394
395 bool AreStartAndTargetSame() override {
396 return start_ == target_;
397 }
398
365 private: 399 private:
366 float start_; 400 float start_;
367 const float target_; 401 const float target_;
368 402
369 DISALLOW_COPY_AND_ASSIGN(ThreadedOpacityTransition); 403 DISALLOW_COPY_AND_ASSIGN(ThreadedOpacityTransition);
370 }; 404 };
371 405
372 // ThreadedTransformTransition ------------------------------------------------- 406 // ThreadedTransformTransition -------------------------------------------------
373 407
374 class ThreadedTransformTransition : public ThreadedLayerAnimationElement { 408 class ThreadedTransformTransition : public ThreadedLayerAnimationElement {
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
406 std::unique_ptr<cc::Animation> animation(cc::Animation::Create( 440 std::unique_ptr<cc::Animation> animation(cc::Animation::Create(
407 std::move(animation_curve), animation_id(), animation_group_id(), 441 std::move(animation_curve), animation_id(), animation_group_id(),
408 cc::TargetProperty::TRANSFORM)); 442 cc::TargetProperty::TRANSFORM));
409 return animation; 443 return animation;
410 } 444 }
411 445
412 void OnGetTarget(TargetValue* target) const override { 446 void OnGetTarget(TargetValue* target) const override {
413 target->transform = target_; 447 target->transform = target_;
414 } 448 }
415 449
450 bool AreStartAndTargetSame() override {
451 return start_ == target_;
452 }
453
416 private: 454 private:
417 gfx::Transform start_; 455 gfx::Transform start_;
418 const gfx::Transform target_; 456 const gfx::Transform target_;
419 457
420 DISALLOW_COPY_AND_ASSIGN(ThreadedTransformTransition); 458 DISALLOW_COPY_AND_ASSIGN(ThreadedTransformTransition);
421 }; 459 };
422 460
423 } // namespace 461 } // namespace
424 462
425 // LayerAnimationElement::TargetValue ------------------------------------------ 463 // LayerAnimationElement::TargetValue ------------------------------------------
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
472 510
473 LayerAnimationElement::~LayerAnimationElement() { 511 LayerAnimationElement::~LayerAnimationElement() {
474 } 512 }
475 513
476 void LayerAnimationElement::Start(LayerAnimationDelegate* delegate, 514 void LayerAnimationElement::Start(LayerAnimationDelegate* delegate,
477 int animation_group_id) { 515 int animation_group_id) {
478 DCHECK(requested_start_time_ != base::TimeTicks()); 516 DCHECK(requested_start_time_ != base::TimeTicks());
479 DCHECK(first_frame_); 517 DCHECK(first_frame_);
480 animation_group_id_ = animation_group_id; 518 animation_group_id_ = animation_group_id;
481 last_progressed_fraction_ = 0.0; 519 last_progressed_fraction_ = 0.0;
520
482 OnStart(delegate); 521 OnStart(delegate);
522 if (AreStartAndTargetSame()) {
523 ProgressToEnd(delegate);
524 return;
525 }
526
483 RequestEffectiveStart(delegate); 527 RequestEffectiveStart(delegate);
484 first_frame_ = false; 528 first_frame_ = false;
485 } 529 }
486 530
487 bool LayerAnimationElement::Progress(base::TimeTicks now, 531 bool LayerAnimationElement::Progress(base::TimeTicks now,
488 LayerAnimationDelegate* delegate) { 532 LayerAnimationDelegate* delegate) {
489 DCHECK(requested_start_time_ != base::TimeTicks()); 533 DCHECK(requested_start_time_ != base::TimeTicks());
490 DCHECK(!first_frame_); 534 DCHECK(!first_frame_);
491 535
492 bool need_draw; 536 bool need_draw;
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
655 } 699 }
656 700
657 // static 701 // static
658 LayerAnimationElement* LayerAnimationElement::CreateColorElement( 702 LayerAnimationElement* LayerAnimationElement::CreateColorElement(
659 SkColor color, 703 SkColor color,
660 base::TimeDelta duration) { 704 base::TimeDelta duration) {
661 return new ColorTransition(color, duration); 705 return new ColorTransition(color, duration);
662 } 706 }
663 707
664 } // namespace ui 708 } // namespace ui
OLDNEW
« no previous file with comments | « ui/compositor/layer_animation_element.h ('k') | ui/compositor/layer_animator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698