summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorRomain Guy <romainguy@google.com>2013-05-29 15:54:25 -0700
committerRomain Guy <romainguy@google.com>2013-05-29 16:01:36 -0700
commit80b12fcaaec458377d966803c3a61504f0897ea1 (patch)
treeeb80fcbfffdaca5506afddc0f40578136e099dda /core
parent3bf4fa4b161342ac94e97844c7af0982f4a2758d (diff)
downloadframeworks_base-80b12fcaaec458377d966803c3a61504f0897ea1.zip
frameworks_base-80b12fcaaec458377d966803c3a61504f0897ea1.tar.gz
frameworks_base-80b12fcaaec458377d966803c3a61504f0897ea1.tar.bz2
Disable the AssetAtlas when running under valgrind
Bug #9191438 When running under valgrind, the ppid will be different from the ppid of the system server (which always gets forked from zygote.) Change-Id: I42cbf99fd0084aeab76c30de9beb7c49ed1fc7d8
Diffstat (limited to 'core')
-rw-r--r--core/java/android/os/Process.java6
-rw-r--r--core/java/android/view/HardwareRenderer.java12
-rw-r--r--core/java/android/view/IAssetAtlas.aidl7
-rw-r--r--core/jni/android_util_Process.cpp6
4 files changed, 26 insertions, 5 deletions
diff --git a/core/java/android/os/Process.java b/core/java/android/os/Process.java
index 476b4ea..93b1255 100644
--- a/core/java/android/os/Process.java
+++ b/core/java/android/os/Process.java
@@ -650,6 +650,12 @@ public class Process {
public static final native int myPid();
/**
+ * Returns the identifier of this process' parent.
+ * @hide
+ */
+ public static native int myPpid();
+
+ /**
* Returns the identifier of the calling thread, which be used with
* {@link #setThreadPriority(int, int)}.
*/
diff --git a/core/java/android/view/HardwareRenderer.java b/core/java/android/view/HardwareRenderer.java
index 8dada90..c07b187 100644
--- a/core/java/android/view/HardwareRenderer.java
+++ b/core/java/android/view/HardwareRenderer.java
@@ -1931,11 +1931,13 @@ public abstract class HardwareRenderer {
IAssetAtlas atlas = IAssetAtlas.Stub.asInterface(binder);
try {
- GraphicBuffer buffer = atlas.getBuffer();
- if (buffer != null) {
- int[] map = atlas.getMap();
- if (map != null) {
- GLES20Canvas.initAtlas(buffer, map);
+ if (atlas.isCompatible(android.os.Process.myPpid())) {
+ GraphicBuffer buffer = atlas.getBuffer();
+ if (buffer != null) {
+ int[] map = atlas.getMap();
+ if (map != null) {
+ GLES20Canvas.initAtlas(buffer, map);
+ }
}
}
} catch (RemoteException e) {
diff --git a/core/java/android/view/IAssetAtlas.aidl b/core/java/android/view/IAssetAtlas.aidl
index 2595179..5f1e238 100644
--- a/core/java/android/view/IAssetAtlas.aidl
+++ b/core/java/android/view/IAssetAtlas.aidl
@@ -28,6 +28,13 @@ import android.view.GraphicBuffer;
*/
interface IAssetAtlas {
/**
+ * Indicates whether the atlas is compatible with the specified
+ * parent process id. If the atlas' ppid does not match, this
+ * method will return false.
+ */
+ boolean isCompatible(int ppid);
+
+ /**
* Returns the atlas buffer (texture) or null if the atlas is
* not available yet.
*/
diff --git a/core/jni/android_util_Process.cpp b/core/jni/android_util_Process.cpp
index 5d32328..61eb31b 100644
--- a/core/jni/android_util_Process.cpp
+++ b/core/jni/android_util_Process.cpp
@@ -99,6 +99,11 @@ jint android_os_Process_myPid(JNIEnv* env, jobject clazz)
return getpid();
}
+jint android_os_Process_myPpid(JNIEnv* env, jobject clazz)
+{
+ return getppid();
+}
+
jint android_os_Process_myUid(JNIEnv* env, jobject clazz)
{
return getuid();
@@ -990,6 +995,7 @@ jintArray android_os_Process_getPidsForCommands(JNIEnv* env, jobject clazz,
static const JNINativeMethod methods[] = {
{"myPid", "()I", (void*)android_os_Process_myPid},
+ {"myPpid", "()I", (void*)android_os_Process_myPpid},
{"myTid", "()I", (void*)android_os_Process_myTid},
{"myUid", "()I", (void*)android_os_Process_myUid},
{"getUidForName", "(Ljava/lang/String;)I", (void*)android_os_Process_getUidForName},