summaryrefslogtreecommitdiff
path: root/graphics/java/android/renderscript/RenderScript.java
diff options
context:
space:
mode:
authorStephen Hines <srhines@google.com>2013-04-17 19:22:01 -0700
committerStephen Hines <srhines@google.com>2013-04-17 19:22:01 -0700
commit42028a87568c2b7b5ff3691df7c345bbc5802ade (patch)
tree8e257d643823c046b3956494ddb9b72f25a15762 /graphics/java/android/renderscript/RenderScript.java
parent09d0ee261d11396e1541c23d8f4f3f5d7e6a9e18 (diff)
Add new error code for Debug Context work.
Bug: 7343201 This error type is less severe when running under the debug context, allowing developers to use RSErrorHandler to respond to errors like out-of-bounds native accesses. Change-Id: I79c87d1956c94833546f0f638ffa1aafecae49cd
Diffstat (limited to 'graphics/java/android/renderscript/RenderScript.java')
-rw-r--r--graphics/java/android/renderscript/RenderScript.java17
1 files changed, 16 insertions, 1 deletions
diff --git a/graphics/java/android/renderscript/RenderScript.java b/graphics/java/android/renderscript/RenderScript.java
index 6f614c3767e9..4493d41aace6 100644
--- a/graphics/java/android/renderscript/RenderScript.java
+++ b/graphics/java/android/renderscript/RenderScript.java
@@ -128,6 +128,8 @@ public class RenderScript {
}
}
+ ContextType mContextType;
+
// Methods below are wrapped to protect the non-threadsafe
// lockless fifo.
native int rsnContextCreateGL(int dev, int ver, int sdkVer,
@@ -1015,6 +1017,7 @@ public class RenderScript {
static final int RS_MESSAGE_TO_CLIENT_USER = 4;
static final int RS_MESSAGE_TO_CLIENT_NEW_BUFFER = 5;
+ static final int RS_ERROR_FATAL_DEBUG = 0x0800;
static final int RS_ERROR_FATAL_UNKNOWN = 0x1000;
MessageThread(RenderScript rs) {
@@ -1057,7 +1060,17 @@ public class RenderScript {
if (msg == RS_MESSAGE_TO_CLIENT_ERROR) {
String e = mRS.nContextGetErrorMessage(mRS.mContext);
- if (subID >= RS_ERROR_FATAL_UNKNOWN) {
+ // Throw RSRuntimeException under the following conditions:
+ //
+ // 1) It is an unknown fatal error.
+ // 2) It is a debug fatal error, and we are not in a
+ // debug context.
+ // 3) It is a debug fatal error, and we do not have an
+ // error callback.
+ if (subID >= RS_ERROR_FATAL_UNKNOWN ||
+ (subID >= RS_ERROR_FATAL_DEBUG &&
+ (mRS.mContextType != ContextType.DEBUG ||
+ mRS.mErrorCallback == null))) {
throw new RSRuntimeException("Fatal error " + subID + ", details: " + e);
}
@@ -1092,6 +1105,7 @@ public class RenderScript {
}
RenderScript(Context ctx) {
+ mContextType = ContextType.NORMAL;
if (ctx != null) {
mApplicationContext = ctx.getApplicationContext();
}
@@ -1125,6 +1139,7 @@ public class RenderScript {
rs.mDev = rs.nDeviceCreate();
rs.mContext = rs.nContextCreate(rs.mDev, 0, sdkVersion, ct.mID);
+ rs.mContextType = ct;
if (rs.mContext == 0) {
throw new RSDriverException("Failed to create RS context.");
}