Index: ui/compositor/layer_animation_element.cc |
diff --git a/ui/compositor/layer_animation_element.cc b/ui/compositor/layer_animation_element.cc |
index 1e9f93fd7bc7510b66d57e22fda1aa6174343260..f802fb930b11cc27b927d5039e885b5f694b5157 100644 |
--- a/ui/compositor/layer_animation_element.cc |
+++ b/ui/compositor/layer_animation_element.cc |
@@ -44,6 +44,9 @@ class Pause : public LayerAnimationElement { |
} |
void OnGetTarget(TargetValue* target) const override {} |
void OnAbort(LayerAnimationDelegate* delegate) override {} |
+ bool AreStartAndTargetSame() override { |
+ return false; |
+ } |
DISALLOW_COPY_AND_ASSIGN(Pause); |
}; |
@@ -74,6 +77,10 @@ class InterpolatedTransformTransition : public LayerAnimationElement { |
void OnAbort(LayerAnimationDelegate* delegate) override {} |
+ bool AreStartAndTargetSame() override { |
+ return false; |
+ } |
+ |
private: |
std::unique_ptr<InterpolatedTransform> interpolated_transform_; |
@@ -107,6 +114,10 @@ class BoundsTransition : public LayerAnimationElement { |
void OnAbort(LayerAnimationDelegate* delegate) override {} |
+ bool AreStartAndTargetSame() override { |
+ return start_ == target_; |
+ } |
+ |
private: |
gfx::Rect start_; |
const gfx::Rect target_; |
@@ -141,6 +152,10 @@ class VisibilityTransition : public LayerAnimationElement { |
void OnAbort(LayerAnimationDelegate* delegate) override {} |
+ bool AreStartAndTargetSame() override { |
+ return start_ == target_; |
+ } |
+ |
private: |
bool start_; |
const bool target_; |
@@ -176,6 +191,10 @@ class BrightnessTransition : public LayerAnimationElement { |
void OnAbort(LayerAnimationDelegate* delegate) override {} |
+ bool AreStartAndTargetSame() override { |
+ return start_ == target_; |
+ } |
+ |
private: |
float start_; |
const float target_; |
@@ -211,6 +230,10 @@ class GrayscaleTransition : public LayerAnimationElement { |
void OnAbort(LayerAnimationDelegate* delegate) override {} |
+ bool AreStartAndTargetSame() override { |
+ return start_ == target_; |
+ } |
+ |
private: |
float start_; |
const float target_; |
@@ -246,6 +269,10 @@ class ColorTransition : public LayerAnimationElement { |
void OnAbort(LayerAnimationDelegate* delegate) override {} |
+ bool AreStartAndTargetSame() override { |
+ return start_ == target_; |
+ } |
+ |
private: |
SkColor start_; |
const SkColor target_; |
@@ -275,6 +302,7 @@ class ThreadedLayerAnimationElement : public LayerAnimationElement { |
return false; |
if (Started() && IsThreaded()) { |
+ LOG(ERROR) << "RemoveThreadedAnimation"; |
LayerThreadedAnimationDelegate* threaded = |
delegate->GetThreadedAnimationDelegate(); |
DCHECK(threaded); |
@@ -303,6 +331,7 @@ class ThreadedLayerAnimationElement : public LayerAnimationElement { |
set_effective_start_time(base::TimeTicks()); |
std::unique_ptr<cc::Animation> animation = CreateCCAnimation(); |
animation->set_needs_synchronized_start_time(true); |
+ LOG(ERROR) << "AddThreadedAnimation"; |
LayerThreadedAnimationDelegate* threaded = |
delegate->GetThreadedAnimationDelegate(); |
@@ -349,6 +378,7 @@ class ThreadedOpacityTransition : public ThreadedLayerAnimationElement { |
} |
std::unique_ptr<cc::Animation> CreateCCAnimation() override { |
+ LOG(ERROR) << "Create Opacity CC Animation"; |
std::unique_ptr<cc::AnimationCurve> animation_curve( |
new FloatAnimationCurveAdapter(tween_type(), start_, target_, |
duration())); |
@@ -362,6 +392,10 @@ class ThreadedOpacityTransition : public ThreadedLayerAnimationElement { |
target->opacity = target_; |
} |
+ bool AreStartAndTargetSame() override { |
+ return start_ == target_; |
+ } |
+ |
private: |
float start_; |
const float target_; |
@@ -413,6 +447,10 @@ class ThreadedTransformTransition : public ThreadedLayerAnimationElement { |
target->transform = target_; |
} |
+ bool AreStartAndTargetSame() override { |
+ return start_ == target_; |
+ } |
+ |
private: |
gfx::Transform start_; |
const gfx::Transform target_; |
@@ -479,7 +517,13 @@ void LayerAnimationElement::Start(LayerAnimationDelegate* delegate, |
DCHECK(first_frame_); |
animation_group_id_ = animation_group_id; |
last_progressed_fraction_ = 0.0; |
+ |
OnStart(delegate); |
+ if (AreStartAndTargetSame()) { |
+ ProgressToEnd(delegate); |
+ return; |
+ } |
+ |
RequestEffectiveStart(delegate); |
first_frame_ = false; |
} |