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

Unified Diff: ui/compositor/layer_animation_sequence.cc

Issue 11316315: Remove ui::LayerAnimationSequence::duration and ui::LayerAnimationElement::duration. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Make unit tests use IsFinished() instead of duration() Created 8 years 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/compositor/layer_animation_sequence.h ('k') | ui/compositor/layer_animation_sequence_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/compositor/layer_animation_sequence.cc
diff --git a/ui/compositor/layer_animation_sequence.cc b/ui/compositor/layer_animation_sequence.cc
index 2a58e1fdf5be9db1edd8aca80ce248a04b0051a0..8850fe08f315d62c634cdbe0c5ede2c47930e27f 100644
--- a/ui/compositor/layer_animation_sequence.cc
+++ b/ui/compositor/layer_animation_sequence.cc
@@ -38,34 +38,21 @@ void LayerAnimationSequence::Progress(base::TimeDelta elapsed,
if (elements_.empty())
return;
- if (is_cyclic_ && duration_ > base::TimeDelta()) {
- // If delta = elapsed - last_start_ is huge, we can skip ahead by complete
- // loops to save time.
- base::TimeDelta delta = elapsed - last_start_;
- int64 k = delta.ToInternalValue() / duration_.ToInternalValue() - 1;
-
- last_start_ += base::TimeDelta::FromInternalValue(
- k * duration_.ToInternalValue());
- }
-
size_t current_index = last_element_ % elements_.size();
+ base::TimeDelta element_duration;
while ((is_cyclic_ || last_element_ < elements_.size()) &&
- (last_start_ + elements_[current_index]->duration() < elapsed)) {
+ elements_[current_index]->IsFinished(elapsed - last_start_,
+ &element_duration)) {
// Let the element we're passing finish.
- if (elements_[current_index]->Progress(1.0, delegate))
+ if (elements_[current_index]->Progress(elapsed - last_start_, delegate))
redraw_required = true;
- last_start_ += elements_[current_index]->duration();
+ last_start_ += element_duration;
++last_element_;
current_index = last_element_ % elements_.size();
}
if (is_cyclic_ || last_element_ < elements_.size()) {
- double t = 1.0;
- if (elements_[current_index]->duration() > base::TimeDelta()) {
- t = (elapsed - last_start_).InMillisecondsF() /
- elements_[current_index]->duration().InMillisecondsF();
- }
- if (elements_[current_index]->Progress(t, delegate))
+ if (elements_[current_index]->Progress(elapsed - last_start_, delegate))
redraw_required = true;
}
@@ -74,7 +61,51 @@ void LayerAnimationSequence::Progress(base::TimeDelta elapsed,
if (redraw_required)
delegate->ScheduleDrawForAnimation();
- if (!is_cyclic_ && elapsed == duration_) {
+ if (!is_cyclic_ && last_element_ == elements_.size()) {
+ last_element_ = 0;
+ last_start_ = base::TimeDelta::FromMilliseconds(0);
+ NotifyEnded();
+ }
+}
+
+bool LayerAnimationSequence::IsFinished(base::TimeDelta elapsed) {
+ if (is_cyclic_)
+ return false;
+
+ if (elements_.empty())
+ return true;
+
+ base::TimeDelta current_start = last_start_;
+ size_t current_index = last_element_;
+ base::TimeDelta element_duration;
+ while ((current_index < elements_.size()) &&
+ elements_[current_index]->IsFinished(elapsed - current_start,
+ &element_duration)) {
+ current_start += element_duration;
+ ++current_index;
+ }
+
+ return (current_index == elements_.size());
+}
+
+void LayerAnimationSequence::ProgressToEnd(LayerAnimationDelegate* delegate) {
+ bool redraw_required = false;
+
+ if (elements_.empty())
+ return;
+
+ size_t current_index = last_element_ % elements_.size();
+ while (current_index < elements_.size()) {
+ if (elements_[current_index]->ProgressToEnd(delegate))
+ redraw_required = true;
+ ++current_index;
+ ++last_element_;
+ }
+
+ if (redraw_required)
+ delegate->ScheduleDrawForAnimation();
+
+ if (!is_cyclic_) {
last_element_ = 0;
last_start_ = base::TimeDelta::FromMilliseconds(0);
NotifyEnded();
@@ -102,8 +133,6 @@ void LayerAnimationSequence::Abort() {
}
void LayerAnimationSequence::AddElement(LayerAnimationElement* element) {
- // Update duration and properties.
- duration_ += element->duration();
properties_.insert(element->properties().begin(),
element->properties().end());
elements_.push_back(make_linked_ptr(element));
« no previous file with comments | « ui/compositor/layer_animation_sequence.h ('k') | ui/compositor/layer_animation_sequence_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698