| 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_sequence.h" | 5 #include "ui/compositor/layer_animation_sequence.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <iterator> | 8 #include <iterator> |
| 9 | 9 |
| 10 #include "base/debug/trace_event.h" | 10 #include "base/debug/trace_event.h" |
| 11 #include "cc/animation/animation_id_provider.h" | 11 #include "cc/animation/animation_id_provider.h" |
| 12 #include "ui/compositor/layer_animation_delegate.h" | 12 #include "ui/compositor/layer_animation_delegate.h" |
| 13 #include "ui/compositor/layer_animation_element.h" | 13 #include "ui/compositor/layer_animation_element.h" |
| 14 #include "ui/compositor/layer_animation_observer.h" | 14 #include "ui/compositor/layer_animation_observer.h" |
| 15 #include "ui/gfx/frame_time.h" |
| 15 | 16 |
| 16 namespace ui { | 17 namespace ui { |
| 17 | 18 |
| 18 LayerAnimationSequence::LayerAnimationSequence() | 19 LayerAnimationSequence::LayerAnimationSequence() |
| 19 : is_cyclic_(false), | 20 : is_cyclic_(false), |
| 20 last_element_(0), | 21 last_element_(0), |
| 21 waiting_for_group_start_(false), | 22 waiting_for_group_start_(false), |
| 22 animation_group_id_(0), | 23 animation_group_id_(0), |
| 23 last_progressed_fraction_(0.0), | 24 last_progressed_fraction_(0.0), |
| 24 weak_ptr_factory_(this) { | 25 weak_ptr_factory_(this) { |
| 25 } | 26 } |
| 26 | 27 |
| 27 LayerAnimationSequence::LayerAnimationSequence(LayerAnimationElement* element) | 28 LayerAnimationSequence::LayerAnimationSequence(LayerAnimationElement* element) |
| 28 : is_cyclic_(false), | 29 : is_cyclic_(false), |
| 29 last_element_(0), | 30 last_element_(0), |
| 30 waiting_for_group_start_(false), | 31 waiting_for_group_start_(false), |
| 31 animation_group_id_(0), | 32 animation_group_id_(0), |
| 32 last_progressed_fraction_(0.0), | 33 last_progressed_fraction_(0.0), |
| 33 weak_ptr_factory_(this) { | 34 weak_ptr_factory_(this) { |
| 34 AddElement(element); | 35 AddElement(element); |
| 35 } | 36 } |
| 36 | 37 |
| 37 LayerAnimationSequence::~LayerAnimationSequence() { | 38 LayerAnimationSequence::~LayerAnimationSequence() { |
| 38 FOR_EACH_OBSERVER(LayerAnimationObserver, | 39 FOR_EACH_OBSERVER(LayerAnimationObserver, |
| 39 observers_, | 40 observers_, |
| 40 DetachedFromSequence(this, true)); | 41 DetachedFromSequence(this, true)); |
| 41 } | 42 } |
| 42 | 43 |
| 43 void LayerAnimationSequence::Start(LayerAnimationDelegate* delegate) { | 44 void LayerAnimationSequence::Start(LayerAnimationDelegate* delegate) { |
| 44 DCHECK(start_time_ != base::TimeTicks()); | 45 DCHECK(start_time_ != gfx::FrameTime()); |
| 45 last_progressed_fraction_ = 0.0; | 46 last_progressed_fraction_ = 0.0; |
| 46 if (elements_.empty()) | 47 if (elements_.empty()) |
| 47 return; | 48 return; |
| 48 | 49 |
| 49 elements_[0]->set_requested_start_time(start_time_); | 50 elements_[0]->set_requested_start_time(start_time_); |
| 50 elements_[0]->Start(delegate, animation_group_id_); | 51 elements_[0]->Start(delegate, animation_group_id_); |
| 51 } | 52 } |
| 52 | 53 |
| 53 void LayerAnimationSequence::Progress(base::TimeTicks now, | 54 void LayerAnimationSequence::Progress(gfx::FrameTime now, |
| 54 LayerAnimationDelegate* delegate) { | 55 LayerAnimationDelegate* delegate) { |
| 55 DCHECK(start_time_ != base::TimeTicks()); | 56 DCHECK(start_time_ != gfx::FrameTime()); |
| 56 bool redraw_required = false; | 57 bool redraw_required = false; |
| 57 | 58 |
| 58 if (elements_.empty()) | 59 if (elements_.empty()) |
| 59 return; | 60 return; |
| 60 | 61 |
| 61 if (last_element_ == 0) | 62 if (last_element_ == 0) |
| 62 last_start_ = start_time_; | 63 last_start_ = start_time_; |
| 63 | 64 |
| 64 size_t current_index = last_element_ % elements_.size(); | 65 size_t current_index = last_element_ % elements_.size(); |
| 65 base::TimeDelta element_duration; | 66 base::TimeDelta element_duration; |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 98 delegate->ScheduleDrawForAnimation(); | 99 delegate->ScheduleDrawForAnimation(); |
| 99 | 100 |
| 100 if (!is_cyclic_ && last_element_ == elements_.size()) { | 101 if (!is_cyclic_ && last_element_ == elements_.size()) { |
| 101 last_element_ = 0; | 102 last_element_ = 0; |
| 102 waiting_for_group_start_ = false; | 103 waiting_for_group_start_ = false; |
| 103 animation_group_id_ = 0; | 104 animation_group_id_ = 0; |
| 104 NotifyEnded(); | 105 NotifyEnded(); |
| 105 } | 106 } |
| 106 } | 107 } |
| 107 | 108 |
| 108 bool LayerAnimationSequence::IsFinished(base::TimeTicks time) { | 109 bool LayerAnimationSequence::IsFinished(gfx::FrameTime time) { |
| 109 if (is_cyclic_ || waiting_for_group_start_) | 110 if (is_cyclic_ || waiting_for_group_start_) |
| 110 return false; | 111 return false; |
| 111 | 112 |
| 112 if (elements_.empty()) | 113 if (elements_.empty()) |
| 113 return true; | 114 return true; |
| 114 | 115 |
| 115 if (last_element_ == 0) | 116 if (last_element_ == 0) |
| 116 last_start_ = start_time_; | 117 last_start_ = start_time_; |
| 117 | 118 |
| 118 base::TimeTicks current_start = last_start_; | 119 gfx::FrameTime current_start = last_start_; |
| 119 size_t current_index = last_element_; | 120 size_t current_index = last_element_; |
| 120 base::TimeDelta element_duration; | 121 base::TimeDelta element_duration; |
| 121 while (current_index < elements_.size()) { | 122 while (current_index < elements_.size()) { |
| 122 elements_[current_index]->set_requested_start_time(current_start); | 123 elements_[current_index]->set_requested_start_time(current_start); |
| 123 if (!elements_[current_index]->IsFinished(time, &element_duration)) | 124 if (!elements_[current_index]->IsFinished(time, &element_duration)) |
| 124 break; | 125 break; |
| 125 | 126 |
| 126 current_start += element_duration; | 127 current_start += element_duration; |
| 127 ++current_index; | 128 ++current_index; |
| 128 } | 129 } |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 218 if (elements_.empty() || event.group_id != animation_group_id_) | 219 if (elements_.empty() || event.group_id != animation_group_id_) |
| 219 return; | 220 return; |
| 220 | 221 |
| 221 size_t current_index = last_element_ % elements_.size(); | 222 size_t current_index = last_element_ % elements_.size(); |
| 222 const LayerAnimationElement::AnimatableProperties& element_properties = | 223 const LayerAnimationElement::AnimatableProperties& element_properties = |
| 223 elements_[current_index]->properties(); | 224 elements_[current_index]->properties(); |
| 224 LayerAnimationElement::AnimatableProperty event_property = | 225 LayerAnimationElement::AnimatableProperty event_property = |
| 225 LayerAnimationElement::ToAnimatableProperty(event.target_property); | 226 LayerAnimationElement::ToAnimatableProperty(event.target_property); |
| 226 DCHECK(element_properties.find(event_property) != element_properties.end()); | 227 DCHECK(element_properties.find(event_property) != element_properties.end()); |
| 227 elements_[current_index]->set_effective_start_time( | 228 elements_[current_index]->set_effective_start_time( |
| 228 base::TimeTicks::FromInternalValue( | 229 gfx::FrameTime::Unsafe_FromSecondsF(event.monotonic_time)); |
| 229 event.monotonic_time * base::Time::kMicrosecondsPerSecond)); | |
| 230 } | 230 } |
| 231 | 231 |
| 232 void LayerAnimationSequence::OnScheduled() { | 232 void LayerAnimationSequence::OnScheduled() { |
| 233 NotifyScheduled(); | 233 NotifyScheduled(); |
| 234 } | 234 } |
| 235 | 235 |
| 236 void LayerAnimationSequence::OnAnimatorDestroyed() { | 236 void LayerAnimationSequence::OnAnimatorDestroyed() { |
| 237 if (observers_.might_have_observers()) { | 237 if (observers_.might_have_observers()) { |
| 238 ObserverListBase<LayerAnimationObserver>::Iterator it(observers_); | 238 ObserverListBase<LayerAnimationObserver>::Iterator it(observers_); |
| 239 LayerAnimationObserver* obs; | 239 LayerAnimationObserver* obs; |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 279 | 279 |
| 280 LayerAnimationElement* LayerAnimationSequence::CurrentElement() const { | 280 LayerAnimationElement* LayerAnimationSequence::CurrentElement() const { |
| 281 if (elements_.empty()) | 281 if (elements_.empty()) |
| 282 return NULL; | 282 return NULL; |
| 283 | 283 |
| 284 size_t current_index = last_element_ % elements_.size(); | 284 size_t current_index = last_element_ % elements_.size(); |
| 285 return elements_[current_index].get(); | 285 return elements_[current_index].get(); |
| 286 } | 286 } |
| 287 | 287 |
| 288 } // namespace ui | 288 } // namespace ui |
| OLD | NEW |