summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author John Reck <jreck@google.com> 2014-03-21 11:09:45 -0700
committer John Reck <jreck@google.com> 2014-03-21 18:16:18 +0000
commit91f0a455bb6670b59b8d15cc7a9adb0e6d7f146d (patch)
treed1ae665f9ea5884833b49c5892f075ed94bb77e8
parent3f5232220f2db839f690489ed272113f660daa40 (diff)
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
-rw-r--r--graphics/java/android/graphics/Bitmap.java18
1 files 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);
}