summaryrefslogtreecommitdiff
path: root/graphics/java/android
diff options
context:
space:
mode:
author Chris Craik <ccraik@google.com> 2014-08-26 13:10:33 -0700
committer Chris Craik <ccraik@google.com> 2014-08-26 13:10:33 -0700
commit4cd7dbc90f93893f521dce32d8cd25c02a185a24 (patch)
tree082b999b10e6b5fefa1aa899e6cd6b8314bc32ee /graphics/java/android
parentcc3e5d5cd197ad45e051e31fd85af28588af4cf7 (diff)
Notify VM of native pixelref allocations
bug:17178931 Change-Id: I0de22bb0d2ae8233d392b7e222f72391aaa12ce8
Diffstat (limited to 'graphics/java/android')
-rw-r--r--graphics/java/android/graphics/Bitmap.java20
1 files changed, 18 insertions, 2 deletions
diff --git a/graphics/java/android/graphics/Bitmap.java b/graphics/java/android/graphics/Bitmap.java
index 4d0bb75e7cc9..3090ffd896a5 100644
--- a/graphics/java/android/graphics/Bitmap.java
+++ b/graphics/java/android/graphics/Bitmap.java
@@ -21,6 +21,7 @@ import android.os.Parcel;
import android.os.Parcelable;
import android.os.Trace;
import android.util.DisplayMetrics;
+import dalvik.system.VMRuntime;
import java.io.OutputStream;
import java.nio.Buffer;
@@ -122,15 +123,18 @@ public final class Bitmap implements Parcelable {
mIsMutable = isMutable;
mRequestPremultiplied = requestPremultiplied;
mBuffer = buffer;
+
// we delete this in our finalizer
mNativeBitmap = nativeBitmap;
- mFinalizer = new BitmapFinalizer(nativeBitmap);
mNinePatchChunk = ninePatchChunk;
mNinePatchInsets = ninePatchInsets;
if (density >= 0) {
mDensity = density;
}
+
+ int nativeAllocationByteCount = buffer == null ? getByteCount() : 0;
+ mFinalizer = new BitmapFinalizer(nativeBitmap, nativeAllocationByteCount);
}
/**
@@ -1574,8 +1578,17 @@ public final class Bitmap implements Parcelable {
private static class BitmapFinalizer {
private final long mNativeBitmap;
- BitmapFinalizer(long nativeBitmap) {
+ // Native memory allocated for the duration of the Bitmap,
+ // if pixel data allocated into native memory, instead of java byte[]
+ private final int mNativeAllocationByteCount;
+
+ BitmapFinalizer(long nativeBitmap, int nativeAllocationByteCount) {
mNativeBitmap = nativeBitmap;
+ mNativeAllocationByteCount = nativeAllocationByteCount;
+
+ if (mNativeAllocationByteCount != 0) {
+ VMRuntime.getRuntime().registerNativeAllocation(mNativeAllocationByteCount);
+ }
}
@Override
@@ -1585,6 +1598,9 @@ public final class Bitmap implements Parcelable {
} catch (Throwable t) {
// Ignore
} finally {
+ if (mNativeAllocationByteCount != 0) {
+ VMRuntime.getRuntime().registerNativeFree(mNativeAllocationByteCount);
+ }
nativeDestructor(mNativeBitmap);
}
}