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

Side by Side Diff: cc/animation/animation.cc

Issue 423373003: CC: Support fractional iteration count on compositor animations (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase and review changes Created 6 years, 4 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 | Annotate | Revision Log
« no previous file with comments | « cc/animation/animation.h ('k') | cc/animation/animation_unittest.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 2012 The Chromium Authors. All rights reserved. 1 // Copyright 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 "cc/animation/animation.h" 5 #include "cc/animation/animation.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 8
9 #include "base/debug/trace_event.h" 9 #include "base/debug/trace_event.h"
10 #include "base/strings/string_util.h" 10 #include "base/strings/string_util.h"
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
187 return 0; 187 return 0;
188 188
189 // check if we are past active interval 189 // check if we are past active interval
190 bool is_past_total_duration = 190 bool is_past_total_duration =
191 (iterations_ > 0 && 191 (iterations_ > 0 &&
192 trimmed_in_seconds >= curve_->Duration() * iterations_); 192 trimmed_in_seconds >= curve_->Duration() * iterations_);
193 193
194 // We need to know the current iteration if we're alternating. 194 // We need to know the current iteration if we're alternating.
195 int iteration = 0; 195 int iteration = 0;
196 196
197 // If we are past the active interval, return iteration duration. 197 // If we are past the active interval, return iteration duration of last
198 // iteration
198 if (is_past_total_duration) { 199 if (is_past_total_duration) {
199 iteration = iterations_ - 1; 200 iteration = iterations_ - 1;
200 trimmed_in_seconds = curve_->Duration(); 201 double frac = fmod(curve_->Duration() * iterations_, curve_->Duration());
202 trimmed_in_seconds = frac == 0 ? curve_->Duration() : frac;
201 } else { 203 } else {
202 iteration = static_cast<int>(trimmed_in_seconds / curve_->Duration()); 204 iteration = static_cast<int>(trimmed_in_seconds / curve_->Duration());
203 // Calculate x where trimmed = x + n * curve_->Duration() for some positive 205 // Calculate x where trimmed = x + n * curve_->Duration() for some positive
204 // integer n. 206 // integer n.
205 trimmed_in_seconds = fmod(trimmed_in_seconds, curve_->Duration()); 207 trimmed_in_seconds = fmod(trimmed_in_seconds, curve_->Duration());
206 } 208 }
207 209
208 // check if we are running the animation in reverse direction for the current 210 // check if we are running the animation in reverse direction for the current
209 // iteration 211 // iteration
210 bool reverse = (direction_ == Reverse) || 212 bool reverse = (direction_ == Reverse) ||
(...skipping 28 matching lines...) Expand all
239 // the main thread. 241 // the main thread.
240 if (run_state_ == Animation::Paused || 242 if (run_state_ == Animation::Paused ||
241 other->run_state_ == Animation::Paused) { 243 other->run_state_ == Animation::Paused) {
242 other->run_state_ = run_state_; 244 other->run_state_ = run_state_;
243 other->pause_time_ = pause_time_; 245 other->pause_time_ = pause_time_;
244 other->total_paused_time_ = total_paused_time_; 246 other->total_paused_time_ = total_paused_time_;
245 } 247 }
246 } 248 }
247 249
248 } // namespace cc 250 } // namespace cc
OLDNEW
« no previous file with comments | « cc/animation/animation.h ('k') | cc/animation/animation_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698