Merge "Revert GC thread changes" into jb-mr2-dev

This commit is contained in:
Jason Sams
2013-04-15 19:40:47 +00:00
committed by Android (Google) Code Review
5 changed files with 2 additions and 99 deletions

View File

@@ -277,21 +277,13 @@ public class Allocation extends BaseObj {
throw new RSIllegalArgumentException("Invalid usage combination.");
}
}
if (t != null) {
// don't need to account for USAGE_SHARED Allocations
if ((usage & USAGE_SHARED) == 0) {
int numBytes = t.getCount() * t.getElement().getBytesSize();
rs.addAllocSizeForGC(numBytes);
mGCSize = numBytes;
}
}
mType = t;
mUsage = usage;
if (t != null) {
updateCacheInfo(t);
}
}
private void validateIsInt32() {
@@ -355,12 +347,6 @@ public class Allocation extends BaseObj {
mType.updateFromNative();
updateCacheInfo(mType);
}
// don't need to account for USAGE_SHARED Allocations
if ((mUsage & USAGE_SHARED) == 0) {
int numBytes = mType.getCount() * mType.getElement().getBytesSize();
mRS.addAllocSizeForGC(numBytes);
mGCSize = numBytes;
}
}
/**
@@ -1264,7 +1250,6 @@ public class Allocation extends BaseObj {
if (type.getID(rs) == 0) {
throw new RSInvalidStateException("Bad Type");
}
int id = rs.nAllocationCreateTyped(type.getID(rs), mips.mID, usage, 0);
if (id == 0) {
throw new RSRuntimeException("Allocation creation failed.");
@@ -1414,6 +1399,7 @@ public class Allocation extends BaseObj {
return alloc;
}
int id = rs.nAllocationCreateFromBitmap(t.getID(rs), mips.mID, b, usage);
if (id == 0) {
throw new RSRuntimeException("Load failed.");

View File

@@ -71,9 +71,6 @@ public class BaseObj {
private int mID;
private boolean mDestroyed;
private String mName;
int mGCSize;
RenderScript mRS;
/**
@@ -138,9 +135,6 @@ public class BaseObj {
throw new RSInvalidStateException("Object already destroyed.");
}
mDestroyed = true;
if (mGCSize != 0) {
mRS.removeAllocSizeForGC(mGCSize);
}
mRS.nObjDestroy(mID);
}

View File

@@ -18,9 +18,7 @@ package android.renderscript;
import java.io.File;
import java.lang.reflect.Field;
import java.util.concurrent.locks.*;
import android.app.ActivityManager;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
@@ -804,8 +802,6 @@ public class RenderScript {
int mContext;
@SuppressWarnings({"FieldCanBeLocal"})
MessageThread mMessageThread;
GCThread mGCThread;
Element mElement_U8;
Element mElement_I8;
@@ -1095,60 +1091,6 @@ public class RenderScript {
}
}
static class GCThread extends Thread {
RenderScript mRS;
boolean mRun = true;
long currentSize = 0;
long targetSize; // call System.gc after 512MB of allocs
final Lock lock = new ReentrantLock();
final Condition cond = lock.newCondition();
GCThread(RenderScript rs) {
super("RSGCThread");
mRS = rs;
}
public void run() {
ActivityManager am = (ActivityManager)mRS.getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE);
ActivityManager.MemoryInfo meminfo = new ActivityManager.MemoryInfo();
am.getMemoryInfo(meminfo);
targetSize = (long)(meminfo.totalMem * .5f);
while(mRun) {
System.gc();
lock.lock();
try {
cond.awaitUninterruptibly();
} finally {
lock.unlock();
}
}
Log.d(LOG_TAG, "GCThread exiting.");
}
public synchronized void addAllocSize(long bytes) {
currentSize += bytes;
if (currentSize >= targetSize) {
lock.lock();
try {
cond.signal();
} finally {
lock.unlock();
}
}
}
public synchronized void removeAllocSize(long bytes) {
currentSize -= bytes;
}
}
RenderScript(Context ctx) {
if (ctx != null) {
mApplicationContext = ctx.getApplicationContext();
@@ -1171,15 +1113,6 @@ public class RenderScript {
return create(ctx, sdkVersion, ContextType.NORMAL);
}
void addAllocSizeForGC(int bytes) {
mGCThread.addAllocSize(bytes);
}
void removeAllocSizeForGC(int bytes) {
mGCThread.removeAllocSize(bytes);
}
/**
* Create a basic RenderScript context.
*
@@ -1196,9 +1129,7 @@ public class RenderScript {
throw new RSDriverException("Failed to create RS context.");
}
rs.mMessageThread = new MessageThread(rs);
rs.mGCThread = new GCThread(rs);
rs.mMessageThread.start();
rs.mGCThread.start();
return rs;
}
@@ -1253,11 +1184,8 @@ public class RenderScript {
validate();
nContextDeinitToClient(mContext);
mMessageThread.mRun = false;
mGCThread.mRun = false;
mGCThread.addAllocSize(0);
try {
mMessageThread.join();
mGCThread.join();
} catch(InterruptedException e) {
}

View File

@@ -198,9 +198,6 @@ public class RenderScriptGL extends RenderScript {
}
mMessageThread = new MessageThread(this);
mMessageThread.start();
mGCThread = new GCThread(this);
mGCThread.start();
}
/**

View File

@@ -60,8 +60,6 @@ public class ScriptC extends Script {
throw new RSRuntimeException("Loading of ScriptC script failed.");
}
setID(id);
mGCSize = 2 * 1024 * 1024;
rs.addAllocSizeForGC(mGCSize);
}
/**