diff options
| -rw-r--r-- | core/java/android/view/ViewRootImpl.java | 26 | ||||
| -rw-r--r-- | core/jni/android_graphics_BLASTBufferQueue.cpp | 16 | ||||
| -rw-r--r-- | graphics/java/android/graphics/BLASTBufferQueue.java | 2 |
3 files changed, 22 insertions, 22 deletions
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index bfa13507ed50..efda257aed27 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -888,20 +888,18 @@ public final class ViewRootImpl implements ViewParent, static BLASTBufferQueue.TransactionHangCallback sTransactionHangCallback = new BLASTBufferQueue.TransactionHangCallback() { @Override - public void onTransactionHang(boolean isGPUHang) { - if (isGPUHang && !sAnrReported) { - sAnrReported = true; - try { - ActivityManager.getService().appNotResponding( - "Buffer processing hung up due to stuck fence. Indicates GPU hang"); - } catch (RemoteException e) { - // We asked the system to crash us, but the system - // already crashed. Unfortunately things may be - // out of control. - } - } else { - // TODO: Do something with this later. For now we just ANR - // in dequeue buffer later like we always have. + public void onTransactionHang(String reason) { + if (sAnrReported) { + return; + } + + sAnrReported = true; + try { + ActivityManager.getService().appNotResponding(reason); + } catch (RemoteException e) { + // We asked the system to crash us, but the system + // already crashed. Unfortunately things may be + // out of control. } } }; diff --git a/core/jni/android_graphics_BLASTBufferQueue.cpp b/core/jni/android_graphics_BLASTBufferQueue.cpp index 1520ea5c6831..03815108f6dd 100644 --- a/core/jni/android_graphics_BLASTBufferQueue.cpp +++ b/core/jni/android_graphics_BLASTBufferQueue.cpp @@ -71,10 +71,12 @@ public: } } - void onTransactionHang(bool isGpuHang) { + void onTransactionHang(const std::string& reason) { if (mTransactionHangObject) { + JNIEnv* env = getenv(mVm); + ScopedLocalRef<jstring> jReason(env, env->NewStringUTF(reason.c_str())); getenv(mVm)->CallVoidMethod(mTransactionHangObject, - gTransactionHangCallback.onTransactionHang, isGpuHang); + gTransactionHangCallback.onTransactionHang, jReason.get()); } } @@ -177,7 +179,7 @@ static bool nativeIsSameSurfaceControl(JNIEnv* env, jclass clazz, jlong ptr, jlo sp<BLASTBufferQueue> queue = reinterpret_cast<BLASTBufferQueue*>(ptr); return queue->isSameSurfaceControl(reinterpret_cast<SurfaceControl*>(surfaceControl)); } - + static void nativeSetTransactionHangCallback(JNIEnv* env, jclass clazz, jlong ptr, jobject transactionHangCallback) { sp<BLASTBufferQueue> queue = reinterpret_cast<BLASTBufferQueue*>(ptr); @@ -186,9 +188,8 @@ static void nativeSetTransactionHangCallback(JNIEnv* env, jclass clazz, jlong pt } else { sp<TransactionHangCallbackWrapper> wrapper = new TransactionHangCallbackWrapper{env, transactionHangCallback}; - queue->setTransactionHangCallback([wrapper](bool isGpuHang) { - wrapper->onTransactionHang(isGpuHang); - }); + queue->setTransactionHangCallback( + [wrapper](const std::string& reason) { wrapper->onTransactionHang(reason); }); } } @@ -236,7 +237,8 @@ int register_android_graphics_BLASTBufferQueue(JNIEnv* env) { jclass transactionHangClass = FindClassOrDie(env, "android/graphics/BLASTBufferQueue$TransactionHangCallback"); gTransactionHangCallback.onTransactionHang = - GetMethodIDOrDie(env, transactionHangClass, "onTransactionHang", "(Z)V"); + GetMethodIDOrDie(env, transactionHangClass, "onTransactionHang", + "(Ljava/lang/String;)V"); return 0; } diff --git a/graphics/java/android/graphics/BLASTBufferQueue.java b/graphics/java/android/graphics/BLASTBufferQueue.java index 1c41d06a3da2..9940ca3933c8 100644 --- a/graphics/java/android/graphics/BLASTBufferQueue.java +++ b/graphics/java/android/graphics/BLASTBufferQueue.java @@ -47,7 +47,7 @@ public final class BLASTBufferQueue { TransactionHangCallback callback); public interface TransactionHangCallback { - void onTransactionHang(boolean isGpuHang); + void onTransactionHang(String reason); } /** Create a new connection with the surface flinger. */ |