Merge "Add garbage collection hooks" into klp-dev

This commit is contained in:
Tim Murray
2013-08-23 23:40:47 +00:00
committed by Android (Google) Code Review
2 changed files with 27 additions and 0 deletions

View File

@@ -61,6 +61,7 @@ public class Allocation extends BaseObj {
Bitmap mBitmap;
int mUsage;
Allocation mAdaptedAllocation;
int mSize;
boolean mConstrainedLOD;
boolean mConstrainedFace;
@@ -268,10 +269,22 @@ public class Allocation extends BaseObj {
mType = t;
mUsage = usage;
mSize = mType.getCount() * mType.getElement().getBytesSize();
if (t != null) {
updateCacheInfo(t);
}
try {
RenderScript.registerNativeAllocation.invoke(RenderScript.sRuntime, mSize);
} catch (Exception e) {
Log.e(RenderScript.LOG_TAG, "Couldn't invoke registerNativeAllocation:" + e);
throw new RSRuntimeException("Couldn't invoke registerNativeAllocation:" + e);
}
}
protected void finalize() throws Throwable {
RenderScript.registerNativeFree.invoke(RenderScript.sRuntime, mSize);
super.finalize();
}
private void validateIsInt32() {

View File

@@ -18,6 +18,7 @@ package android.renderscript;
import java.io.File;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import android.content.Context;
import android.content.pm.ApplicationInfo;
@@ -61,10 +62,23 @@ public class RenderScript {
static boolean sInitialized;
native static void _nInit();
static Object sRuntime;
static Method registerNativeAllocation;
static Method registerNativeFree;
static {
sInitialized = false;
if (!SystemProperties.getBoolean("config.disable_renderscript", false)) {
try {
Class<?> vm_runtime = Class.forName("dalvik.system.VMRuntime");
Method get_runtime = vm_runtime.getDeclaredMethod("getRuntime");
sRuntime = get_runtime.invoke(null);
registerNativeAllocation = vm_runtime.getDeclaredMethod("registerNativeAllocation", Integer.TYPE);
registerNativeFree = vm_runtime.getDeclaredMethod("registerNativeFree", Integer.TYPE);
} catch (Exception e) {
Log.e(LOG_TAG, "Error loading GC methods: " + e);
throw new RSRuntimeException("Error loading GC methods: " + e);
}
try {
System.loadLibrary("rs_jni");
_nInit();