diff options
author | Yang Ni <yangni@google.com> | 2016-04-01 00:33:57 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2016-04-01 00:33:58 +0000 |
commit | 0c6ed67c3ab80f406d31a2e4d666a680e62cb83c (patch) | |
tree | f64f3fe55b23960c162a4793304ce60b434611bc | |
parent | b8572b3d50475918d3e2b25961b7c6189d6af39e (diff) | |
parent | 6484b6be5ca5233614d0a8991a5d909543824fc7 (diff) |
Merge "Added CloseGuard for BaseObj" into nyc-dev
-rw-r--r-- | rs/java/android/renderscript/Allocation.java | 2 | ||||
-rw-r--r-- | rs/java/android/renderscript/BaseObj.java | 13 | ||||
-rw-r--r-- | rs/java/android/renderscript/Element.java | 2 | ||||
-rw-r--r-- | rs/java/android/renderscript/FileA3D.java | 1 | ||||
-rw-r--r-- | rs/java/android/renderscript/Font.java | 1 | ||||
-rw-r--r-- | rs/java/android/renderscript/Mesh.java | 1 | ||||
-rw-r--r-- | rs/java/android/renderscript/Program.java | 1 | ||||
-rw-r--r-- | rs/java/android/renderscript/Sampler.java | 1 | ||||
-rw-r--r-- | rs/java/android/renderscript/Script.java | 15 | ||||
-rw-r--r-- | rs/java/android/renderscript/ScriptGroup.java | 6 | ||||
-rw-r--r-- | rs/java/android/renderscript/Type.java | 1 |
11 files changed, 42 insertions, 2 deletions
diff --git a/rs/java/android/renderscript/Allocation.java b/rs/java/android/renderscript/Allocation.java index 81f63aeab0a5..9ec6e8daf429 100644 --- a/rs/java/android/renderscript/Allocation.java +++ b/rs/java/android/renderscript/Allocation.java @@ -380,6 +380,7 @@ public class Allocation extends BaseObj { Log.e(RenderScript.LOG_TAG, "Couldn't invoke registerNativeAllocation:" + e); throw new RSRuntimeException("Couldn't invoke registerNativeAllocation:" + e); } + guard.open("destroy"); } Allocation(long id, RenderScript rs, Type t, int usage, MipmapControl mips) { @@ -1915,6 +1916,7 @@ public class Allocation extends BaseObj { if (type.getID(rs) == 0) { throw new RSInvalidStateException("Bad Type"); } + // TODO: What if there is an exception after this? The native allocation would leak. long id = rs.nAllocationCreateTyped(type.getID(rs), mips.mID, usage, 0); if (id == 0) { throw new RSRuntimeException("Allocation creation failed."); diff --git a/rs/java/android/renderscript/BaseObj.java b/rs/java/android/renderscript/BaseObj.java index 1372ab79e264..f95af1673730 100644 --- a/rs/java/android/renderscript/BaseObj.java +++ b/rs/java/android/renderscript/BaseObj.java @@ -16,6 +16,7 @@ package android.renderscript; +import dalvik.system.CloseGuard; import java.util.concurrent.locks.ReentrantReadWriteLock; /** @@ -69,6 +70,7 @@ public class BaseObj { } private long mID; + final CloseGuard guard = CloseGuard.get(); private boolean mDestroyed; private String mName; RenderScript mRS; @@ -119,6 +121,7 @@ public class BaseObj { } if (shouldDestroy) { + guard.close(); // must include nObjDestroy in the critical section ReentrantReadWriteLock.ReadLock rlock = mRS.mRWLock.readLock(); rlock.lock(); @@ -133,8 +136,14 @@ public class BaseObj { } protected void finalize() throws Throwable { - helpDestroy(); - super.finalize(); + try { + if (guard != null) { + guard.warnIfOpen(); + } + helpDestroy(); + } finally { + super.finalize(); + } } /** diff --git a/rs/java/android/renderscript/Element.java b/rs/java/android/renderscript/Element.java index 6efb6d6a5735..50226acc77b4 100644 --- a/rs/java/android/renderscript/Element.java +++ b/rs/java/android/renderscript/Element.java @@ -808,6 +808,7 @@ public class Element extends BaseObj { mSize += mElements[ct].mSize * mArraySizes[ct]; } updateVisibleSubElements(); + guard.open("destroy"); } Element(long id, RenderScript rs, DataType dt, DataKind dk, boolean norm, int size) { @@ -827,6 +828,7 @@ public class Element extends BaseObj { mKind = dk; mNormalized = norm; mVectorSize = size; + guard.open("destroy"); } Element(long id, RenderScript rs) { diff --git a/rs/java/android/renderscript/FileA3D.java b/rs/java/android/renderscript/FileA3D.java index 9d8f1624a051..278d309c74f7 100644 --- a/rs/java/android/renderscript/FileA3D.java +++ b/rs/java/android/renderscript/FileA3D.java @@ -170,6 +170,7 @@ public class FileA3D extends BaseObj { FileA3D(long id, RenderScript rs, InputStream stream) { super(id, rs); mInputStream = stream; + guard.open("destroy"); } private void initEntries() { diff --git a/rs/java/android/renderscript/Font.java b/rs/java/android/renderscript/Font.java index 4318b9d4d21c..d5ca31e93418 100644 --- a/rs/java/android/renderscript/Font.java +++ b/rs/java/android/renderscript/Font.java @@ -150,6 +150,7 @@ public class Font extends BaseObj { Font(long id, RenderScript rs) { super(id, rs); + guard.open("destroy"); } /** diff --git a/rs/java/android/renderscript/Mesh.java b/rs/java/android/renderscript/Mesh.java index 13c8e1c91052..9e4f90573ae9 100644 --- a/rs/java/android/renderscript/Mesh.java +++ b/rs/java/android/renderscript/Mesh.java @@ -91,6 +91,7 @@ public class Mesh extends BaseObj { Mesh(long id, RenderScript rs) { super(id, rs); + guard.open("destroy"); } /** diff --git a/rs/java/android/renderscript/Program.java b/rs/java/android/renderscript/Program.java index 3eb9b7590f45..772021c7815c 100644 --- a/rs/java/android/renderscript/Program.java +++ b/rs/java/android/renderscript/Program.java @@ -76,6 +76,7 @@ public class Program extends BaseObj { Program(long id, RenderScript rs) { super(id, rs); + guard.open("destroy"); } /** diff --git a/rs/java/android/renderscript/Sampler.java b/rs/java/android/renderscript/Sampler.java index a4edbb50ac10..5c4bae99ba8f 100644 --- a/rs/java/android/renderscript/Sampler.java +++ b/rs/java/android/renderscript/Sampler.java @@ -51,6 +51,7 @@ public class Sampler extends BaseObj { Sampler(long id, RenderScript rs) { super(id, rs); + guard.open("destroy"); } /** diff --git a/rs/java/android/renderscript/Script.java b/rs/java/android/renderscript/Script.java index f6f93cb7b964..fc3280be3ac7 100644 --- a/rs/java/android/renderscript/Script.java +++ b/rs/java/android/renderscript/Script.java @@ -41,6 +41,7 @@ public class Script extends BaseObj { mScript = s; mSlot = slot; mSig = sig; + guard.open("destroy"); } } @@ -118,6 +119,7 @@ public class Script extends BaseObj { super(id, rs); mScript = s; mSlot = slot; + guard.open("destroy"); } } @@ -357,6 +359,19 @@ public class Script extends BaseObj { super(id, rs); mInIdsBuffer = new long[1]; + + /* The constructors for the derived classes (including ScriptIntrinsic + * derived classes and ScriptC derived classes generated by Slang + * reflection) seem to be simple enough, so we just put the guard.open() + * call here, rather than in the end of the constructor for the derived + * class. This, of course, assumes the derived constructor would not + * throw any exception after calling this constructor. + * + * If new derived classes are added with more complicated constructors + * that throw exceptions, this call has to be (duplicated and) moved + * to the end of each derived class constructor. + */ + guard.open("destroy"); } /** diff --git a/rs/java/android/renderscript/ScriptGroup.java b/rs/java/android/renderscript/ScriptGroup.java index 9357c3bb0428..219f16b91baf 100644 --- a/rs/java/android/renderscript/ScriptGroup.java +++ b/rs/java/android/renderscript/ScriptGroup.java @@ -148,6 +148,8 @@ public final class ScriptGroup extends BaseObj { fieldIDs, values, sizes, depClosures, depFieldIDs); setID(id); + + guard.open("destroy"); } Closure(RenderScript rs, Script.InvokeID invokeID, @@ -181,6 +183,8 @@ public final class ScriptGroup extends BaseObj { values, sizes); setID(id); + + guard.open("destroy"); } private void retrieveValueAndDependenceInfo(RenderScript rs, @@ -382,6 +386,7 @@ public final class ScriptGroup extends BaseObj { ScriptGroup(long id, RenderScript rs) { super(id, rs); + guard.open("destroy"); } ScriptGroup(RenderScript rs, String name, List<Closure> closures, @@ -398,6 +403,7 @@ public final class ScriptGroup extends BaseObj { } long id = rs.nScriptGroup2Create(name, RenderScript.getCachePath(), closureIDs); setID(id); + guard.open("destroy"); } /** diff --git a/rs/java/android/renderscript/Type.java b/rs/java/android/renderscript/Type.java index dc2378596d00..9252898781f4 100644 --- a/rs/java/android/renderscript/Type.java +++ b/rs/java/android/renderscript/Type.java @@ -227,6 +227,7 @@ public class Type extends BaseObj { Type(long id, RenderScript rs) { super(id, rs); + guard.open("destroy"); } @Override |