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

Side by Side Diff: chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/ChromeAnimation.java

Issue 2743403006: [Android] Respect animation multiplier from Developer Options. (Closed)
Patch Set: x Created 3 years, 9 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2010 The Chromium Authors. All rights reserved. 1 // Copyright 2010 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 package org.chromium.chrome.browser.compositor.layouts; 5 package org.chromium.chrome.browser.compositor.layouts;
6 6
7 import android.annotation.TargetApi;
8 import android.os.Build;
7 import android.os.SystemClock; 9 import android.os.SystemClock;
10 import android.provider.Settings;
8 import android.view.animation.AccelerateInterpolator; 11 import android.view.animation.AccelerateInterpolator;
9 import android.view.animation.DecelerateInterpolator; 12 import android.view.animation.DecelerateInterpolator;
10 import android.view.animation.Interpolator; 13 import android.view.animation.Interpolator;
11 import android.view.animation.LinearInterpolator; 14 import android.view.animation.LinearInterpolator;
12 15
16 import org.chromium.base.ContextUtils;
17
13 import java.util.ArrayList; 18 import java.util.ArrayList;
14 import java.util.concurrent.atomic.AtomicBoolean; 19 import java.util.concurrent.atomic.AtomicBoolean;
15 20
16 /** 21 /**
17 * A class to handle simple animation sets. This can animate any object passed in by overriding 22 * A class to handle simple animation sets. This can animate any object passed in by overriding
18 * the ChromeAnimation.Animation object. 23 * the ChromeAnimation.Animation object.
19 * 24 *
20 * @param <T> The type of Object being animated by this ChromeAnimation set. 25 * @param <T> The type of Object being animated by this ChromeAnimation set.
21 */ 26 */
22 @SuppressWarnings("unchecked") 27 @SuppressWarnings("unchecked")
23 public class ChromeAnimation<T> { 28 public class ChromeAnimation<T> {
24 /** 29 /**
25 * The amount we jump into the animation for the first frame. We do this as we assume 30 * The amount we jump into the animation for the first frame. We do this as we assume
26 * the object be animated is already resting in the initial value specified. To avoid wasting 31 * the object be animated is already resting in the initial value specified. To avoid wasting
27 * a frame of animation on something that will look exactly the same, we jum p into the 32 * a frame of animation on something that will look exactly the same, we jum p into the
28 * animation by this frame offset (calculated by the desired time required t o draw one frame 33 * animation by this frame offset (calculated by the desired time required t o draw one frame
29 * at 60 FPS). 34 * at 60 FPS).
30 */ 35 */
31 private static final int FIRST_FRAME_OFFSET_MS = 1000 / 60; 36 private static final int FIRST_FRAME_OFFSET_MS = 1000 / 60;
32 37
33 /** 38 /**
34 * Can be used to slow down created animations for debugging purposes. 39 * Multiplier for animation durations for debugging. Can be set in Developer Options and cached
40 * here.
35 */ 41 */
36 private static final int ANIMATION_MULTIPLIER = 1; 42 private static Float sAnimationMultiplier;
mdjones 2017/03/15 20:50:38 I'm guessing this can't be final because it is set
Bernhard Bauer 2017/03/15 21:21:58 It's static, so it would have to be set when the c
mdjones 2017/03/15 22:13:12 Ah right. I think what you have is fine.
37 43
38 private final AtomicBoolean mFinishCalled = new AtomicBoolean(); 44 private final AtomicBoolean mFinishCalled = new AtomicBoolean();
39 private final ArrayList<Animation<T>> mAnimations = new ArrayList<Animation< T>>(); 45 private final ArrayList<Animation<T>> mAnimations = new ArrayList<Animation< T>>();
40 private long mCurrentTime; 46 private long mCurrentTime;
41 47
42 // Keep a reference to one of each standard interpolator to avoid allocation s. 48 // Keep a reference to one of each standard interpolator to avoid allocation s.
43 private static AccelerateInterpolator sAccelerateInterpolator; 49 private static AccelerateInterpolator sAccelerateInterpolator;
44 private static LinearInterpolator sLinearInterpolator; 50 private static LinearInterpolator sLinearInterpolator;
45 private static DecelerateInterpolator sDecelerateInterpolator; 51 private static DecelerateInterpolator sDecelerateInterpolator;
46 private static final Object sLock = new Object(); 52 private static final Object sLock = new Object();
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 * @param duration The duration of the animation. This does not include the startTime. 255 * @param duration The duration of the animation. This does not include the startTime.
250 * The duration must be strictly positive. 256 * The duration must be strictly positive.
251 * @param startTime The time at which this animation should start. 257 * @param startTime The time at which this animation should start.
252 */ 258 */
253 public Animation(T t, float start, float end, long duration, 259 public Animation(T t, float start, float end, long duration,
254 long startTime) { 260 long startTime) {
255 assert duration > 0; 261 assert duration > 0;
256 mAnimatedObject = t; 262 mAnimatedObject = t;
257 mStart = start; 263 mStart = start;
258 mEnd = end; 264 mEnd = end;
259 mDuration = duration * ANIMATION_MULTIPLIER; 265 float animationMultiplier = getAnimationMultiplier();
260 mStartDelay = startTime * ANIMATION_MULTIPLIER; 266 mDuration = (long) (duration * animationMultiplier);
267 mStartDelay = (long) (startTime * animationMultiplier);
261 mCurrentTime = 0; 268 mCurrentTime = 0;
262 } 269 }
263 270
271 @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
272 private float getAnimationMultiplier() {
273 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) retu rn 1f;
274
275 synchronized (sLock) {
276 if (sAnimationMultiplier == null) {
277 sAnimationMultiplier = Settings.Global.getFloat(
278 ContextUtils.getApplicationContext().getContentResol ver(),
279 Settings.Global.ANIMATOR_DURATION_SCALE, 1f);
280 }
281 return sAnimationMultiplier;
282 }
283 }
284
264 /** 285 /**
265 * Returns the object being animated. 286 * Returns the object being animated.
266 */ 287 */
267 protected T getAnimatedObject() { 288 protected T getAnimatedObject() {
268 return mAnimatedObject; 289 return mAnimatedObject;
269 } 290 }
270 291
271 /** 292 /**
272 * @param delayStartValue Whether to delay setting the animation's initi al value until 293 * @param delayStartValue Whether to delay setting the animation's initi al value until
273 * after the specified start delay (Default = false). 294 * after the specified start delay (Default = false).
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after
502 523
503 /** 524 /**
504 * Checks if the given property is being animated. 525 * Checks if the given property is being animated.
505 */ 526 */
506 @Override 527 @Override
507 public <V extends Enum<?>> boolean checkProperty(V prop) { 528 public <V extends Enum<?>> boolean checkProperty(V prop) {
508 return mProperty == prop; 529 return mProperty == prop;
509 } 530 }
510 } 531 }
511 } 532 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698