From 91f0a455bb6670b59b8d15cc7a9adb0e6d7f146d Mon Sep 17 00:00:00 2001 From: John Reck Date: Fri, 21 Mar 2014 11:09:45 -0700 Subject: Eliminate mHasAlpha Bug: 13580771 The cached value mHasAlpha on Bitmap could get out of sync with the real value stored in the SkBitmap. Fix this by just eliminating the cached value. This adds an extra JNI call in copy(), createBitmap(), and setPremultiplied(), none of which are going to be significantly impacted by the extra JNI call. Change-Id: I4fce069a77d9b3bbb47dde04275ff8510ce7e4f0 --- graphics/java/android/graphics/Bitmap.java | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/graphics/java/android/graphics/Bitmap.java b/graphics/java/android/graphics/Bitmap.java index 17727d3160f0..74838ee2c14b 100644 --- a/graphics/java/android/graphics/Bitmap.java +++ b/graphics/java/android/graphics/Bitmap.java @@ -68,15 +68,6 @@ public final class Bitmap implements Parcelable { */ private boolean mIsPremultiplied; - /** - * Whether the Bitmap's content is expected to have alpha. Note that hasAlpha() - * does not directly return this value, because hasAlpha() may never return true - * for a 565 Bitmap. - * - * Any time this or mIsPremultiplied is changed, both are passed to native so they - * are not order dependent. - */ - private boolean mHasAlpha; private byte[] mNinePatchChunk; // may be null private int[] mLayoutBounds; // may be null private int mWidth; @@ -564,7 +555,7 @@ public final class Bitmap implements Parcelable { checkRecycled("Can't copy a recycled bitmap"); Bitmap b = nativeCopy(mNativeBitmap, config.nativeInt, isMutable); if (b != null) { - b.setAlphaAndPremultiplied(mHasAlpha, mIsPremultiplied); + b.setAlphaAndPremultiplied(hasAlpha(), mIsPremultiplied); b.mDensity = mDensity; } return b; @@ -741,7 +732,7 @@ public final class Bitmap implements Parcelable { // The new bitmap was created from a known bitmap source so assume that // they use the same density bitmap.mDensity = source.mDensity; - bitmap.setAlphaAndPremultiplied(source.mHasAlpha, source.mIsPremultiplied); + bitmap.setAlphaAndPremultiplied(source.hasAlpha(), source.mIsPremultiplied); canvas.setBitmap(bitmap); canvas.drawBitmap(source, srcR, dstR, paint); @@ -894,7 +885,6 @@ public final class Bitmap implements Parcelable { if (display != null) { bm.mDensity = display.densityDpi; } - bm.mHasAlpha = true; return bm; } @@ -1062,12 +1052,11 @@ public final class Bitmap implements Parcelable { */ public final void setPremultiplied(boolean premultiplied) { mIsPremultiplied = premultiplied; - nativeSetAlphaAndPremultiplied(mNativeBitmap, mHasAlpha, premultiplied); + nativeSetAlphaAndPremultiplied(mNativeBitmap, hasAlpha(), premultiplied); } /** Helper function to set both alpha and premultiplied. **/ private final void setAlphaAndPremultiplied(boolean hasAlpha, boolean premultiplied) { - mHasAlpha = hasAlpha; mIsPremultiplied = premultiplied; nativeSetAlphaAndPremultiplied(mNativeBitmap, hasAlpha, premultiplied); } @@ -1230,7 +1219,6 @@ public final class Bitmap implements Parcelable { * non-opaque per-pixel alpha values. */ public void setHasAlpha(boolean hasAlpha) { - mHasAlpha = hasAlpha; nativeSetAlphaAndPremultiplied(mNativeBitmap, hasAlpha, mIsPremultiplied); } -- cgit v1.2.3-59-g8ed1b