| 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 | 15 |
| 16 namespace ui { | 16 namespace ui { |
| 17 | 17 |
| 18 LayerAnimationSequence::LayerAnimationSequence() | 18 LayerAnimationSequence::LayerAnimationSequence() |
| 19 : is_cyclic_(false), | 19 : properties_(LayerAnimationElement::UNKNOWN), |
| 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 : properties_(LayerAnimationElement::UNKNOWN), |
| 30 is_cyclic_(false), |
| 29 last_element_(0), | 31 last_element_(0), |
| 30 waiting_for_group_start_(false), | 32 waiting_for_group_start_(false), |
| 31 animation_group_id_(0), | 33 animation_group_id_(0), |
| 32 last_progressed_fraction_(0.0), | 34 last_progressed_fraction_(0.0), |
| 33 weak_ptr_factory_(this) { | 35 weak_ptr_factory_(this) { |
| 34 AddElement(element); | 36 AddElement(element); |
| 35 } | 37 } |
| 36 | 38 |
| 37 LayerAnimationSequence::~LayerAnimationSequence() { | 39 LayerAnimationSequence::~LayerAnimationSequence() { |
| 38 FOR_EACH_OBSERVER(LayerAnimationObserver, | 40 FOR_EACH_OBSERVER(LayerAnimationObserver, |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 171 while (current_index < elements_.size()) { | 173 while (current_index < elements_.size()) { |
| 172 elements_[current_index]->Abort(delegate); | 174 elements_[current_index]->Abort(delegate); |
| 173 ++current_index; | 175 ++current_index; |
| 174 } | 176 } |
| 175 last_element_ = 0; | 177 last_element_ = 0; |
| 176 waiting_for_group_start_ = false; | 178 waiting_for_group_start_ = false; |
| 177 NotifyAborted(); | 179 NotifyAborted(); |
| 178 } | 180 } |
| 179 | 181 |
| 180 void LayerAnimationSequence::AddElement(LayerAnimationElement* element) { | 182 void LayerAnimationSequence::AddElement(LayerAnimationElement* element) { |
| 181 properties_.insert(element->properties().begin(), | 183 properties_ |= element->properties(); |
| 182 element->properties().end()); | |
| 183 elements_.push_back(make_linked_ptr(element)); | 184 elements_.push_back(make_linked_ptr(element)); |
| 184 } | 185 } |
| 185 | 186 |
| 186 bool LayerAnimationSequence::HasConflictingProperty( | 187 bool LayerAnimationSequence::HasConflictingProperty( |
| 187 const LayerAnimationElement::AnimatableProperties& other) const { | 188 LayerAnimationElement::AnimatableProperties other) const { |
| 188 LayerAnimationElement::AnimatableProperties intersection; | 189 return (properties_ & other) != LayerAnimationElement::UNKNOWN; |
| 189 std::insert_iterator<LayerAnimationElement::AnimatableProperties> ii( | |
| 190 intersection, intersection.begin()); | |
| 191 std::set_intersection(properties_.begin(), properties_.end(), | |
| 192 other.begin(), other.end(), | |
| 193 ii); | |
| 194 return (intersection.size() > 0); | |
| 195 } | 190 } |
| 196 | 191 |
| 197 bool LayerAnimationSequence::IsFirstElementThreaded() const { | 192 bool LayerAnimationSequence::IsFirstElementThreaded() const { |
| 198 if (!elements_.empty()) | 193 if (!elements_.empty()) |
| 199 return elements_[0]->IsThreaded(); | 194 return elements_[0]->IsThreaded(); |
| 200 | 195 |
| 201 return false; | 196 return false; |
| 202 } | 197 } |
| 203 | 198 |
| 204 void LayerAnimationSequence::AddObserver(LayerAnimationObserver* observer) { | 199 void LayerAnimationSequence::AddObserver(LayerAnimationObserver* observer) { |
| 205 if (!observers_.HasObserver(observer)) { | 200 if (!observers_.HasObserver(observer)) { |
| 206 observers_.AddObserver(observer); | 201 observers_.AddObserver(observer); |
| 207 observer->AttachedToSequence(this); | 202 observer->AttachedToSequence(this); |
| 208 } | 203 } |
| 209 } | 204 } |
| 210 | 205 |
| 211 void LayerAnimationSequence::RemoveObserver(LayerAnimationObserver* observer) { | 206 void LayerAnimationSequence::RemoveObserver(LayerAnimationObserver* observer) { |
| 212 observers_.RemoveObserver(observer); | 207 observers_.RemoveObserver(observer); |
| 213 observer->DetachedFromSequence(this, true); | 208 observer->DetachedFromSequence(this, true); |
| 214 } | 209 } |
| 215 | 210 |
| 216 void LayerAnimationSequence::OnThreadedAnimationStarted( | 211 void LayerAnimationSequence::OnThreadedAnimationStarted( |
| 217 const cc::AnimationEvent& event) { | 212 const cc::AnimationEvent& event) { |
| 218 if (elements_.empty() || event.group_id != animation_group_id_) | 213 if (elements_.empty() || event.group_id != animation_group_id_) |
| 219 return; | 214 return; |
| 220 | 215 |
| 221 size_t current_index = last_element_ % elements_.size(); | 216 size_t current_index = last_element_ % elements_.size(); |
| 222 const LayerAnimationElement::AnimatableProperties& element_properties = | 217 LayerAnimationElement::AnimatableProperties element_properties = |
| 223 elements_[current_index]->properties(); | 218 elements_[current_index]->properties(); |
| 224 LayerAnimationElement::AnimatableProperty event_property = | 219 LayerAnimationElement::AnimatableProperty event_property = |
| 225 LayerAnimationElement::ToAnimatableProperty(event.target_property); | 220 LayerAnimationElement::ToAnimatableProperty(event.target_property); |
| 226 DCHECK(element_properties.find(event_property) != element_properties.end()); | 221 DCHECK(element_properties & event_property); |
| 227 elements_[current_index]->set_effective_start_time( | 222 elements_[current_index]->set_effective_start_time( |
| 228 base::TimeTicks::FromInternalValue( | 223 base::TimeTicks::FromInternalValue( |
| 229 event.monotonic_time * base::Time::kMicrosecondsPerSecond)); | 224 event.monotonic_time * base::Time::kMicrosecondsPerSecond)); |
| 230 } | 225 } |
| 231 | 226 |
| 232 void LayerAnimationSequence::OnScheduled() { | 227 void LayerAnimationSequence::OnScheduled() { |
| 233 NotifyScheduled(); | 228 NotifyScheduled(); |
| 234 } | 229 } |
| 235 | 230 |
| 236 void LayerAnimationSequence::OnAnimatorDestroyed() { | 231 void LayerAnimationSequence::OnAnimatorDestroyed() { |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 279 | 274 |
| 280 LayerAnimationElement* LayerAnimationSequence::CurrentElement() const { | 275 LayerAnimationElement* LayerAnimationSequence::CurrentElement() const { |
| 281 if (elements_.empty()) | 276 if (elements_.empty()) |
| 282 return NULL; | 277 return NULL; |
| 283 | 278 |
| 284 size_t current_index = last_element_ % elements_.size(); | 279 size_t current_index = last_element_ % elements_.size(); |
| 285 return elements_[current_index].get(); | 280 return elements_[current_index].get(); |
| 286 } | 281 } |
| 287 | 282 |
| 288 } // namespace ui | 283 } // namespace ui |
| OLD | NEW |