Merge "Add garbage collection hooks" into klp-dev
This commit is contained in:
@@ -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() {
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user