summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Robin Lee <rgl@google.com> 2025-03-11 21:17:51 -0700
committer Android (Google) Code Review <android-gerrit@google.com> 2025-03-11 21:17:51 -0700
commit5853a8d31c36beb95b0f979d25c4aa10ffe0be99 (patch)
tree3650fefb43247246fea9b4d63942876f3a367aca
parentf6992ead65e858ea91dc0d30063d89d701f7d1fb (diff)
parent13aefc4ba816dff4bd0875c6eca3b9dd1015a432 (diff)
Merge "Retain the gainmap during Bitmap.asShared()" into main
-rw-r--r--graphics/java/android/graphics/Bitmap.java8
-rw-r--r--graphics/java/android/graphics/Gainmap.java12
2 files changed, 18 insertions, 2 deletions
diff --git a/graphics/java/android/graphics/Bitmap.java b/graphics/java/android/graphics/Bitmap.java
index cd5a54c2fd3f..a4ba2b398deb 100644
--- a/graphics/java/android/graphics/Bitmap.java
+++ b/graphics/java/android/graphics/Bitmap.java
@@ -755,6 +755,9 @@ public final class Bitmap implements Parcelable {
if (b != null) {
b.setPremultiplied(mRequestPremultiplied);
b.mDensity = mDensity;
+ if (hasGainmap()) {
+ b.setGainmap(getGainmap().asShared());
+ }
}
return b;
}
@@ -767,7 +770,8 @@ public final class Bitmap implements Parcelable {
*/
@NonNull
public Bitmap asShared() {
- if (nativeIsBackedByAshmem(mNativePtr) && nativeIsImmutable(mNativePtr)) {
+ if (nativeIsBackedByAshmem(mNativePtr) && nativeIsImmutable(mNativePtr)
+ && (!hasGainmap() || getGainmap().asShared() == getGainmap())) {
return this;
}
Bitmap shared = createAshmemBitmap();
@@ -2091,7 +2095,7 @@ public final class Bitmap implements Parcelable {
*/
public void setGainmap(@Nullable Gainmap gainmap) {
checkRecycled("Bitmap is recycled");
- mGainmap = null;
+ mGainmap = gainmap;
nativeSetGainmap(mNativePtr, gainmap == null ? 0 : gainmap.mNativePtr);
}
diff --git a/graphics/java/android/graphics/Gainmap.java b/graphics/java/android/graphics/Gainmap.java
index 7fc13db85659..2417a1270bc5 100644
--- a/graphics/java/android/graphics/Gainmap.java
+++ b/graphics/java/android/graphics/Gainmap.java
@@ -161,6 +161,18 @@ public final class Gainmap implements Parcelable {
}
/**
+ * @hide
+ */
+ public Gainmap asShared() {
+ final Bitmap sharedContents = mGainmapContents.asShared();
+ if (sharedContents == mGainmapContents) {
+ return this;
+ } else {
+ return new Gainmap(sharedContents, nCreateCopy(mNativePtr));
+ }
+ }
+
+ /**
* @return Returns the image data of the gainmap represented as a Bitmap. This is represented
* as a Bitmap for broad API compatibility, however certain aspects of the Bitmap are ignored
* such as {@link Bitmap#getColorSpace()} or {@link Bitmap#getGainmap()} as they are not