diff options
author | Brian Orr <brianorr@google.com> | 2021-08-11 19:11:45 +0000 |
---|---|---|
committer | Brian Orr <brianorr@google.com> | 2021-08-11 23:59:25 +0000 |
commit | ab1e0271287465c071b9b6ba89e6845fd7161063 (patch) | |
tree | 642e46e0ca778bf77b958c4973aaa8f6e030740e /graphics/java/android | |
parent | b6bd2054b05bb47779c041675f34828517288d73 (diff) | |
parent | 1cb4fdb115b920ff5df88c33047243bef48224a6 (diff) |
Merge SP1A.210811.001
Change-Id: I5aa7cf27a3a3cc16830c9947a826e30a0da481c4
Diffstat (limited to 'graphics/java/android')
4 files changed, 28 insertions, 17 deletions
diff --git a/graphics/java/android/graphics/BLASTBufferQueue.java b/graphics/java/android/graphics/BLASTBufferQueue.java index d13f1d3c17c3..5261af2503a2 100644 --- a/graphics/java/android/graphics/BLASTBufferQueue.java +++ b/graphics/java/android/graphics/BLASTBufferQueue.java @@ -35,7 +35,7 @@ public final class BLASTBufferQueue { private static native int nativeGetUndequeuedBufferCount(long ptr); private static native void nativeSetNextTransaction(long ptr, long transactionPtr); private static native void nativeUpdate(long ptr, long surfaceControl, long width, long height, - int format); + int format, long transactionPtr); private static native void nativeFlushShadowQueue(long ptr); private static native void nativeMergeWithNextTransaction(long ptr, long transactionPtr, long frameNumber); @@ -108,9 +108,15 @@ public final class BLASTBufferQueue { * @param width The new width for the buffer. * @param height The new height for the buffer. * @param format The new format for the buffer. + * @param t Adds destination frame changes to the passed in transaction. */ + public void update(SurfaceControl sc, int width, int height, @PixelFormat.Format int format, + SurfaceControl.Transaction t) { + nativeUpdate(mNativeObject, sc.mNativeObject, width, height, format, t.mNativeObject); + } + public void update(SurfaceControl sc, int width, int height, @PixelFormat.Format int format) { - nativeUpdate(mNativeObject, sc.mNativeObject, width, height, format); + nativeUpdate(mNativeObject, sc.mNativeObject, width, height, format, 0); } /** diff --git a/graphics/java/android/graphics/Paint.java b/graphics/java/android/graphics/Paint.java index 51bf6d539ce8..42e470b7f660 100644 --- a/graphics/java/android/graphics/Paint.java +++ b/graphics/java/android/graphics/Paint.java @@ -255,12 +255,6 @@ public class Paint { | FILTER_BITMAP_FLAG; /** - * These flags are always set on a reset paint or a new paint instantiated using - * {@link #Paint()}. - */ - private static final int DEFAULT_PAINT_FLAGS = ANTI_ALIAS_FLAG | DITHER_FLAG; - - /** * Font hinter option that disables font hinting. * * @see #setHinting(int) @@ -577,12 +571,12 @@ public class Paint { * On devices running {@link Build.VERSION_CODES#Q} and above, * {@code FILTER_BITMAP_FLAG} is set by this constructor, and it can be * cleared with {@link #setFlags} or {@link #setFilterBitmap}. - * On devices running {@link Build.VERSION_CODES#S} and above, {@code ANTI_ALIAS_FLAG} and - * {@code DITHER_FLAG} are set by this constructor, and they can be cleared with - * {@link #setFlags} or {@link #setAntiAlias} and {@link #setDither}, respectively.</p> + * On devices running {@link Build.VERSION_CODES#S} and above, {@code ANTI_ALIAS_FLAG} + * is set by this constructor, and it can be cleared with {@link #setFlags} or + * {@link #setAntiAlias}.</p> */ public Paint() { - this(DEFAULT_PAINT_FLAGS); + this(ANTI_ALIAS_FLAG); } /** @@ -627,7 +621,7 @@ public class Paint { /** Restores the paint to its default settings. */ public void reset() { nReset(mNativePaint); - setFlags(HIDDEN_DEFAULT_PAINT_FLAGS | DEFAULT_PAINT_FLAGS); + setFlags(HIDDEN_DEFAULT_PAINT_FLAGS | ANTI_ALIAS_FLAG); // TODO: Turning off hinting has undesirable side effects, we need to // revisit hinting once we add support for subpixel positioning diff --git a/graphics/java/android/graphics/drawable/RippleAnimationSession.java b/graphics/java/android/graphics/drawable/RippleAnimationSession.java index 492520910afd..872331c82603 100644 --- a/graphics/java/android/graphics/drawable/RippleAnimationSession.java +++ b/graphics/java/android/graphics/drawable/RippleAnimationSession.java @@ -67,7 +67,7 @@ public final class RippleAnimationSession { @NonNull RippleAnimationSession enter(Canvas canvas) { mStartTime = AnimationUtils.currentAnimationTimeMillis(); - if (isHwAccelerated(canvas)) { + if (useRTAnimations(canvas)) { enterHardware((RecordingCanvas) canvas); } else { enterSoftware(); @@ -82,7 +82,7 @@ public final class RippleAnimationSession { } @NonNull RippleAnimationSession exit(Canvas canvas) { - if (isHwAccelerated(canvas)) exitHardware((RecordingCanvas) canvas); + if (useRTAnimations(canvas)) exitHardware((RecordingCanvas) canvas); else exitSoftware(); return this; } @@ -102,8 +102,12 @@ public final class RippleAnimationSession { return this; } - private boolean isHwAccelerated(Canvas canvas) { - return canvas.isHardwareAccelerated() && !mForceSoftware; + private boolean useRTAnimations(Canvas canvas) { + if (mForceSoftware) return false; + if (!canvas.isHardwareAccelerated()) return false; + RecordingCanvas hwCanvas = (RecordingCanvas) canvas; + if (hwCanvas.mNode == null || !hwCanvas.mNode.isAttached()) return false; + return true; } private void exitSoftware() { diff --git a/graphics/java/android/graphics/drawable/RippleDrawable.java b/graphics/java/android/graphics/drawable/RippleDrawable.java index d3cff5cb81ff..7354c90c5c98 100644 --- a/graphics/java/android/graphics/drawable/RippleDrawable.java +++ b/graphics/java/android/graphics/drawable/RippleDrawable.java @@ -49,7 +49,9 @@ import android.graphics.RecordingCanvas; import android.graphics.Rect; import android.graphics.Shader; import android.os.Build; +import android.os.Looper; import android.util.AttributeSet; +import android.util.Log; import android.view.animation.AnimationUtils; import android.view.animation.LinearInterpolator; @@ -113,6 +115,7 @@ import java.util.Arrays; * @attr ref android.R.styleable#RippleDrawable_color */ public class RippleDrawable extends LayerDrawable { + private static final String TAG = "RippleDrawable"; /** * Radius value that specifies the ripple radius should be computed based * on the size of the ripple's container. @@ -848,6 +851,10 @@ public class RippleDrawable extends LayerDrawable { private void startBackgroundAnimation() { mRunBackgroundAnimation = false; + if (Looper.myLooper() == null) { + Log.w(TAG, "Thread doesn't have a looper. Skipping animation."); + return; + } mBackgroundAnimation = ValueAnimator.ofFloat(mBackgroundOpacity, mTargetBackgroundOpacity); mBackgroundAnimation.setInterpolator(LINEAR_INTERPOLATOR); mBackgroundAnimation.setDuration(BACKGROUND_OPACITY_DURATION); |